millis(); и LCD 1602 I2c.

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

Метки:
  1. port-Maksim

    port-Maksim Нерд

    Вообщем я создал вопрос где я говорил что инфа не обновлялась я нажимаю на кнопку появляется температура и всё и не в низ ни в верх не изменяется,
    так как места на дисплее мало под все данные я решил её изменят командой millis();
    Почему не delay(2000); потому что она останавливает работу всего ардуино и вот эти 2 секунд ардуино тупо ничего не делает, мне бы подошло, но у меня много датчиков(будет) и мне нужна постоянная подача данных !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    без тормозов. (дальше идёт моя история читайте ниже) !!!!!!!!!!!! ПИШИТЕ ЕСЛИ НАДО ВИДЕО !!!!!!
    Код (C++):
    unsigned long timing;                                           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    unsigned long timing1;
    unsigned long timing2;
    unsigned long timing3;
    unsigned long timing4;
    unsigned long timing5;
    #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
      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(3000);
      lcd.clear();  
    }

    void loop(){  
       butt1.tick();
       lcd.createChar(1, simvol);
       dht.read();

     
      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("%");

     
      lcd.backlight();
      lcd.setCursor(7,1); тип температура
      lcd.print("36.6C");

      {
    вот я хочу изменять эти данные давления метры время и год число месяц что                                                  бы они каждые  2 секунды изменялись крч я писал 2 дня меня переделывал и                                               не  чего  почти не добился вообщем оно не правильно как то работает например если не вставить этот код
    if (millis() - timing5 > 5000){
      timing5 = millis();
      lcd.clear();
    то остаются старые данные вотак примерно вот типа это написано на экране:  765 данные начинают меняться  и получается так 72М
    если его оставить экран иногда моргает весь и получается всякая дич* примерно так  иногда так 765 или так 2M или вот так 72М  иногда а вообще не чего не выводиться я не знаю уже что делать
     
      if (millis() - timing > 3000){
      timing = millis();
      lcd.backlight();
      lcd.setCursor(13,1);
      lcd.print("765"); тип давление
    }
    if (millis() - timing5 > 5000){
      timing5 = millis();
      lcd.clear();
    }
    if (millis() - timing1 > 5000){
      timing1 = millis();
      lcd.backlight();
    lcd.setCursor(14,1);
      lcd.print("2M"); тип высота над уровнем моря
    }
    также и со временем и датой!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    {
      if (millis() - timing2 > 3000){
      timing2 = millis();
      lcd.backlight();
       lcd.setCursor(6,0);
      lcd.print("2019:10:02"); тип год
    }
    if (millis() - timing4 > 5000){
      timing4 = millis();
      lcd.clear();
    }
    if (millis() - timing3 > 5000){
      timing3 = millis();
      lcd.backlight();
      lcd.setCursor(7,0);
      lcd.print("01:57:05"); тип время
    }
      }
    }
    }