• 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
Zegar z LCD 1602 z rtc DS3231 i HC-SR04
#1
Witam,

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 proste kody dostępne w necie i jak koduje sam zegar to jest ok. (czas i dzień tygodnia w pierwszym wierszu a data w drugim). Wyświetla wszystko zgodnie z oczekiwaniami. Jak koduję samo włączanie podświetlenie to też jest ok. 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 w pierwszym wierszu z przewijaniem lub tylko dzień i czas - jedyna opcja jaką znalazłem tak aby nie przewijało danych.

Może ktoś mógłby spojrzeć w kod podsunąć sugestię jak to poprawić.

Poniżej ten kod, który wykorzystuję:

Kod:
#define trigPin 12
#define echoPin 11
#include <DS3231.h>
#include <LiquidCrystal.h>

DS3231  rtc(SDA, SCL);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
 
void setup() {

  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
  rtc.begin();
  lcd.begin(16,2);
}
void loop() {  
 
  lcd.setCursor(0,0);
  lcd.print(rtc.getTimeStr());
  lcd.print(" ");
  lcd.print(rtc.getDOWStr()); 

 // lcd.setCursor(0,1);
 // lcd.print("Data: ");
//   lcd.print(rtc.getDateStr());
//   lcd.print(" ");
 
  zakres(15, 50); //Włącz alarm, jeśli w odległości od 15 do 50 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); 
  } else {
      digitalWrite(8, HIGH); 
  }
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości