LCD 1602 I2c (обновление информации)

Тема в разделе "Arduino & Shields", создана пользователем port-Maksim, 22 окт 2019.

Метки:
  1. port-Maksim

    port-Maksim Нерд

    Я выводил данные на жк дисплей и у меня возникла проблема что в будущем на нём не останется места от данных других датчиков ,я решил подключить кнопку для управления, всё было нормально, я не замечал того что когда я например нажимаю раз на кнопку и меня стирается всё с экрана и выводиться температура и влажность, но она не обновляется что бы её обновить нужно ещё раз нажать на кнопку.
    что надо дописать? или переделать.

    Код (C++):
    #define PIN 3
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <TroykaDHT.h>
    #include "GyverButton.h"
    GButton butt1(PIN);
    DHT dht(A1, DHT22);
    LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

    // создаем свой символ и присваиваем ему имя "simvol"
    byte simvol[8] = {  
    0b01100,
    0b10010,
    0b10010,
    0b01100,
    0b00000,
    0b00000,
    0b00000,
    0b00000
    };

    void setup()
    {
      lcd.init();                      // initialize the lcd
      lcd.backlight();
      Serial.begin(9600);
      dht.begin();
      lcd.backlight();
      lcd.setCursor(0,1);
      lcd.print("  Smart");
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("  Maksim Grib");
      delay(5000);
      lcd.clear();  
    }

    void loop(){  
       butt1.tick();
       lcd.createChar(1, simvol);
       dht.read();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("22:11:41"); //типа время ещё датчики не приехали

      if (butt1.hasClicks()) {
      byte clicks = butt1.getClicks();
      switch (clicks) {
      case 1:                       вот здесь крч не обновляется инфа
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print(dht.getTemperatureC());
      lcd.backlight();
      lcd.setCursor(5,0);
      lcd.print(char(1));
      lcd.backlight();
      lcd.setCursor(0,1);
      lcd.print(dht.getHumidity());
      lcd.backlight();
      lcd.setCursor(5,1);
      lcd.print("%");
        break;
      case 2:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("36.6C"); //типа температура ещё датчики не приехали
        break;
      case 3:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("765"); //типа давление ещё датчики не приехали
      lcd.backlight();
      lcd.setCursor(0,1);
      lcd.print("2M"); //типа высота на уровнем моря ещё датчики не приехали
        break;
      case 4:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("OFF DISPLEY");
      delay(2000);
      lcd.clear();
      lcd.noDisplay();
        break;
      case 5:
      lcd.display();
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("ON DISPLEY");
      delay(2000);
      lcd.clear();
        break;
     
        }
      }

    }
     
     
  2. DetSimen

    DetSimen Спамовредитель Модератор

    Переделать все.
     
    port-Maksim нравится это.
  3. parovoZZ

    parovoZZ Гуру

    без запятых вообще ничего не понятно. ТС школу посещал?
     
    port-Maksim нравится это.
  4. port-Maksim

    port-Maksim Нерд

    я закончил школу, атестат получил, просто лень было, я и так торопился
     
  5. port-Maksim

    port-Maksim Нерд

    Да мне не надо всё , мне надо именно понять почему не обновляются данные и как исправить
     
  6. b707

    b707 Гуру

    потому что в вашем коде вывод на дисплей происходит только после нажатия кнопки
     
    port-Maksim, Daniil и Aleksander1997 нравится это.
  7. Заведите переменные для влажности и температуры и обновляйте эти переменные на экране. А рассчитывайте значения в loop отдельно
     
    port-Maksim нравится это.
  8. Код (C++):
    void loop(){
      float hum = dht.getHumidity();
      float temp = dht.getTemperatureC();
       butt1.tick();
       lcd.createChar(1, simvol);
       dht.read();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("22:11:41"); //типа время ещё датчики не приехали

      if (butt1.hasClicks()) {
      byte clicks = butt1.getClicks();
      switch (clicks) {
      case 1:                       вот здесь крч не обновляется инфа
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print(temp);
      lcd.backlight();
      lcd.setCursor(5,0);
      lcd.print(char(1));
      lcd.backlight();
      lcd.setCursor(0,1);
      lcd.print(hum);
      lcd.backlight();
      lcd.setCursor(5,1);
      lcd.print("%");
        break;
      case 2:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("36.6C"); //типа температура ещё датчики не приехали
        break;
      case 3:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("765"); //типа давление ещё датчики не приехали
      lcd.backlight();
      lcd.setCursor(0,1);
      lcd.print("2M"); //типа высота на уровнем моря ещё датчики не приехали
        break;
      case 4:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("OFF DISPLEY");
      delay(2000);
      lcd.clear();
      lcd.noDisplay();
        break;
      case 5:
      lcd.display();
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("ON DISPLEY");
      delay(2000);
      lcd.clear();
        break;
     
        }
      }
    }
     
    port-Maksim нравится это.
  9. port-Maksim

    port-Maksim Нерд

    Не помогло
     
  10. Sergku

    Sergku Нерд

    Код, конечно, дичь. Нужно дописать код тормозов если кол-во кликов достигло 5
    Код (C++):


    #define PIN 3
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <TroykaDHT.h>
    #include "GyverButton.h"
    GButton butt1(PIN);
    DHT dht(A1, DHT22);
    LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

    // создаем свой символ и присваиваем ему имя "simvol"
    byte simvol[8] = {
    0b01100,
    0b10010,
    0b10010,
    0b01100,
    0b00000,
    0b00000,
    0b00000,
    0b00000
    };

    byte clicks=1;

    void setup()
    {
      lcd.init();                      // initialize the lcd
      lcd.backlight();
      Serial.begin(9600);
      dht.begin();
      lcd.backlight();
      lcd.setCursor(0,1);
      lcd.print("  Smart");
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("  Maksim Grib");
      delay(5000);
      lcd.clear();
    }

    void loop(){
       butt1.tick();
       lcd.createChar(1, simvol);
       dht.read();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("22:11:41"); //типа время ещё датчики не приехали

      if (butt1.hasClicks())
          clicks = butt1.getClicks();
      switch (clicks) {
      case 1:                       вот здесь крч не обновляется инфа
         lcd.clear();
         lcd.backlight();
         lcd.setCursor(0,0);
         lcd.print(dht.getTemperatureC());
         lcd.backlight();
         lcd.setCursor(5,0);
         lcd.print(char(1));
         lcd.backlight();
         lcd.setCursor(0,1);
         lcd.print(dht.getHumidity());
         lcd.backlight();
         lcd.setCursor(5,1);
         lcd.print("%");
        break;
      case 2:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("36.6C"); //типа температура ещё датчики не приехали
        break;
      case 3:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(0,0);
      lcd.print("765"); //типа давление ещё датчики не приехали
      lcd.backlight();
      lcd.setCursor(0,1);
      lcd.print("2M"); //типа высота на уровнем моря ещё датчики не приехали
        break;
      case 4:
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("OFF DISPLEY");
      delay(2000);
      lcd.clear();
      lcd.noDisplay();
        break;
      case 5:
      lcd.display();
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(3,0);
      lcd.print("ON DISPLEY");
      delay(2000);
      lcd.clear();
        break;
        }

    }
     
    port-Maksim нравится это.
  11. port-Maksim

    port-Maksim Нерд

    Он в доработки, и вообще, он здесь не для того что бы его критиковали, а что бы помогли, если что-то не так подсказали, что переделать.
     
  12. Sergku

    Sergku Нерд

    выкладывая свое творение нужно быть готовым к критике и понимать, почему она высказана.
     
    port-Maksim нравится это.