• 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
Problem z RTC PCF8563
#1
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. Confused 

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
 
}
 
Odpowiedź
#2
A ja bym się bardziej spodziewał konfliktu I2C z OneWire podłączonym do A5, które jednocześnie jest pinem SCL w UNO. No ale oczywiście nie wiadomo jakiej używasz płytki, ani co jak masz podłączone bo nie pokazujesz schematu, więc tak sobie mogę powróżyć z kuli tylko.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości