• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wyświetlanie czasu przy pomocy pilota IR
#1
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();
   }
   
}
 
Odpowiedź
  


Wiadomości w tym wątku
Wyświetlanie czasu przy pomocy pilota IR - przez mparadowski - 31-10-2022, 00:23

Skocz do:


Przeglądający: 1 gości