Arduino Polska Forum
DS1307 Edycja zmiennych czasu - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: DS1307 Edycja zmiennych czasu (/watek-ds1307-edycja-zmiennych-czasu)



DS1307 Edycja zmiennych czasu - rykool - 06-01-2016

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  Huh


RE: DS1307 Edycja zmiennych czasu - v-cu - 06-01-2016

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);



RE: DS1307 Edycja zmiennych czasu - rykool - 06-01-2016

1. No niestety ten sposób nie pomaga  Huh

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ź


RE: DS1307 Edycja zmiennych czasu - wojtekizk - 14-01-2016

(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  Huh

Witam
A  czy przypadkiem nie masz błędu przy kompilacji, bo chyba zamiast przecinka powinien być średnik po dt.minute++
Pozdrawiam


RE: DS1307 Edycja zmiennych czasu - rykool - 18-01-2016

(14-01-2016, 22:27)wojtekizk napisał(a):
(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  Huh

Witam
A  czy przypadkiem nie masz błędu przy kompilacji, bo chyba zamiast przecinka powinien być średnik po dt.minute++
Pozdrawiam



RE: DS1307 Edycja zmiennych czasu - rykool - 18-01-2016

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 ?


RE: DS1307 Edycja zmiennych czasu - wojtekizk - 18-01-2016

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?


RE: DS1307 Edycja zmiennych czasu - rykool - 18-01-2016

Pomogło wreszcie się z tym uporałem - dziękuje za pomoc