Skocz do zawartości

Zegarem z wykorzystaniem lcd 1602, modułem rtc DS3231 i czujnikiem HC-SR04


jajaceek

Pomocna odpowiedź

Witam,

Nie wiem czy w odpowiednim dziale zadaję pytanie ale siedzę jakiś czas z nad prostym zegarem z wykorzystaniem lcd 1602, modułem rtc DS3231 i czujnikiem HC-SR04. Idea jest taka: zegar zamontowany w kuchni pod szafką kuchenną i jak podchodzę to zaświeca podświetlenie tak, że można odczytać czas, dzień tygodnia i datę. Wykorzystałem kod z pomiaru odległości i włączania buzera (zamiast buzera włącza podświetlenie lcd z pinu 8) i działa to ok, ten kod wykorzystałem z kursu Arduino poziom 1. Jak koduje sam zegar to też jest ok. (czas i dzień tygodnia w pierwszym wierszu a data w drugim). Wyświetla wszystko zgodnie z oczekiwaniami. Natomiast jak próbuję połączyć to wszystko razem to niestety sypie się wyświetlanie danych, podświetlanie (reakcja na ruch) jest ok. Wyświetla tylko z przewijaniem. Nie wyświetla czasu i daty tak jak powinno.

Byłbym wdzięczny za sugestie jak to mogę poprawić.

Poniżej kod:

  

#define trigPin 12 
#define echoPin 11 
#include <LiquidCrystal.h> 
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); 
#include <DS3231.h> 
DS3231  rtc(SDA, SCL); 


void setup() { 
 rtc.begin(); 
 lcd.begin(16, 2); 
 Serial.begin (9600); 
 pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście 
 pinMode(echoPin, INPUT); //a echo, jako wejście 
 pinMode(8, OUTPUT); //Wyjście dla buzzera - podswietlenie lcd 

} 

void loop() {  

 zakres(15, 50); //Włącz alarm, jeśli w odległości od 10 do 25 cm od czujnika jest przeszkoda  
 delay(100); 
} 

int zmierzOdleglosc() { 
 long czas, dystans; 

 digitalWrite(trigPin, LOW); 
 delayMicroseconds(2); 
 digitalWrite(trigPin, HIGH); 
 delayMicroseconds(10); 
 digitalWrite(trigPin, LOW); 

 czas = pulseIn(echoPin, HIGH); 
 dystans = czas / 58; 


 return dystans; 


} 

void zakres(int a, int b) { 
 int jakDaleko = zmierzOdleglosc(); 
 if ((jakDaleko > a) && (jakDaleko < b)) { 
     digitalWrite(8, LOW); //Włączamy buzzer 
 } else { 
     digitalWrite(8, HIGH); //Wyłączamy buzzer, gdy obiekt poza zakresem 
 } 

{ 

 lcd.setCursor(0,0); 
 lcd.print("Czas: "); 
 lcd.print(rtc.getTimeStr()); 

 lcd.setCursor(0,1); 
 lcd.print("Data: "); 
 lcd.print(rtc.getDateStr()); 


//  lcd.clear();  
} 

} 

pozdrawiam i dzięki za pomoc.

Link do komentarza
Share on other sites

Witam 🙂

Spróbuj najpierw zwiększyć czas w pierwszym delayu w funkcji loop, lub w ogóle przemyśl jeszcze raz sam pomiar odległości i czy nie lepiej byłoby gdyby na przykład czujnik wykrywał obiekt raz na 30(?) sekund, a potem włączał podświetlenie na 10 sekund (lub mniej), uniknąłbyś wtedy konfliktu który może powstawać jeśli już raz uruchomisz podświetlenie, a w zakresie działania czujnika nadal będzie znajdował się jakiś obiekt.

Nie jestem pewien czy to o to chodzi ale myślę, że powinieneś bardziej szczegółowo opisać problem

Nie wyświetla czasu i daty tak jak powinno
Czyli jak?
  • Lubię! 1
Link do komentarza
Share on other sites

Witam.

Usuń Serial.begin (9600), bo i tak nie używasz komunikacji szeregowej, a pin 1 pełni u Ciebie funkcję zarówno TX jak i pinu obsługującego wyświetlacz LCD. Nie wiem, czy to nie wywoła konfliktu.

I po co blok wyświetlania czasu i daty masz w nawiasach klamrowych?

Napisz jak powinno wyświetlać, a jak wyświetla komunikaty.

Pozdrawiam.

  • Lubię! 1
Link do komentarza
Share on other sites

Wielkie dzięki za pomoc.

Przeniosłem piny 1 i 2 na 2 i 3 oraz usunąłem Serial.begin i jest wszystko ok. Nie usunąłem bloku czasowego z nawiasów klamrowych. Nie wiem czy to ma znaczenie i czy powinienem je usunąć.

Problem polegał na tym, że czas (oraz data oraz wszystkie dane, które chciałem wyświetlać) były prawie poprawnie wyświetlane za pierwszym razem - tzn pewnie przy pierwszym odświeżeniu (przejściu) pętli, było tylko przesunięcie pozycji o jeden kursor w prawo. Następnie przy kolejnej pętli dane zamiast być wyświetlane na tej samej pozycji i zastępować poprzednie (np. aktualizacja czasu) to były wyświetlane sześć czy siedem kursorów w prawo czyli obok poprzednich danych. Było wrażenie srollowania danych. Nie wiem czy jasno to opisałem ale mam nadzieję, że przekazałem ideę tego jak to się wyświetlało.

Jeszcze raz dzięki.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.