организовал автоматическое переключение монитора на вход AV при включении задней скорости.
монитор умеет засыпать ТОЛЬКО в режиме VGA, в режимах AV1, AV2 он светится синим экраном.
нужна реализация следующего алгоритма: при включении задней скорости на пульте автоматоматически нажимается кнопка AV1,
при отключении задней скорости автоматически нажимается кнопка VGA.
все сделано на arduino
к пульту монитора подпаены проводки на кнопки AV1 и VGA, + и -
выпаиваен и вынесен светодиод из пульта
схема подключения arduino и схема питания пульта
(забыл указать, что в схеме включения, используются оптопары PC817)
так же выложен код, который мне любезно (за трешку) наипенил BlkDem.
Код:
// ==== Thermaltake A2413 rearview camera auto switch**====
// ==== Powered by BlkDem, much_beer (c) 2012**********====
#include <avr/wdt.h>
#define btnVGA_pin (6) //выход ардуино, нажимающий кнопку VGA. Поменяйте по необходимости на ваше.
#define btnV1_pin (5) //выход ардуино, нажимающий кнопку Video1. Поменяйте по необходимости на ваше.
#define mPause (100) //множитель программной задержки. Поменяйте по необходимости на ваше.
#define camera_pin (2) //Digital2 вход Arduino - именно на нем находится 0 прерывание. Менять, без переписывания кода, нельзя.
void soft_delay(long value) //программная задержка. delay в прерываниях использовать не стоит
{
****for (long i=0; i<value; i++)
****{
******digitalWrite(9, HIGH); //можно поменять на любой бестолковый код. 9 нога здесь для примера.***
******digitalWrite(9, LOW);**//Если у вас используется, поменяйте на другую.
****}
}
//нажатие на кнопку 2 раза сделано для надежности
//если у вас будет работать с одного раза, то повтор можно удалить из кода
void EnableVGA() //функция включения VGA путем нажатия на соответствующую кнопку пульта
{
****detachInterrupt(0); //отключаем прерывание
********
****digitalWrite(btnVGA_pin, HIGH); //нажимаем кнопку
****soft_delay(mPause * 200);
****digitalWrite(btnVGA_pin, LOW); //отпускаем кнопку
****soft_delay(mPause * 300);
****digitalWrite(btnVGA_pin, HIGH); //нажимаем кнопку
****soft_delay(mPause * 200);***
****digitalWrite(btnVGA_pin, LOW); //нажимаем кнопку
******
****attachInterrupt(0, EnableV1, FALLING); //включаем 0 прерывание (реакция на включение заднего хода)
}
void EnableV1() //функция включения Video1 путем нажатия на соответствующую кнопку пульта
{
****detachInterrupt(0);**//отключаем прерывание
******
****digitalWrite(btnV1_pin, HIGH); //нажимаем кнопку
****soft_delay(mPause * 300);
****digitalWrite(btnV1_pin, LOW);**//отпускаем кнопку
****soft_delay(mPause * 200);
****digitalWrite(btnV1_pin, HIGH); //нажимаем кнопку
****soft_delay(mPause * 300);
****digitalWrite(btnV1_pin, LOW); //отпускаем кнопку
******
****attachInterrupt(0, EnableVGA, RISING); //включаем 0 прерывание (реакция на вЫключение заднего хода)
}
void setup()
{
****pinMode(btnVGA_pin, OUTPUT); //конфигурируем выходы, управляющие кнопками пульта как выходы
****pinMode(btnV1_pin, OUTPUT);
****pinMode(camera_pin, INPUT); // конфигурируем пин камеры как вход
****digitalWrite(camera_pin, HIGH); //включаем внутренню подтяжку (актуально для схемы с оптопарой)
****interrupts(); //разрешаем прерывания
****EnableVGA(); //включаем VGA при запуске авто
******
****wdt_enable(WDTO_4S); //инициализируем сторожевой таймер на 4 сек. Мы ведь не хотим, чтобы ардуина по каким то причинам, подвиснув, перестала работать.
}
void loop()
{
****wdt_reset();**//сбрасываем сторожевой таймер
}
ну и видео
(на видео компьютер выключен, в результате чего при переключении в режим VGA, монитор ругается на отсутствие сигнала и переводит в спячку экран)