Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 17 из 17
  1. #11
    Пользователь Аватар для 496385290
    Регистрация
    07.03.2011
    Возраст
    34
    Сообщений
    79
    Вес репутации
    208

    По умолчанию Re: Решил объеденить

    чувствительность фоторезистора как то программно управляется? или прописано постоянное значение? Можно ли менять предел регулировки яркости?

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

    По умолчанию Re: Решил объеденить

    Можно изменять программно

    PHP код:
    //******************Датчик освещения************************ 
    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); 
         }       
    } 

  3. #13
    Пользователь Аватар для 496385290
    Регистрация
    07.03.2011
    Возраст
    34
    Сообщений
    79
    Вес репутации
    208

    По умолчанию Re: Решил объеденить

    В качестве Ик-приемника можно использовать TSOP2136 - ИК приёмник-демодулятор, 36 кГц, 2.5 - 5.5В, -25..+85°С ???

  4. #14
    Пользователь Аватар для 496385290
    Регистрация
    07.03.2011
    Возраст
    34
    Сообщений
    79
    Вес репутации
    208

    По умолчанию Re: Решил объеденить

    Как загнать прошивку в Carduino Nano Duo ???

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

    По умолчанию Re: Решил объеденить

    Вот эту тему читал?

  6. #16
    Пользователь Аватар для 496385290
    Регистрация
    07.03.2011
    Возраст
    34
    Сообщений
    79
    Вес репутации
    208

    По умолчанию Re: Решил объеденить

    Цитата Сообщение от Chip Посмотреть сообщение
    Вот эту тему читал?
    Спасибо , до этого видел. Я думал что Carduino через какой нибуть программатор прошивать прийдется. А оказывается все намного легче

  7. #17
    Пользователь Аватар для 496385290
    Регистрация
    07.03.2011
    Возраст
    34
    Сообщений
    79
    Вес репутации
    208

    По умолчанию Re: Решил объеденить

    Немного изменил схему, и попытался написать код, а точнее попробовал слепить из тех что нашел в одну. Ошибки есть, если можно проверить и поправить. Прочитал http://www.compcar.ru/forum/showthread.php?t=4296 но еще не все понял как работает
    В программе еще не учтены выходы на реле
    Нажмите на изображение для увеличения. 

