Страница 1 из 20 123456711 ... ПоследняяПоследняя
Показано с 1 по 10 из 200
  1. #1
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    56
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Объединенный проект для Arduino, All-In-One.

    Объединил в один скетч для arduino: ИК-Пульт, Управление рулевыми кнопками, Энкодер, Авто регулировка яркости, Активатор камеры ЗХ, Задержка включения камеры ЗХ , измерение напряжения, измерение уровня топлива.
    Не нужные функции можно закоментировать в главном цикле loop
    Улучшеный скетч от echo

    Внимание

    Программа работает на прямую с драйвером USB-Моста FT232
    аналоги arduino с другими преобразователями com to usb работать не будут



    PHP код:
    //http://compcar.ru  
    #include <IRremote.h> 
    byte bytes[13];    // 0-3 байт   энкодер, рулевые кнопки, ИК приемник, веб камера 
                      //   4 байт   датчик света
                      //   5 байт   датчик напряжения
                      //   6 байт   датчик топлива
                      //   7-12 зарезервированы                  
     
    int LIGHT_SENS = 0 ;   // Вход датчика освещености
    int VOLT_SENS = 1 ;    // Вход датчика напряжения
    int FUEL_SENS = 2 ;    // Вход датчика уровня топлива
    int JOYSTIK_PIN = 5 ;  // Вход для рулевых Кнопок
    int NC2_SENS = 4 ;    // Вход датчика
    int NC1_SENS = 5 ;    // Вход датчика 
    int NC3_SENS = 6 ;    // Вход датчика
    int NC4_SENS = 7 ;    // Вход датчика
     
     
    int RECV_PIN = 11;     //вход ИК приемника 
    int back_cam = 6; //Вход активации камера заднего вида
    int temperature = 5; //Вход датчика температуры
    int encoder0PinA = 2 ; //Вывод А энкодера
    int encoder0PinB = 3 ; //Вывод В энкодера
    int encoder_botton = 4; //Вход кнопки энкодера
     
    unsigned long res_dt, ir_dt, old_ir, time;
    byte temp, cam_status;
    IRrecv irrecv(RECV_PIN); 
    decode_results results;
     
    //******************************************
    void setup()     
    { 
      
    pinMode(encoder0PinA, INPUT); 
      
    digitalWrite(encoder0PinA, HIGH);     // подключить подтягивающий резистор
      
    pinMode(encoder0PinB, INPUT); 
      
    digitalWrite(encoder0PinB, HIGH);    // подключить подтягивающий резистор
      
    pinMode(encoder_botton, INPUT); 
      
    digitalWrite(encoder_botton, HIGH);    // подключить подтягивающий резистор
       
    pinMode(back_cam, INPUT); 
      
    digitalWrite(back_cam, HIGH);    // подключить подтягивающий резистор
     
      
    attachInterrupt(0, doEncoderA, FALLING);  // настроить прерывание interrupt 0 на pin 2
      
    attachInterrupt(1, doEncoderB, FALLING);  // настроить прерывание interrupt 0 на pin 3  
    Serial.begin(115200); // настроить скорость com порт   
    irrecv.enableIRIn(); // включить приемник 
    }  
    //******************************************
    void loop()  
    {  
    IR_resiver();
    joystik();
    cam();
      if ((
    millis()-time)>1000 && results.value ==0) //запуск процедур по таймеру
       
    {    
         
    time = millis();
          
    autolight();
          
    fuel();
          
    voltmetr();
       } 
    }
    //*******************ИК приемник***********************
    void IR_resiver()
    { 
       if ((
    millis()-time)>1000 ) 
       {   
         
    time = millis();  
         
    results.value=0;
       }
     
      if (
    irrecv.decode(&results))  
      { 
        if (
    results.value > 0 && results.value < 0xFFFFFFFF) 
        { 
          
    ir_dt = results.value; 
          
    bytes[0] = ir_dt & 0xFF;          // преобразовать в 4-байта  
          
    bytes[1] = (ir_dt & 0xFF00) >> 8;  
          
    bytes[2] = (ir_dt & 0xFF0000) >> 16; 
          
    bytes[3] = (ir_dt & 0xFF000000) >> 24; 
          
    Serial.write( bytes,13); // отправить прочитаное значение компьютеру 
     
          
    if (old_ir == ir_dt){delay(300);} // Пауза после нажатия и удержания(перед повторами)
          
    else {delay(500);}
          
    old_ir = ir_dt;
        } 
               if (
    results.value == 0xFFFFFFFF )
                {
                 
    delay(130); //пауза между повторами
                 
    Serial.write( bytes,13);
                } 
           
    irrecv.resume(); 
      } 
    }
    //****************резистивные кнопки**************************
    void joystik()
    {  
      
    res_dt = analogRead(JOYSTIK_PIN); // прочитать данные АЦП 
      
    if( res_dt < 1023 && results.value == 0)
      {
        
    delay(50); // пауза для проверки дребезга
        
    if(res_dt == analogRead(JOYSTIK_PIN))   //если нет дребезга
          
    {
            
    bytes[0] = res_dt & 255;          // преобразовать в 2-байта 
            
    bytes[1] = (res_dt & 768) >> 8; 
            
    bytes[2] = 0;
            
    bytes[3] = 0;
            
    Serial.write( bytes,13); // отправить прочитаное значение компьютеру     
            
    delay(250); // Пауза между нажатиями
          
    }  
      }    
    } 
    //******************Датчик освещения************************
    void autolight()
    {
    byte light;  
    byte sens = analogRead(LIGHT_SENS)/4;  
     
    if ((
    sens > 0) && (sens<30)) {light = 2;}   
    if ((
    sens > 30) && (sens<60)) {light = 60;}   
    if ((
    sens > 60) && (sens<90)) {light = 90;} 
    if ((
    sens > 90) && (sens<120)) {light = 120;} 
    if ((
    sens > 120) && (sens<150)) {light = 150;}   
    if ((
    sens > 150) && (sens<190)) {light = 190;}   
    if (
    sens > 190)  {light = 255;}   

       if(
    light != bytes[4]) // если были изменения
         
    { 
          
    clear_buf();   
          
    bytes[4] = light;
          
    Serial.write( bytes,13);
         }      
    } 
    //*******************Измерение Напряжения***********************
    void voltmetr()
    {
        
    temp = analogRead(VOLT_SENS)/4;
          if(
    temp !=  bytes[5])
          {
            
    clear_buf();
            
    bytes[5]=temp; 
             
    Serial.write( bytes,13);
          }
    }
    //*******************Датчик топлива***********************
    void fuel()
    {
          
    temp = analogRead(FUEL_SENS)/4;
          if(
    temp !=  bytes[6])
          {
            
    clear_buf();
            
    bytes[6]=temp;
             
    Serial.write( bytes,13);
          }
    }
    //*******************Активация веб камеры по сигналу ЗХ***********************
    void cam()
    {
      
    temp=digitalRead(back_cam);
       if(
    temp==HIGH && cam_status==0)
       {
            
    clear_buf();
            
    cam_status=255;
            
    bytes[1]=8;
            
    Serial.write( bytes,13); 
       } 
           if(
    temp==LOW && cam_status==255)
             {
              
    clear_buf();
              
    cam_status=0; 
              
    bytes[1]= 9;
              
    Serial.write( bytes,13);
             }
    }
    //*******************Активация веб камеры по сигналу ЗХ***********************
    void clear_buf()
    {
          
    bytes[0] = 0;
          
    bytes[1] = 0;
          
    bytes[2] = 0; 
          
    bytes[3] = 0;
    }
    //*******************обработка прерывания***********************
    void doEncoderA()
    {
    cli();
      if(
    digitalRead(encoder0PinB)==HIGH){bytes[1]=24;}else{bytes[1]=15;} 
          
    bytes[0] = 0;
          
    bytes[2] = 0; 
          
    bytes[3] = 0;
      
    Serial.write( bytes,13);
    sei(); 
    }  
    //*******************обработка прерывания***********************
    void doEncoderB()
    {
    cli();
        if(
    digitalRead(encoder0PinA)==HIGH){bytes[1]=15;}else{bytes[1]=24;}
          
    bytes[0] = 0;
          
    bytes[2] = 0; 
          
    bytes[3] = 0;
        
    Serial.write( bytes,13);
    sei();    
    } 
    Схема
    Нажмите на изображение для увеличения. 

