В чем ошибка?)

Тема в разделе "Arduino & Shields", создана пользователем dndv279, 24 янв 2016.

  1. dndv279

    dndv279 Нерд

    Компилируется без ошибок, но во время работы не удается выйти из цикла(то есть при первом нажатии кнопки светодиод моргает, а когда жмешь второй раз не чего не происходит).

    Код (C++):

    const int b1 = 3;


    void setup() {
        pinMode(b1, INPUT_PULLUP);
        pinMode(13, OUTPUT);
     
    }

    void loop(){
      digitalWrite(13, LOW );
      boolean bn = digitalRead(b1);
      if (!bn){
        delay(10);
        bn = digitalRead(b1);
        if(!bn){
          for(int i = 0; ; ++i){
            digitalWrite(13, HIGH);
            delay(500);
            digitalWrite(13, LOW);
            delay(500);
            boolean bn2 = digitalRead(b1);
            if(bn2 == LOW){
             break;
            }      
          }      
          }    
        }
      }
     
     
  2. shpock

    shpock Гик

    переменная bn2 - у вас boolean. Разве она может быть LOW ?
     
  3. dndv279

    dndv279 Нерд

    Я уже много что перебрал. Вот без bn2

    Код (C++):

    const int b1 = 3;


    void setup() {
        pinMode(b1, INPUT_PULLUP);
        pinMode(13, OUTPUT);
     
    }

    void loop(){
      boolean bn = digitalRead(b1);
      if (!bn){
        delay(10);
        bn = digitalRead(b1);
        if(!bn){
          for(int i = 0; ; ++i){
            digitalWrite(13, HIGH);
            delay(500);
            digitalWrite(13, LOW);
            delay(500);      
            if(!digitalRead(b1)){
             break;
            }      
          }
               
          }
           
        }
        digitalWrite(13, LOW );
     
      }
     
     
     
  4. sanik

    sanik Гик

    Мне кажется в в цикле for чего то не хватает? for (int i = 0; i<3 ; ++i)
     
  5. sanik

    sanik Гик

    Через некоторое время i станет огромным числом
     
  6. dndv279

    dndv279 Нерд

    Я нашел ошибку))))))))
    Не хватало задержки после второго нажатия, и получалась так будто я два раза нажимал на кнопку)
    Код (C++):
    const int b1 = 3;


    void setup() {
        pinMode(b1, INPUT_PULLUP);
        pinMode(13, OUTPUT);
     
    }

    void loop(){
      boolean bn = digitalRead(b1);
      if (!bn){
        delay(10);
        bn = digitalRead(b1);
        if(!bn){
          for(int i = 0; ; ++i){
            digitalWrite(13, HIGH);
            delay(250);
            //digitalWrite(13, LOW);
            //delay(500);      
            if(!digitalRead(b1)){
              delay(10);
              if(!digitalRead(b1)){
             break;
            }      
          }
          }    
          }
           
        }
        delay(250); //вот её и не хватало!!!)
        digitalWrite(13, LOW );
     
      }
     
     
  7. shpock

    shpock Гик

    )) только теперь поменялась вся логика вашей программы, в цыкле то у вас лампочка не тухнет.
     
  8. dndv279

    dndv279 Нерд

    Ну это мне вообще не для светодиода надо был)
    Просто в этом бы коде ни кто не захотел бы капаться)

    Код (C++):
    #include <RTC.h>
    #include <LiquidCrystal.h>
    #include "DHT.h"

    #define DHTPIN 2
    const int b1 = 3;
    boolean b1WU = false;
    #define DHTTYPE DHT22

    RTC    time;
    LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
    DHT dht(DHTPIN, DHTTYPE);


    void setup() {
        pinMode(b1, INPUT_PULLUP);
       
        delay(300);
        lcd.begin(16, 2);

        time.begin(RTC_DS1307);
        time.settime(30,46,23,24,01,16,0);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник

        dht.begin();
    }
    void loop(){
    float h = dht.readHumidity();
    float t = dht.readTemperature();
     
    boolean bn = digitalRead(b1);
      if (!bn){
        delay(10);
        bn = digitalRead(b1);
        if(!bn){
          for(int i = 0; ; ++i){
           
            lcd.clear();
            lcd.print("Temp:");
            lcd.print(t);
            lcd.print("\x99");
            lcd.print("C");
            lcd.setCursor(0, 1);
            lcd.print("Humid:");
            lcd.print(h);
            lcd.print("%");
            delay(200);
                       
            if(!digitalRead(b1)){
              delay(10);
              if(!digitalRead(b1)){
             break;
            }      
           }
          }    
         }        
        }
       
        lcd.clear();
        lcd.print(time.gettime("d-m-Y, D"));
        lcd.setCursor(0, 1);
        lcd.print(time.gettime("H:i:s"));
        delay(500);
        lcd.setCursor(0, 0);
       
    }
     
    shpock нравится это.
  9. shpock

    shpock Гик

    вот тут уважуха, а то обычно либо просто "помогите", либо код на восем страниц.