20-12-2021, 19:14
Witam, mam problem z modułem RTC PCF8563. Moduł sam w sobie działa, pokazuje wartości w monitorze portu szeregowego. Natomiast gdy chcę wyświetlać dane na wyświetlaczu LCD1602, wyświetlacz pokazuje dziwne znaki.
Po wykomentowaniu wiersza RTC_PCF8563 RTC wyświetlacz działa prawidłowo.
Poniżej mój kod.
Po wykomentowaniu wiersza RTC_PCF8563 RTC wyświetlacz działa prawidłowo.
Poniżej mój kod.
Kod:
#include <Rtc_Pcf8563.h>
#include <RTCDS1307.h>
#include <Sim800L.h>
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
//SoftwareSerial mySerial(1,0);
OneWire oneWire(A5); //Podłączenie do A5
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int pomiarLX=0;
int tab_tel[]={0,0,0,0,0,0,0,0,0};
double tempwody=0;
bool flag1=false;
bool flag2=false;
void setup() {
// put your setup code here, to run once:
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(10,INPUT_PULLUP);
pinMode(9,INPUT_PULLUP);
pinMode(8,INPUT_PULLUP);
pinMode(A1,OUTPUT);
/// Rtc_Pcf8563 rtc;
Serial.begin(115200);
// rtc.initClock();
// rtc.setDate(13, 4, 12, 0, 21);
// rtc.setTime(19, 26, 00);
sensors.begin(); //Inicjalizacja czujnikow
lcd.begin(16, 2); //Deklaracja typu
}
void loop() {
// Serial.println(rtc.formatTime());
// Serial.println(rtc.formatDate());
delay(1000);
// put your main code here, to run repeatedly:
tempwody = sensors.getTempCByIndex(0);
lcd.clear();
lcd.setCursor(0, 0); //Ustawienie kursora
lcd.print("T wody: "); //Wyświetlenie tekstu
lcd.setCursor(7, 0);
lcd.print(tempwody);
lcd.setCursor(0, 1); //Ustawienie kursora
lcd.print("zimno"); //Wyświetlenie tekstu
pomiarLX = analogRead(A0);//pomiar nateżenia światła
//Serial.println(pomiarLX);//Wysyłamy ją do terminala
delay(200);//Czekamy, aby wygodniej odczytywać wyniki
if(digitalRead(10)==LOW)//wchodzimy w menu
{
digitalWrite(A1,HIGH);
delay(2000);
digitalWrite(A1,LOW);
flag1=false;
while(flag1==false)//gdy flaga sie zmieni na true wychodzimy z menu
{
lcd.clear();//drukowanie menu
lcd.setCursor(0, 0); //Ustawienie kursora
lcd.print("zmien nr tel"); //Wyświetlenie tekstu
lcd.setCursor(0, 1); //Ustawienie kursora
lcd.print("zmien godzine"); //Wyświetlenie tekstu
delay(1000);
if(digitalRead(9)==LOW)//zmiana nr telefonu
{
digitalWrite(A1,HIGH);
delay(2000);
digitalWrite(A1,LOW);
flag2=false;
int i=0;
while(flag2==false)//gdy flaga sie zmieni wychodzimy z opcji zmiany numeru
{
lcd.clear();
lcd.setCursor(0, 0); //Ustawienie kursora
lcd.print("numer telefonu"); //Wyświetlenie tekstu
for(int i=0;i<9;i++)//drukowanie tablicy z numerem telefonu
{
lcd.setCursor(i, 1); //Ustawienie kursora
lcd.print(tab_tel[i]);
}
if(digitalRead(9)==LOW)//zmiana pojedynczej liczby numeru w gore
{
digitalWrite(A1,HIGH);
delay(2000);
digitalWrite(A1,LOW);
if(tab_tel[i]==9)
{
tab_tel[i]=0;
}
else
{
tab_tel[i]++;
}
}
if(digitalRead(8)==LOW)//zmiana pojedyczej liczby numeru w dół
{
digitalWrite(A1,HIGH);
delay(2000);
digitalWrite(A1,LOW);
if(tab_tel[i]==0)
{
tab_tel[i]=9;
}
else
{
tab_tel[i]--;
}
}
if(digitalRead(10)==LOW)//zatwierdzenie wybranej liczby i przejscie do kolejnej
{
digitalWrite(A1,HIGH);
delay(2000);
digitalWrite(A1,LOW);
i++;
}
if(i==9)//jesli wszystkie liczby zatwierdzone flag2 true
{
flag2=true;
flag1=true;//flag1 true wychodzimy z menu
}
lcd.clear();
lcd.setCursor(0, 0); //Ustawienie kursora
lcd.print("numer telefonu"); //Wyświetlenie tekstu
for(int i=0;i<9;i++)//drukowanie tablicy z numerem telefonu
{
lcd.setCursor(i, 1); //Ustawienie kursora
lcd.print(tab_tel[i]);
}
delay(2000);
}
}
}
}
if(pomiarLX > 100)//jesli wartosc wieksza wylacz LED
{
digitalWrite(6, LOW);
}
else //zalacz LED jesli wartosc mniejsza
{
digitalWrite(6, HIGH);
}
sensors.requestTemperatures(); //Pobranie temperatury czujnika
if(sensors.getTempCByIndex(0)<24)
{
digitalWrite(7, HIGH);
}
else if(sensors.getTempCByIndex(0)>26)
{
digitalWrite(7, LOW);
}
// Serial.print("Aktualna temperatura: ");
// Serial.println(sensors.getTempCByIndex(0)); //Wyswietlenie informacji
delay(500);
///modul wysylania sms
///godzina
}