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

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

    Цитата Сообщение от Serg_w Посмотреть сообщение
    Еще раз попрошу Chipa подправить скетч и программу для All-In-One...
    Пробуй

    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 = 6;     //вход ИК приемника  
    int back_cam = 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();     
    } 

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

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

    Chip спасибо, только ты не дописал скетч по энкодеру. Нет обработки прерываний по нажатию энкодера. ОГРОМНАЯ ПРОСЬБА сделать скетч для трех проектов: Энкодер, Резисторные кнопки и ИК-пульт с правлеными скетчами. СПАСИБО!

    -----------------------------
    Мой проект:
    http://www.pccar.ru/showthread.php?p=110691#post110691
    Последний раз редактировалось Serg_w; 13.06.2010 в 13:27.

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

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

    Chip, "методом научного тыка" удалил лишнее из скетча и оставил только: ИК-приемник, Резисторные кнопки и Энкодер с нажатием. Вроде получилось.

    #include <IRremote.h>
    byte bytes[4]={0,3}; // 0-3 байт - энкодер, рулевые кнопки, ИК приемник

    int JOYSTIK_PIN = 5 ; // вход для рулевых кнопок

    int RECV_PIN = 11; // вход ИК приемника
    int encoder0PinA = 2 ; // вывод А энкодера
    int encoder0PinB = 3 ; // вывод В энкодера
    int encoder0PinC = 4 ; // вход кнопки энкодера

    unsigned long res_dt, ir_dt, old_ir, time;
    byte temp;
    IRrecv irrecv(RECV_PIN);
    decode_results results;

    //******************************************
    void setup()
    {
    pinMode(encoder0PinA, INPUT);
    digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор энкодера
    pinMode(encoder0PinB, INPUT);
    digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор энкодера
    pinMode(encoder0PinC, INPUT);
    digitalWrite(encoder0PinC, 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()
    {
    if(digitalRead(encoder0PinC)==LOW)
    {
    bytes[0] = 0;
    bytes[1] = 8;
    bytes[2] = 0;
    bytes[3] = 0;
    Serial.write(bytes,4);
    while(digitalRead(encoder0PinC)==LOW){delay(50);}
    bytes[0] = 0;
    bytes[1] = 7;
    bytes[2] = 0;
    bytes[3] = 0;
    }
    IR_resiver();
    joystik();
    }
    //****************ИК приемник********************************
    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,4); // отправить прочитаное значение компьютеру

    if (old_ir == ir_dt){delay(100);} // пауза между короткими нажатиями
    else {delay(50);} // пауза после первого нажатия и удержания (перед повторами)
    old_ir = ir_dt;
    }
    if (results.value == 0xFFFFFFFF )
    {
    delay(5); //пауза между повторами
    Serial.write( bytes,4);
    }
    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,4); // отправить прочитаное значение компьютеру
    delay(250); // пауза между нажатиями
    }
    }
    }
    //*******************Поворот Энкодера (обработка прерывания)****
    void doEncoderA()
    {
    cli();
    if(digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
    bytes[0] = 0;
    bytes[2] = 0;
    bytes[3] = 0;
    Serial.write( bytes,4);
    sei();
    }
    //*******************Поворот Энкодера (обработка прерывания)****
    void doEncoderB()
    {
    cli();
    if(digitalRead(encoder0PinA)==HIGH){bytes[1]=5;}else{bytes[1]=25;}
    bytes[0] = 0;
    bytes[2] = 0;
    bytes[3] = 0;
    Serial.write( bytes,4);
    sei();
    }
    Последний раз редактировалось Serg_w; 13.06.2010 в 20:19.

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

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

    Уважаемый Chip, скетч из предыдущего поста с нажатием энкодера работает в monitor.exe (посылает 0 8 0 0) и ALL_config.exe (2048) см. картинки. Но при запуске ALL_IN_ONE.exe нажатие не работает ... При открытии программы в верхний левый угол значение нажатия энкодера не отображается.
    Что может быть?
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	1.jpg 
Просмотров:	352 
Размер:	16.2 Кб 
ID:	9114   Нажмите на изображение для увеличения. 

Название:	2.jpg 
Просмотров:	339 
Размер:	24.0 Кб 
ID:	9115  
    Последний раз редактировалось Serg_w; 13.06.2010 в 20:32.

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

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

    Для Chipa.
    Исправил два своих предыдущих поста. В посте 43 - скетч с нажатием энкодера.
    Еще при запуске ALL_IN_ONE.exe, через какое то время программа начинает гасить яркость монитора :-( хотя в скетче даже нет управления яркостью...
    Последний раз редактировалось Serg_w; 13.06.2010 в 20:35.

  6. #46
    Новичок
    Регистрация
    02.07.2010
    Возраст
    56
    Сообщений
    2
    Вес репутации
    0

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

    Самообучаемость ? :-)

  7. #47
    Местный
    Регистрация
    23.01.2010
    Возраст
    55
    Сообщений
    162
    Вес репутации
    237

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

    Как дело движется с внедрением в проект подогрева HDD?
    Последний раз редактировалось Павел777; 06.07.2010 в 20:34.

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

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

    Думаю что до наступления морозов все будет ! Даже раньше, сейчас дел не в проворот.

  9. #49
    Бдительно следящий
    Регистрация
    27.01.2010
    Возраст
    57
    Сообщений
    203
    Вес репутации
    250

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

    Можно ли вместо указанного фотоприемника TSOP31238 (аналог TSOP1738), использовать TSOP31236 (аналог TSOP1736)
    Различаются они рабочей частотой.
    38 и 36 KHz
    Или рабочая частота, таки, критична?

    Кроме того, не вижу на схеме подключения кнопки ЗХ.
    Подключать аналогично этой схеме?
    Автоматическое переключение на камеру заднего хода

    И еще. Какой фоторезистор можно использовать в качестве датчика освещенности для авторегулировки яркости?
    Последний раз редактировалось Skiw; 09.07.2010 в 18:38.

  10. #50
    Продвинутый
    Регистрация
    01.04.2009
    Возраст
    42
    Сообщений
    336
    Вес репутации
    282

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

    Цитата Сообщение от Serg_w Посмотреть сообщение
    Уважаемый Chip, скетч из предыдущего поста с нажатием энкодера работает в monitor.exe (посылает 0 8 0 0) и ALL_config.exe (2048) см. картинки. Но при запуске ALL_IN_ONE.exe нажатие не работает ... При открытии программы в верхний левый угол значение нажатия энкодера не отображается.
    Что может быть?
    У меня такая же фигня, попробуй быстро несколько раз нажать на энкодер, и увидеш код и работать также будет

    Потом залил этот скетч и все заработало:

    PHP код:
    #include <IRremote.h> 
    byte bytes[4]={0,3}; // 0-3 байт - энкодер, рулевые кнопки, ИК приемник 

    int JOYSTIK_PIN = 5 ; // вход для рулевых кнопок 

    int RECV_PIN = 11; // вход ИК приемника 
    int encoder0PinA = 2 ; // вывод А энкодера 
    int encoder0PinB = 3 ; // вывод В энкодера 
    int encoder0PinC = 4 ; // вход кнопки энкодера 

    unsigned long res_dt, ir_dt, old_ir, time; 
    byte temp; 
    IRrecv irrecv(RECV_PIN); 
    decode_results results; 

    //****************************************** 
    void setup() 
    { 
    pinMode(encoder0PinA, INPUT); 
    digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор энкодера
    pinMode(encoder0PinB, INPUT); 
    digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор энкодера
    pinMode(encoder0PinC, INPUT); 
    digitalWrite(encoder0PinC, 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() 
    { 
    if(
    digitalRead(encoder0PinC)==LOW) 
    { 
    bytes[0] = 0; 
    bytes[1] = 8; 
    bytes[2] = 0; 
    bytes[3] = 0; 
    Serial.write(bytes,4); 
    while(
    digitalRead(encoder0PinC)==LOW){delay(50);} 
    bytes[0] = 0; 
    bytes[1] = 7; 
    bytes[2] = 0; 
    bytes[3] = 0; 
    } 
    IR_resiver(); 
    joystik(); 
    } 
    //****************ИК приемник******************************** 
    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,4); // отправить прочитаное значение компьютеру 

    if (old_ir == ir_dt){delay(100);} // пауза между короткими нажатиями 
    else {delay(50);} // пауза после первого нажатия и удержания (перед повторами) 
    old_ir = ir_dt; 
    } 
    if (
    results.value == 0xFFFFFFFF ) 
    { 
    delay(5); //пауза между повторами 
    Serial.write( bytes,4); 
    } 
    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,4); // отправить прочитаное значение компьютеру 
    delay(250); // пауза между нажатиями 
    } 
    } 
    } 
    //*******************Поворот Энкодера (обработка прерывания)**** 
    void doEncoderA() 
    { 
    cli(); 
    if(
    digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;} 
    bytes[0] = 0; 
    bytes[2] = 0; 
    bytes[3] = 0; 
    Serial.write( bytes,4); 
    sei(); 
    } 
    //*******************Поворот Энкодера (обработка прерывания)**** 
    void doEncoderB() 
    { 
    cli(); 
    if(
    digitalRead(encoder0PinA)==HIGH){bytes[1]=5;}else{bytes[1]=25;} 
    bytes[0] = 0; 
    bytes[2] = 0; 
    bytes[3] = 0; 
    Serial.write( bytes,4); 
    sei(); 
    } 
    Последний раз редактировалось -=zds=-; 12.08.2010 в 10:00.

Страница 5 из 20 ПерваяПервая 123456789101115 ... ПоследняяПоследняя

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

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

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

Ваши права

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