Witam, mam raczej banalny problem ale mi sprawia kłopot, a mianowicie:
Chciałbym zmieniać zmienne zegara przez naciśnięcie przycisku, obecnie gdy robię to w poniższy sposób
if (digitalRead(8) == LOW) {dt.minute ++, delay(100);}
zegar się zawiesza. Czy zmienne zegara należy traktować jakoś inaczej?
Poniższy kod dla lepszej czytelności ograniczyłem tylko do edycji minut
Kod:
#include <DS1307.h>
#include <Wire.h>
DS1307 clock;
RTCDateTime dt;
int IR_plus = 0;
void setup(){
pinMode(8, INPUT_PULLUP); //plus
Serial.begin(9600);
clock.begin();
if (!clock.isReady())
}
void loop(){
dt = clock.getDateTime();
lcd.print(dt.minute);
if (digitalRead(8) == LOW) {dt.minute ++, delay(100);}
}
Z góry dziękuję za pomoc i przepraszam za zaniżanie poziomu
Ogólnie polecam DS3231 jest 100razy dokładniejszy.
Może spróbuj przypisać ten czas do zmiennej i potem tą zmienną regulować.
Kod:
int minuty = dt.minute;
if (digitalRead(8) == LOW) {minuty ++, delay(100);}
}
lcd.print(minuty);
1. No niestety ten sposób nie pomaga
2. Prawdę mówiąc nie zależy mi na super dokładności ponieważ ma to być zegar sterownika nie wymagający super dokładności, ale dzięki za podpowiedź
(06-01-2016, 11:34)rykool napisał(a): [ -> ]Witam, mam raczej banalny problem ale mi sprawia kłopot, a mianowicie:
Chciałbym zmieniać zmienne zegara przez naciśnięcie przycisku, obecnie gdy robię to w poniższy sposób
if (digitalRead(8) == LOW) {dt.minute ++, delay(100);}
zegar się zawiesza. Czy zmienne zegara należy traktować jakoś inaczej?
Poniższy kod dla lepszej czytelności ograniczyłem tylko do edycji minut
#include <DS1307.h>
#include <Wire.h>
DS1307 clock;
RTCDateTime dt;
int IR_plus = 0;
void setup(){
pinMode(8, INPUT_PULLUP); //plus
Serial.begin(9600);
clock.begin();
if (!clock.isReady())
}
void loop(){
dt = clock.getDateTime();
lcd.print(dt.minute);
if (digitalRead(8) == LOW) {dt.minute ++, delay(100);}
}
Z góry dziękuję za pomoc i przepraszam za zaniżanie poziomu
Witam
A czy przypadkiem nie masz błędu przy kompilacji, bo chyba zamiast przecinka powinien być średnik po dt.minute++
Pozdrawiam
Nie, wszystko kompiluje się poprawnie.
Gdzieś wyczytałem, że przed edycją zmiennych czasu powinno się zatrzymać zegar przez clock.stop() i co ciekawe komendy tej nie mogę użyć bo wyskakuje błąd, ale skoro jest i działa komenda clock.begin() to czemu nie mogę zatrzymać zegara ?
To że kompiluje się poprawnie jest zrozumiałe. Zacytuję Ci fragment książki Jerzego Grebosza "Symfonia C++" :
Cytat:Jeśli kilka wyrażeń stoi obok siebie oddzielone przecinkiem, to ta całość, jest także
wyrażeniem, którego wartością jest wartość wyrażenia najbardziej z prawej
Zatem wartością wyrażenia
(2 + 4, a * 4, 3 < 6, 77+2) będzie 79
... a w Twoim kodzie: w tej linii z przecinkiem funkcja if wykona tylko delay... zatem kod się zawiesi, bo będzie ciągle delay.
Kompilator nie zgłosi błędu bo to nie jest błąd składniowy tylko logiczny :-)
Musisz zamienić przecinek na średnik i wtedy testować.
Pozdrawiam
ps. "Najważniejsze jest niewidoczne dla oczu". (Mały Książę - Antoin'e de Saint-Exupery).
Ta symfonia to biblia języka C++ - ma już chyba z 10 wydanie i wciąż bije rekordy popularności, mimo że raczej trzeba PRZYNAJMNIEJ przeczytać z uwagą wszystkie 3 tomy. :-)
...i jeszcze uwaga z ost. chwili - proszę sprawdźcie to Ci, którzy to czytacie... Bo grubo wydaję mi się, że inne kompilatory C++ np. ten Borlanda też nie wywala błędu przy takiej konstrukcji z przecinkiem, ale mamy tam przynajmniej warning - ostrzeżenie. Czy w opcjach IDE Arduino da się ustawić pokazywanie wszystkich warningów?
Pomogło wreszcie się z tym uporałem - dziękuje za pomoc