Не показывает значения датчиков на LCD дисплее

Тема в разделе "Arduino & Shields", создана пользователем vanya_drugov, 2 дек 2019.

  1. vanya_drugov

    vanya_drugov Нуб

    Это код. Делаю метеостанцию. Почему-то не выводятся значения с датчиков на LCD дисплей. Помогите, пожалуйста!

    Код (C++):
    #include <SFE_BMP180.h>
    #include <TimeLib.h>
    #include <Wire.h>              
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27,20,2);
    #include <DHT.h>
    DHT dht(2, DHT11);

    SFE_BMP180 pressure;




    byte BUTTON=4;



    byte gradus[8] = {
    0b01100,0b10010,0b10010,0b01100,0b00000,0b00000,0b00000,0b00000
    };

    byte P[8] = {
    0b11111,0b10001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000
    };

    byte Y[8] = {
    0b10001,0b10001,0b10001,0b01111,0b00001,0b00001,0b01110,0b00000
    };

    byte L[8] = {
    0b00111,0b01001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000
    };

    // создаем русскую букву "Ж"
    byte ZH[8] = {
    0b10101,0b10101,0b10101,0b01110,0b10101,0b10101,0b10101,0b00000
    };

    byte znak[8] = {
    0b10000,0b10000,0b10000,0b11110,0b10001,0b10001,0b11110,0b00000
    };

    byte YA[8] = {
      0b01111,
      0b10001,
      0b10001,
      0b01111,
      0b00101,
      0b01001,
      0b10001,
      0b00000
    };

    byte D[8] = {
      0b00100,
      0b01010,
      0b01010,
      0b01010,
      0b11111,
      0b10001,
      0b10001,
      0b00000
    };

    byte I[8] = {
      0b10001,
      0b10011,
      0b10101,
      0b10101,
      0b10101,
      0b11001,
      0b10001,
      0b00000
    };

    void setup() {
      pinMode (BUTTON, INPUT);

      Serial.begin(9600);
      lcd.init();      
      lcd.backlight();  


      lcd.createChar(1, gradus);
      lcd.createChar(2, P);
      lcd.createChar(3, Y);
      lcd.createChar(4, L);
      lcd.createChar(5, ZH);
      lcd.createChar(6, znak);
      lcd.createChar(7, YA);
      lcd.createChar(8, D);
      lcd.createChar(9, I);

      setTime (15, 54, 0, 7, 21, 2018);
    }


    void loop() {
      // если нужны точные значение, то используйте float, вместо byte
      byte h = dht.readHumidity();    // считываем значение температуры
      byte t = dht.readTemperature(); // считываем значение влажности
      char status;
      double P,T;

      status = pressure.startPressure(3);
      if (status != 0)
          {
            // ждем окончания замера:
            delay(status);
            status = pressure.getPressure(P,T);
            if (status != 0)
            {
           
              Serial.print("абсолютное давление: ");
              Serial.print(P/133.3);
              Serial.println(" милиметров ртутного столба");
           
            }
            else Serial.println("ошибка получение давления\n");
          }
      else Serial.println("ошибка запуска получения давления\n");
     
      delay(1000);



      lcd.setCursor(0,0);
      lcd.print("TEM");  
      lcd.print(char(2));
      lcd.print(":");
      lcd.print(t);  
      lcd.print(char(1));

      lcd.print(" ");
      lcd.print("B");
      lcd.print(char(4));
      lcd.print(":");  
      lcd.print(h);    
      lcd.print("%");  

      lcd.setCursor(0,1);
      lcd.print(char(8));
      lcd.print("AB");
      lcd.print(char(4));
      lcd.print(":");
      lcd.print(P/133.3);
      lcd.print("MM.PT.CT");


      delay(100);

    }
     
    Последнее редактирование: 2 дек 2019
  2. NikitOS

    NikitOS Король шутов Администратор

    Код вставлен как есть?
    А то подсветка уже говорит, что что-то не так
     
  3. NikitOS

    NikitOS Король шутов Администратор

    Не сказал бы, что подобное будет работать как надо:
    Код (Text):
      lcd.setCursor(0,0);
      lcd.print("TEM");
      lcd.print(char(2));
      lcd.print(":");
      lcd.print(t);  
      lcd.print(char(1));


     
    В этом случае позиция курсора дисплея - 0,0. Каждый вызов print будет писать именно с этой позиции, т.е текст на текст.
    Нужно так:
    Код (Text):
      lcd.setCursor(0,0);
      lcd.print("TEM" + char(2) + ": " + t + char(1));
     
    Ну и перед отображением новых данных нужно чистить дисплей с помощью функции lcd.clear();
     
  4. vanya_drugov

    vanya_drugov Нуб

    Но тогда появляется вот такая ошибка:

    exit status 1
    invalid operands of types 'const char*' and 'const char [3]' to binary 'operator+'
     
  5. vanya_drugov

    vanya_drugov Нуб

    Нет, там случайный знак, уже исправил!
     
  6. Asper Daffy

    Asper Daffy Иксперд

    Нет, что Вы. Нормально всё с этим. Ляпы в другом, но я ТС уже в другом месте ответил.
     
  7. NikitOS

    NikitOS Король шутов Администратор

    А что, ныне что-то изменилось?
    У меня раньше поверх писалось...
     
  8. Asper Daffy

    Asper Daffy Иксперд

    Вы что-то путаете. Может у Вас это в цикле было и setCursor каждый раз срабатывал или ещё что.
     
    DetSimen нравится это.
  9. DetSimen

    DetSimen Guest

    Нет
     
    NikitOS нравится это.