помогите разобраться

Тема в разделе "Флудилка", создана пользователем Arduinos, 12 апр 2019.

  1. Arduinos

    Arduinos Нуб

    есть у меня скетч, точнее меню с дисплеем
    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3F,16,2);
    #define interval 300
    const int buttonConfigs = 3;
    const int buttonSelect = 2;
    int rows=1;
    int val1=0;
    int val2=0;
    int led1= 4;
    int led2= 5;
    int led3= 6;
    int led4= 7;
    int st1= 0;
    int st2= 0;
    int st3= 0;
    int st4= 0;
    void setup() {
    pinMode(buttonSelect,INPUT);
    pinMode(buttonConfigs,INPUT);
    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    pinMode(led4,OUTPUT);
    Serial.begin(9600);
    }

    void loop() {
      static unsigned long prevM = 0;
      static unsigned long prevM2 = 0;
      static unsigned long prevM3 = 0;
      static unsigned long prevM4 = 0;
      static unsigned long prevM5 = 0;
      val1= digitalRead(buttonSelect);
      val2= digitalRead(buttonConfigs);
       if(val1== HIGH&&millis()- prevM > interval ){
           prevM = millis();
           rows++ ;
           Serial.println(rows);
           lcd.clear();
           }
           if(rows> 4){
            rows=1;
           }
         
           if(rows==1){
            lcd.setCursor(0,1);
            lcd.print(" ");
            lcd.setCursor(0,0);
            lcd.print(">");
            lcd.setCursor(1,0);
            lcd.print("ds18b20");
            lcd.setCursor(1,1);
            lcd.print("DHT11");
            if(millis()- prevM2 > interval ){
             prevM2 = millis();
              if(val2==HIGH){
                st1= !st1;
              }
              if(st1==1){
                digitalWrite(led1,1) ;
              }else{
                digitalWrite(led1,0);
              }
            }
           }
           if(rows==2){
            lcd.setCursor(0,0);
            lcd.print(" ");
            lcd.setCursor(0,1);
            lcd.print(">");
            lcd.setCursor(1,0);
            lcd.print("ds18b20");
            lcd.setCursor(1,1);
            lcd.print("DHT11");
             if(millis()- prevM3 > interval ){
             prevM3 = millis();
              if(val2==HIGH){
                st2= !st2;
              }
              if(st2==1){
                digitalWrite(led2,1) ;
              }else{
                digitalWrite(led2,0);
              }
            }
           }
            if(rows==3){
            lcd.setCursor(0,1);
            lcd.print(" ");
            lcd.setCursor(0,0);
            lcd.print(">");
            lcd.setCursor(1,0);
            lcd.print("photosensor");
            lcd.setCursor(1,1);
            lcd.print("led");
             if(millis()- prevM4 > interval ){
             prevM4 = millis();
              if(val2==HIGH){
                st3= !st3;
              }
              if(st3==1){
                digitalWrite(led3,1) ;
              }else{
                digitalWrite(led3,0);
              }
            }
           }
         
           if(rows==4){
            lcd.setCursor(0,0);
            lcd.print(" ");
            lcd.setCursor(0,1);
            lcd.print(">");
            lcd.setCursor(1,0);
            lcd.print("photosensor");
            lcd.setCursor(1,1);
            lcd.print("led");
             if(millis()- prevM5 > interval ){
             prevM5 = millis();
              if(val2==HIGH){
                st4= !st4;
              }
              if(st4==1){
                digitalWrite(led4,1) ;
              }else{
                digitalWrite(led4,0);
              }
            }
           }

    }
     
    И с ним возникла проблема, дисплей не меняет изображение. Ясно, что ошибка в программе, помогите найти её пожалуйста.
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Не вижу в setup:
    Код (C++):
    lcd.begin(WIDTH, HEIGHT);
     
  3. Arduinos

    Arduinos Нуб

    зачем???
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    Ну во всех примерах это есть.
     
  5. parovoZZ

    parovoZZ Гуру

    Ответ вообще огонь!!!!
    Популярнее разве что
     
  6. Arduinos

    Arduinos Нуб

    Поставь это в setup и в loop что либо выведи в экран, будет ошибка т.к. надо ставить до setup
     
  7. Arduinos

    Arduinos Нуб

    а Tomasina сказал, что надо в setup, что является ошибкой
    а в начальном скетче всё есть
     
  8. ZAZ-965

    ZAZ-965 Гуру

  9. Airbus

    Airbus Радиохулиган Модератор

    Где инициализация дисплея в сетупе?
     
  10. Arduinos

    Arduinos Нуб

    Спасибо, очень помогли
     
  11. Arduinos

    Arduinos Нуб

    спасибо
     
  12. Airbus

    Airbus Радиохулиган Модератор

    Надо так
    Код (C++):
    void setup() {
    pinMode(buttonSelect,INPUT);
    pinMode(buttonConfigs,INPUT);
    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    pinMode(led4,OUTPUT);
    lcd.init();
    lcd.backlight();
    Serial.begin(9600);
    }
     
  13. ZAZ-965

    ZAZ-965 Гуру

    Airbus нравится это.
  14. Airbus

    Airbus Радиохулиган Модератор

    Та ради бога.Что в Лоб что по Лбу всё едино.И так работает и так.