Название:	схема (1).png 
Просмотров:	5075 
Размер:	23.0 Кб 
ID:	11285
    Вложения Вложения
    Последний раз редактировалось Chip; 20.03.2017 в 00:51.

  2. #2
    Модератор Аватар для vladsmir
    Регистрация
    03.10.2008
    Возраст
    53
    Сообщений
    1,041
    Вес репутации
    472

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь.

    Мне очень интересно, я тока вчера с кардуиной познакомился, но уже загорелся)). Желательно, чтобы скетч состоял из модулей, которые по желанию можно было убрать, чтобы освободить порты.
    Например энкодер и рулевые кнопки одновременно в одном проекте мало кто будет использовать.
    Кстати не нашел по форуму кода для задержек камеры ЗХ. Если выкладывал - ткни, плиз.
    Автозапчасти из Кореи. http://parts-kor.ru
    Мой проект Завершен http://compcar.ru/forum/showthread.php?t=2973

  3. #3
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    56
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь.

    Я постараюсь сделать программу на ПК универсальной по максимуму, а скетчи на кардуино всегда подправить можно.
    Задержку камеры ЗХ сделаю.

  4. #4
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    43
    Сообщений
    829
    Вес репутации
    420

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь.

    Это отличная идея. Удалить то что не требуется всегда легче чем вставить. Я уже все прошивки какие буду использовать по отдельности проверил а вот слепить их воедино никак не получается. Осталось только одну прошивку доделать для управления портами Arduino с кнопок руля по I-Bus шине.
    хороший модем должен качать пиво!
    Мой проект

  5. #5
    Местный
    Регистрация
    10.07.2009
    Возраст
    52
    Сообщений
    152
    Вес репутации
    258

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь.

    Chip, еще измерение температуры и вольтметр пожалуйста...

  6. #6
    Продвинутый
    Регистрация
    08.09.2009
    Возраст
    44
    Сообщений
    236
    Вес репутации
    258

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь.

    Может энкодер который с нажатием? лишняя кнопочка добавится.

  7. #7
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    56
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь.

    Будет вращение, нажатие, нажатие + вращение

  8. #8
    торпедопек Аватар для Urvin
    Регистрация
    15.10.2009
    Возраст
    39
    Сообщений
    43
    Вес репутации
    217

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь для Carduino.

    Предлагаю использовать конструкции #ifdef..#endif - чтобы весь функционал определять в одном месте программы

  9. #9
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    56
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Начинаю по тихоньку обьеденять в один скетчь для Carduino.

    Можно попробовать и #ifdef..#endif использовать.
    Последний раз редактировалось Chip; 06.12.2009 в 03:39.

  10. #10
    Новичок
    Регистрация
    06.12.2009
    Возраст
    46
    Сообщений
    5
    Вес репутации
    209

    По умолчанию Re: Объединенный проект для Carduino (Arduino) All-In-One.

    У меня такое предложения.
    Наверняка у многих уже есть неинтеллектуальные блоки питания... а тут такие возможности. Вот например я планирую управление питанием с использованием carduino, предлагаю добавить код для этого. Гибкое изменение режимов работы под себя - это однозначный плюс.

Страница 1 из 20 123456711 ... ПоследняяПоследняя

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

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

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

Ваши права

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