03-09-2017, 16:23
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ę:
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);
}
}