Название:	Duo.jpg 
Просмотров:	1243 
Размер:	77.5 Кб 
ID:	11831
    PHP код:
    //http://compcar.ru   
    #include <IRremote.h>  
    byte bytes[13];    // 0-3 байт   энкодер, рулевые кнопки, ИК приемник, веб камера  
                      //   4 байт   датчик света 
                      //   5 байт   датчик напряжения 
                      //   6 байт   датчик топлива 
                      //   7-12 зарезервированы                   
      
    int LIGHT_SENS = 0 ;   // Вход датчика освещености  
    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 encoder0PinA = 2 ; //Вывод А энкодера 
    int encoder0PinB = 3 ; //Вывод В энкодера  
      
    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(ledPin, OUTPUT);
      
    pinMode(5, OUTPUT);   
      
    digitalWrite(5, HIGH); //блокируем АСС на время инициализации датчика 
      
    pinMode(CE, OUTPUT); 
      
    pinMode(CL, OUTPUT); 
      
    pinMode(DA, OUTPUT);

      
    attachInterrupt(0, doEncoderA, FALLING);  // настроить прерывание interrupt 0 на pin 2 
      
    attachInterrupt(1, doEncoderB, FALLING);  // настроить прерывание interrupt 0 на pin 3   
    Serial.begin(115200); // настроить скорость com порт   
    tempSensor.begin(4); //Вешаем Датчик на 4 порт
    irrecv.enableIRIn(); // включить приемник  
    }   
    //****************************************** 
    void loop()   
    {   
    IR_resiver();
    led();
    acc();
    joystik(); 
    fm(); 
      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 led() 
    {    
    sens = analogRead(0); 

    if ((
    sens > 0) && (sens<10)) {light = 10;} 
    if ((
    sens > 10) && (sens<20)) {light = 50;} 
    if ((
    sens > 20) && (sens<30)) {light = 100;} 
    if ((
    sens > 30) && (sens<40)) {light = 150;} 
    if ((
    sens > 40) && (sens<50)) {light = 180;} 
    if ((
    sens > 50) && (sens<60)) {light = 210;} 
    if ((
    sens > 70) && (sens<80)) {light = 230;} 
    if (
    sens > 80) {light = 255;} 

    analogWrite(ledPin, light); 
    Serial.print(sens, DEC); 
    Serial.print(" "); 
     
    delay(300); 
    } 
    //*******************Нагреватель*********************** 
    void acc() 
    {   
       if(
    tempSensor.isValid()==1 | tempSensor.isValid()==2)    
       {   
         
    tempSensor.reset();   
         
    digitalWrite(5, LOW); // если датчик не исправен , то разблокируем АСС  
         
    return;   
       }   
         
      
    float tmpr=tempSensor.getTemperature(); //прочтать температуру от датчика   
      
    if(int(tmpr) < 0) digitalWrite(5, HIGH);//если температура ниже ноля, включить подогрев   
      
    if(int(tmpr) > 0) digitalWrite(5, LOW);//если температура выше ноля, выключить подогрев   
        
     //  Serial.print(int(tmpr)); //округлить до целой и отправить температуру    
     // Serial.println(); //перенос строки   
    } 
    //****************резистивные кнопки************************** 
    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); // Пауза между нажатиями 
          
    }   
      }     
    }  
    //****************FM радио************************** 
    void fm() 
    {    
    int inRF; 
    byte p[2]; 
    int t; 

    ReadSteering(); 

    // Длина команды 8 байт, формат: 
    // rfXXXXX<cr> 
    t = Serial.available(); 
    if (
    t >= 8) 
      { 
        
    p[0] = Serial.read(); 
        
    p[1] = Serial.read(); 
        if ( 
    p[0]==114 and p[1]==102 ) 
        { 
          
    inRF = 1; 
          for (
    int x=3; x>=0; x--) 
            { 
              
    inRF += (int(Serial.read())-48) * pow(10, x); 
            } 
          
    Serial.flush();   
          if (
    inRF >= 875 and inRF <= 1080)  {SetRF(inRF); SendOK();} 
          else {
    SendERR();}    
        } 
        else {
    SendERR();} 
      } 
      else  
      { 
      if (
    t > 0) {Serial.flush(); SendOK();} 
      } 
      
    delay(100); 
    }  

    // Читает рулевые кнопки и пишет в порт код нажатой кнопки 

    void ReadSteering()       
    {    
      
    byte bytes[2];   
      
    unsigned int res_dt1 = analogRead(0); // прочитать данные АЦП   
      
    delay(50);  
      
    unsigned int res_dt2 = analogRead(0); //проверка дребезга   
        
    if (abs(res_dt1-res_dt2)<=20 and res_dt1<1000 ) //если нет дребезга и что-то есть 
          
    {  
            
    bytes[0] = 255; 
            
    bytes[1] = res_dt1 & 255;          // преобразовать в 2-байта   
            
    bytes[2] = (res_dt1 & 768) >> 8;   
            
    Serial.write( bytes,3); // отправить прочитаное значение компьютеру       
          
    }    
    /*Serial.print(res_dt1,DEC); 
    Serial.print("   "); 
    Serial.println(res_dt2,DEC);*/ 
    }  

    void SetRF(int RF) 
    { 
      
    RF += 107; 
      
    // Выставляем CE, говорим что пишем в LM 
      
    digitalWrite(CE, HIGH); 
      
    writeToLM(byte(RF)); 
      
    writeToLM(byte(RF >> 8)); 
      
    writeToLM(135); 
      
    // Снимаем CE, все отправили 
      
    digitalWrite(CE, LOW); 
    } 

    void writeToLM(byte ByteToSend) 
    { 
    int D;  
    int D1; 

      
    delayMicroseconds(LM_DELAY); 
      for (
    int x=0; x<=7; x++) 
        { 
          
    // Выставляем DA 
          
    D = ByteToSend >> 1; 
          
    D1 = D << 1; 
          if (
    ByteToSend==D1)  // Значит был 0 
            
    { 
              
    digitalWrite(DA,LOW); 
            } 
          else 
            { 
              
    digitalWrite(DA,HIGH);          
            }   
          
    // Формируем строб CL   
          
    digitalWrite(CL, HIGH); 
          
    delayMicroseconds(LM_DELAY); 
          
    digitalWrite(CL,LOW); 
          
    delayMicroseconds(LM_DELAY);   
          
    ByteToSend = ByteToSend >> 1;     
        } 
      
    delayMicroseconds(LM_DELAY); 
    } 

    void SendOK() 
    { 
      
    Serial.println("OK"); 
    } 

    void SendERR() 
    { 
      
    Serial.println("ER"); 
    }  
    //******************Датчик освещения************************ 
    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 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();     
    } 
    Последний раз редактировалось 496385290; 08.04.2011 в 01:36.

Страница 2 из 2 ПерваяПервая 12

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

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

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

Ваши права

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