31-10-2022, 00:23
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ą.
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();
}
}