Показано с 1 по 8 из 8

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Продвинутый
    Регистрация
    20.12.2011
    Сообщений
    336
    Вес репутации
    225

    По умолчанию Re: Коммутация сигнала с видеокамер

    Собрал коммутатор камер на базе seeduino mega 1280
    Работает!!!

    Итак:
    Три камеры, боковые и задняя.
    При включении поворотника включается левая или правая камера.
    При включении заднего хода - задняя.
    Кнопкой можно переключать все три камеры при движении задом.

    8ми релюшный модуль для ардуино почти полностью использовал.
    Три реле на питание камер, три на видео сигнал.
    Еще одно реле пришлось использовать, чтобы сигнал на DVD монитор подавать, чтобы он автоматом включался на видео.

    Пришлось поизголяться с кодом, так как сигнал с поворотников не постоянный, а "мигающий"...

    Вот скетч, покритикуйте, может кто что-то изящнее предложит:
    Код:
    #include <EEPROM.h>
    #include <MsTimer2.h>
    //#include <avr/wdt.h> 
    
    #define DEBUG 0  // используется при отладке
    
    //#define  HandBreakPin 14  // Контакт  для сигнала от ручного тормоза
    //#define  SmallLightPin 15  // Контакт для сигнала от габаритов
    #define  LeftTurnPin 36  // Контакт для сигнала от левого поворотника
    #define  RightTurnPin 34  // Контакт  для сигнала от правого поворотника
    #define  RearGearPin 35  // Контакт для сигнала заднего хода
    #define  ButtonPin 12 // Контакт для кнопки
    #define Relay_Camera1_12V_Pin 30// Контакт для реле - питание камеры 1
    #define Relay_Camera2_12V_Pin 31// Контакт для реле - питание камеры 2
    #define Relay_Camera3_12V_Pin 32// Контакт для реле - питание камеры 3
    #define Relay_DVDCenter_12V_Pin 33// Контакт для реле - питание DVD
    #define Relay_Camera1_Video_Pin 26// Контакт для реле - сигнал с камеры 1
    #define Relay_Camera2_Video_Pin 27// Контакт для реле - сигнал с камеры 2
    #define Relay_Camera3_Video_Pin 28// Контакт для реле - сигнал с камеры 3
    
    void setup() 
    {
    //  wdt_enable (WDTO_8S); // сторожевой таймер от зависания
    pinMode(LeftTurnPin, INPUT);// Контакт  для сигнала от левого поворотника
    digitalWrite(LeftTurnPin, HIGH); //внутренняя подтяжка входа +++++ 
    pinMode(RightTurnPin, INPUT);// Контакт  для сигнала от правого поворотника
    digitalWrite(RightTurnPin, HIGH); //внутренняя подтяжка входа +++++ 
    pinMode(RearGearPin , INPUT);// Контакт  для сигнала от заднего хода
    digitalWrite(RearGearPin , HIGH); //внутренняя подтяжка входа +++++ 
    
    pinMode(ButtonPin , INPUT);// Контакт  для сигнала от кнопки
    digitalWrite(ButtonPin , HIGH); //внутренняя подтяжка входа +++++ 
      
      
    pinMode(Relay_Camera1_12V_Pin, OUTPUT);
    pinMode(Relay_Camera2_12V_Pin, OUTPUT);
    pinMode(Relay_Camera3_12V_Pin, OUTPUT);
    pinMode(Relay_DVDCenter_12V_Pin, OUTPUT);
    pinMode(Relay_Camera1_Video_Pin, OUTPUT);
    pinMode(Relay_Camera2_Video_Pin, OUTPUT);
    pinMode(Relay_Camera3_Video_Pin, OUTPUT);
    
    #if DEBUG
    Serial.begin(115200); 
    #endif
      
    }
    
    
    
    volatile unsigned long Time_On=0;
    int RearCamNum=1;
    #define SignalOn 1
    #define SignalOff 0
    
    // главный цикл
    void loop()
    {
    //wdt_reset();
    int Camera_Num=0;
    //boolean Start_Video=false;
    if (digitalRead(RearGearPin)==SignalOff) {RearCamNum=1;} // если задняя передача выключена, то установить значение камеры задней =1
    if ((digitalRead(RearGearPin)==SignalOn) && (digitalRead(ButtonPin)==SignalOff)) //если задняя передача включена и нажата кнопка, то сменить камеру 
    {
    RearCamNum++;
    if (RearCamNum>3) {RearCamNum=1;}
    }
    
    if ((digitalRead(LeftTurnPin)==SignalOn) && (digitalRead(RightTurnPin)==SignalOff)) {Camera_Num=2; Time_On=millis();}
    if ((digitalRead(LeftTurnPin)==SignalOff) && (digitalRead(RightTurnPin)==SignalOn)) { Camera_Num=3; Time_On=millis();}
    if (digitalRead(RearGearPin)==SignalOn) {Camera_Num=RearCamNum; Time_On=millis();}
    
    if ((digitalRead(LeftTurnPin)==SignalOn) && (digitalRead(RightTurnPin)==SignalOn) && (digitalRead(RearGearPin)==SignalOn)) {Cameras_OFF();}
    //if ((digitalRead(LeftTurnPin)==SignalOff) && (digitalRead(RightTurnPin)==SignalOff) && (digitalRead(RearGearPin)==SignalOff)){Cameras_OFF();}
    
    
    
    #if DEBUG
    Serial.println(digitalRead(LeftTurnPin));
    #endif
    
    
    //if ((Start_Video) && (Camera_Num>0)) 
    //{
    if ((Time_On+1000)>millis()) {Camera_ON(Camera_Num);} //если время после события (поворота или заднего хода) не болле 1 сек, то камеру включить
    else {Cameras_OFF();}
    //}
    
    //if ((Time_On+1000)<millis())   {Cameras_OFF();}
    
    delay(300);
    }
    
    
    void Cameras_OFF()
    {
      Camera_OFF(1);
      Camera_OFF(2);
      Camera_OFF(3);  
    }
    
    void Camera_ON(int Camera_Num)
    {
     if (Camera_Num==1)
    {
      Camera_OFF(2);
      Camera_OFF(3);
    digitalWrite(Relay_Camera1_12V_Pin, HIGH);
    digitalWrite(Relay_Camera1_Video_Pin, HIGH);
    digitalWrite(Relay_DVDCenter_12V_Pin, HIGH);
    }
    
    if (Camera_Num==2)
    {
      Camera_OFF(1);
      Camera_OFF(3);
    digitalWrite(Relay_Camera2_12V_Pin, HIGH);
    digitalWrite(Relay_Camera2_Video_Pin, HIGH);
    digitalWrite(Relay_DVDCenter_12V_Pin, HIGH);
    }
    
    if (Camera_Num==3)
    {
      Camera_OFF(1);
      Camera_OFF(2);
    digitalWrite(Relay_Camera3_12V_Pin, HIGH);
    digitalWrite(Relay_Camera3_Video_Pin, HIGH);
    digitalWrite(Relay_DVDCenter_12V_Pin, HIGH);
    } 
    }
    
    void Camera_OFF(int Camera_Num)
    {
     if (Camera_Num==1)
    {
    digitalWrite(Relay_DVDCenter_12V_Pin, LOW);  
    digitalWrite(Relay_Camera1_12V_Pin, LOW);
    digitalWrite(Relay_Camera1_Video_Pin, LOW);
    }
    
    if (Camera_Num==2)
    {
      digitalWrite(Relay_DVDCenter_12V_Pin, LOW); 
    digitalWrite(Relay_Camera2_12V_Pin, LOW);
    digitalWrite(Relay_Camera2_Video_Pin, LOW);
    }
    
    if (Camera_Num==3)
    {
      digitalWrite(Relay_DVDCenter_12V_Pin, LOW); 
    digitalWrite(Relay_Camera3_12V_Pin, LOW);
    digitalWrite(Relay_Camera3_Video_Pin, LOW);
    } 
    }
    Последний раз редактировалось kadushkin; 26.08.2012 в 23:11.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •