• 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ź
#2
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości