Wyświetlanie czasu przy pomocy pilota IR - mparadowski - 31-10-2022
Witam,
od kilku dni próbuję zrozumieć dlaczego nie wyświetlany tekst (godzina, temperatura i inne) nie odświeża się tak samo jak przy zwykłym lcd print.
Chodzi mi o to, że chcę używać pilota do zmiany wyświetlanych treści. I owszem zawartość się zmienia, ale np. odmierzany czas ma "zamrożone" sekundy. Czy można to jakoś poprawić? Podobnie ma się rzecz z wyświetlaną temperaturą.
Kod: #include <SoftwareSerial.h>
#include <IRremote.h>
#include <DS3231.h>
#include <Adafruit_BMP280.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
Adafruit_BMP280 bmp280;
DS3231 rtc(SDA, SCL);
Time t;
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht11(8,DHT11);
const byte IR_RECEIVE_PIN = 10;
const int hot = 25.00;
char cieplo[14];
char cisnienie[15];
char wysokosc[14];
//remote buttons
#define on_off 12
#define b_up 18
#define b_down 19
#define b_next 33
#define b_prev 32
#define b__up 30
#define b__down 31
#define b_start 13
void setup() {
Serial.begin(9600);
//lcd.begin();
lcd.init();
//rtc begin
rtc.begin();
//rtc settings
//rtc.setDOW(7);
//rtc.setTime(19,36,0);
//rtc.setDate(23,10,2022);
//start odbiornika IR
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
//check bmp280
if (!bmp280.begin(0x76)) //w nawiasie podajemy nasz adres I2C tutaj wpisałem 0x76
{ // sprawdzamy czy czujnik odpowiada jesli nie wyświetlamy komunikat o błędzie
Serial.println("Nie znaleziono czujnika - sprawdź połączenie!");
while (1);
}
}
void loop() {
//rtc
Serial.print(rtc.getTimeStr(2));
Serial.print(" - ");
Serial.println(rtc.getDateStr());
Serial.println(rtc.getDOWStr(1));
delay(1000);
//dht11
float hum = dht11.readHumidity();
float temperature_ = dht11.readTemperature();
Serial.println("Temperatura:");
Serial.println(temperature_);
Serial.println("Wilgotnosc:");
Serial.println(hum);
//bmp280
float temperature = bmp280.readTemperature(); // get temperature
float pressure = bmp280.readPressure(); // get pressure
float altitude_ = bmp280.readAltitude(1013.25);
sprintf(cieplo, "%d.%02u%cC ", (int)temperature, (int)(temperature * 100)%100, 223);
sprintf(cisnienie, "%u.%02u hPa ", (int)(pressure/100), (int)((uint32_t)pressure % 100));
//czy cieplo?
if(temperature >= hot){
pinMode(7,OUTPUT);
digitalWrite(7,HIGH);
}
else {
pinMode(7,OUTPUT);
digitalWrite(7,LOW);
}
//IR
if (IrReceiver.decode())
{
Serial.println(IrReceiver.decodedIRData.command);
switch(IrReceiver.decodedIRData.command){
case 12:
if(digitalRead(6) == LOW){
pinMode(6,OUTPUT);
digitalWrite(6,HIGH);
lcd.backlight();
}
else {
digitalWrite(6,LOW);
lcd.noBacklight();
lcd.clear();
}
break;
case 13:
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(rtc.getTimeStr(FORMAT_SHORT));
lcd.setCursor(6,0);
lcd.print(" ");
lcd.setCursor(8,0);
lcd.print(rtc.getDateStr(FORMAT_SHORT));
lcd.setCursor(0, 1);
lcd.print(rtc.getDOWStr());
lcd.setCursor(8,1);
lcd.print(cieplo);
break;
case 18:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(altitude_);
lcd.setCursor(0, 1);
lcd.print(hum);
break;
case 19:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(cisnienie);
lcd.setCursor(0, 1);
lcd.print(rtc.getDOWStr());
break;
}
IrReceiver.resume();
}
}
RE: Wyświetlanie czasu przy pomocy pilota IR - kaczakat - 31-10-2022
Nie wiem jakiej biblioteki używasz, jeśli od Podkalicki, to zmień, ma dużo błędów, zgłaszanych latami, bez odzewu.
lcd.print(rtc.getTimeStr(FORMAT_SHORT)); - to co jest wyświetlane na LCD zależy od biblioteki. Jeśli na Serial wydruk działa OK, to użyj tamtej metody. Zresztą inne biblioteki też mogą mieć błędy, lepiej drukować na serial jak nie jesteś pewien czy to zła obsługa LCD czy pobrane dane do wyświetlenia są nieprawidłowe.
|