Beállítás, óra DS1307
Beállítás, óra DS1307
Sziasztok.
Szeretnék csinálni egy órát ds1207 el működik is szépen csak egy problémám van ,szeretném ha az időt manuálisan is gombok segítségével tudnám változtatni percet és az órát 2-2 gombal 1 hozzá ad 1 elvesz egyet , a segítséget előre is köszönöm .
Áthelyeztem a témát a helyére (admin).
Szeretnék csinálni egy órát ds1207 el működik is szépen csak egy problémám van ,szeretném ha az időt manuálisan is gombok segítségével tudnám változtatni percet és az órát 2-2 gombal 1 hozzá ad 1 elvesz egyet , a segítséget előre is köszönöm .
Áthelyeztem a témát a helyére (admin).
Re: LCD óra DS1307-el
Hol akadtálk el? Mit vársz váalsznak?
viewtopic.php?f=1&t=827
"Ha programozási kérdés merül fel, akkor programkód nélkül nagyon nagy a kihívás. Bár ötletbörzét is lehet tartani."
viewtopic.php?f=1&t=827
"Ha programozási kérdés merül fel, akkor programkód nélkül nagyon nagy a kihívás. Bár ötletbörzét is lehet tartani."
Re: LCD óra DS1307-el
Igaz,bocsi konkrétan nem akadtam el sehol mert nem tudom hogyan kéne ezt megoldani egy neten talált kódot töltöttem fel és az megy csak annyi hogy az magától állítja be az időt de nekem még + kéne ,hogy tudjam menetközbe kézzel is állítani. Ezt a kódot másoltam be :
Kód: Egész kijelölése
#include <Wire.h>
#include "RTClib.h"//a könyvtárunk inicializálása
RTC_DS1307 RTC;
void setup () {
Serial.begin(57600);//soros monitor bitsebessége
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");// ha nem érzékeli az RTC futását hibaüzenet jelenik meg
// először beállítjuk a kezdő dátumot és ídőt az RTC-n
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);// év lekérdezése és kiíratás
Serial.print('/');
Serial.print(now.month(), DEC);//hónap lekérdezése
Serial.print('/');
Serial.print(now.day(), DEC);//stb....
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" since 1970 = ");
Serial.print(now.unixtime());// másodpercben kiirt dátum és idő
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
//
DateTime future (now.unixtime() + 7 * 86400L + 30);//7nap ms-ben +30ms jövőidő
Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);//jövőidő kiszámitás
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);//3s várakozás az új ciklusig
}
Re: Beállítás, óra DS1307
Khm....
Ez a standard RTC mintakód. Gyakorlatiag _semmit_ nem tettél hozzá...
Nyomógombkezelés hol van?
Sültgalamb
Ez a standard RTC mintakód. Gyakorlatiag _semmit_ nem tettél hozzá...
Nyomógombkezelés hol van?
Sültgalamb
Re: Beállítás, óra DS1307
Kb. 4 perc google:
http://www.codingcolor.com/microcontrol ... nodot-rtc/
http://www.codingcolor.com/microcontrol ... nodot-rtc/
Re: Beállítás, óra DS1307
Ezt írtam ,hogy azt se tudom hogy kezdjek hozzá azért csak a minta kód van meg annyi módosítással,hogy LCD re van kiíratva.
Re: Beállítás, óra DS1307
Megnéztem a linket ,köszi.
Re: Beállítás, óra DS1307
ha a mintaprogram működik, esetleg gondold meg, hogy átírod a beállítását a kvarcórák kétgombos set/step vezérlésére!
ez úgy működik, hogy a Set gomb (rövid) lenyomásával választhatsz a kijelezni kívánt adatok közül (óra-dátum-ébresztés-estébé),
a SET gomb hosszú (2-3sec) megnyomásával bemész az aktuális adat beállításába, (pl. ébresztés)
az adat villogni kezd (pl az ébresztés órája),
a STEP gomb röviden nyomva +1 et hozzáad,
a STEP gomb folyamatosan nyomva +5öt hozzáad,(óra beállításakor 23 után átfordul amíg nyomják a gombot)
a SET gomb röviden nyomva a következő adatra lép
az adat villogni kezd (pl ébresztés perc)
beállítása a STEP gombbal, mint fent,
a SET gomb hosszan nyomva kilép a beállításból,
ha dátum vagy idő beállítása történt,és elmenti az rtc-be az új értékeket.
ha ébresztés állítása történt, elmenti nem felejtő memóriába (ha jól emléxem, ez is van az rtc chipben 56 byte)
mint látod, ez is két gombos vezérlés, csak kicsit többet tudsz vele tenni, mint az óra-perc beállítással a példaprogramban.
(c)
ui:én azért az lcd háttérvilágításával is csinálnék valamit,
egyszer, mert éjjel bevilágítaná a szobát,
és másodszor, mert nagyon kérdéses a kínai modulok háttérvilágításának élettartama (túl vannak hajtva)
ez úgy működik, hogy a Set gomb (rövid) lenyomásával választhatsz a kijelezni kívánt adatok közül (óra-dátum-ébresztés-estébé),
a SET gomb hosszú (2-3sec) megnyomásával bemész az aktuális adat beállításába, (pl. ébresztés)
az adat villogni kezd (pl az ébresztés órája),
a STEP gomb röviden nyomva +1 et hozzáad,
a STEP gomb folyamatosan nyomva +5öt hozzáad,(óra beállításakor 23 után átfordul amíg nyomják a gombot)
a SET gomb röviden nyomva a következő adatra lép
az adat villogni kezd (pl ébresztés perc)
beállítása a STEP gombbal, mint fent,
a SET gomb hosszan nyomva kilép a beállításból,
ha dátum vagy idő beállítása történt,és elmenti az rtc-be az új értékeket.
ha ébresztés állítása történt, elmenti nem felejtő memóriába (ha jól emléxem, ez is van az rtc chipben 56 byte)
mint látod, ez is két gombos vezérlés, csak kicsit többet tudsz vele tenni, mint az óra-perc beállítással a példaprogramban.
(c)
ui:én azért az lcd háttérvilágításával is csinálnék valamit,
egyszer, mert éjjel bevilágítaná a szobát,
és másodszor, mert nagyon kérdéses a kínai modulok háttérvilágításának élettartama (túl vannak hajtva)
Re: Beállítás, óra DS1307
Igen ,egy ehhez hasonlót szeretnék csinálni ,hogy az időt át tudjam állítani amit a mintaprogram szerint készítettem el csak hát kezdő vagyok úgyhogy nem tudom pontosan hogyan is kezdjek bele, az lcd háttér világításához csináltam egy fényerő szabályzót amit egy fotó ellenállás vezérel ha sötét van halvány ha világos erősebb a fénye.
Re: Beállítás, óra DS1307
valahogy ebbe a példa programba nem lehetne bele tenni pluszba,hogy ne keljen az egészet át írni ,erre is csak azért volna szükség ,hogy a pontatlanság miatti eltérést tudjam állítani nem szeretnék tényleg semmi extrát.
Re: Beállítás, óra DS1307
Újabb probléma adódott feltöltöttem azt a kódot ami volt a linkben ,megnéztem stb.,utána vissza töltöttem azt ami előtte volt de most már az időt nem állítja be csak találomra valami időpontot.
Re: Beállítás, óra DS1307
akkor kezdjünk neki!
először is:mit akarsz csinálni?
szedd össze a gondolataid, írd le, mit szeretnél megvalósítani?
- óra az rtc chippel,
- lcd kiítással
- két gombos vezérléssel
- ébresztés kell-e?
ezek után szétszeded a feladatot részekre, és külön megcsinálod őket.
lcd kezelése
lcd definiálása,
lcd kinézetének megtervezése, kiírása pozícióba
lcd adatok frissítése, kerülve az lcd.clear() használatát
rtc kezelés:
busz kezelés,
rtc olvasása
rtc írása
ezzel megy egy egyszerű órád
gombok vezérlésének megtervezése, (mint atz előző hszemben részleteztem, ott is lépésenként okosíható a program)
gombok definiálása,
leprogramozása,
pergésmentesítés,
okosítások(auto ismétlés stb )
ezek után kész az óra akalmazásod
még megírhatsz egy ébresztést, ha kell, és tényleg készen is vagy!
ébresztési idő beállítása (gombkezelés)
ébresztési adatok eltárolása (rtc írás)
ébresztési adatok olvasás (rtc olvasás)
idő komparátor, szundi funkció lekezelése
látod?
így nem egyben kellett megírni egy órát, hanem kisebb, emészthető lépésekkel haladhatsz a megoldásod felé
(c)
először is:mit akarsz csinálni?
szedd össze a gondolataid, írd le, mit szeretnél megvalósítani?
- óra az rtc chippel,
- lcd kiítással
- két gombos vezérléssel
- ébresztés kell-e?
ezek után szétszeded a feladatot részekre, és külön megcsinálod őket.
lcd kezelése
lcd definiálása,
lcd kinézetének megtervezése, kiírása pozícióba
lcd adatok frissítése, kerülve az lcd.clear() használatát
rtc kezelés:
busz kezelés,
rtc olvasása
rtc írása
ezzel megy egy egyszerű órád
gombok vezérlésének megtervezése, (mint atz előző hszemben részleteztem, ott is lépésenként okosíható a program)
gombok definiálása,
leprogramozása,
pergésmentesítés,
okosítások(auto ismétlés stb )
ezek után kész az óra akalmazásod
még megírhatsz egy ébresztést, ha kell, és tényleg készen is vagy!
ébresztési idő beállítása (gombkezelés)
ébresztési adatok eltárolása (rtc írás)
ébresztési adatok olvasás (rtc olvasás)
idő komparátor, szundi funkció lekezelése
látod?
így nem egyben kellett megírni egy órát, hanem kisebb, emészthető lépésekkel haladhatsz a megoldásod felé
(c)
Re: Beállítás, óra DS1307
Így már sokkal világosabb , LCD kezelése az megy ébresztő nem kell amit beletennék,hogy beállított időnként kapcsoljon ez is ment , de maga az rtc kezelés,busz kezelés,
rtc olvasása, rtc írása nem világos számomra nem tudom milyen parancsokat kell használnom ,ahhoz,hogy ez kivitelezhető legyen amire sikerült haladni az is csak a példa program átalakítása volt ez működik 7:00 kor 5mp re bekapcsol a led ,de tovább nem tudtam haladni ,ami annyiból állna ,hogy a 2,5 ös lábon lévő nyomógombbal tudok a perchez hozzáadni vagy kivonni.
rtc olvasása, rtc írása nem világos számomra nem tudom milyen parancsokat kell használnom ,ahhoz,hogy ez kivitelezhető legyen amire sikerült haladni az is csak a példa program átalakítása volt ez működik 7:00 kor 5mp re bekapcsol a led ,de tovább nem tudtam haladni ,ami annyiból állna ,hogy a 2,5 ös lábon lévő nyomógombbal tudok a perchez hozzáadni vagy kivonni.
Kód: Egész kijelölése
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#include <Wire.h>
#include "RTClib.h"//a könyvtárunk inicializálása
RTC_DS1307 RTC;
void setup () {
lcd.begin(16,2);
pinMode(3,OUTPUT);
pinMode(2,INPUT);
pinMode(5,INPUT);
digitalWrite(13,LOW);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
lcd.println("RTC hiba!");// ha nem érzékeli az RTC futását hibaüzenet jelenik meg
RTC.adjust(DateTime(__DATE__, __TIME__));// először beállítjuk a kezdő dátumot és ídőt az RTC-n
}
if(Serial.available()){
RTC.adjust(DateTime(__DATE__, __TIME__));
}}
void loop () {
delay(1000);
lcd.clear();
//---------------------------------------------------idő beállítás------------------------
DateTime now = RTC.now();
lcd.print(now.year(), DEC);// év lekérdezése és kiíratás
lcd.print('/');
if(now.month()<10)
{lcd.print("0");}
lcd.print(now.month(), DEC);//hónap lekérdezése
lcd.print('/');
if(now.day()<10)
{lcd.print("0");}
lcd.print(now.day(), DEC);//stb....
lcd.setCursor(0,1);
if(now.hour()<10)
{lcd.print("0");}
lcd.print(now.hour(), DEC);
lcd.print(':');
if(now.minute()<10)
{lcd.print("0");}
lcd.print(now.minute(), DEC);
lcd.print(':');
if(now.second()<10)
{lcd.print("0");}
lcd.print(now.second(), DEC);
lcd.setCursor(9,1);
lcd.print("mode:");
lcd.print(i);
//kikapcsolás
if(now.second()>5)
{digitalWrite(3,LOW);}
if(now.hour()==7&&now.minute()==0 && now.second()<o)
{digitalWrite(3,HIGH);}}
Re: Beállítás, óra DS1307
Én az eddigi levelezés alapján koncepcionális hibát látok.
Mintha a programozási alapelvek, logikák (blokkdiagramm, HW háttértudás) hiányozna...
Az RTC nem holmi utasítások kiolvasgatását jelenti. Van mögötte egy függvénykönyvtár, ami működik. Egy HW bekötve.
Javasolt az alapok fele a 60 nap alatt Arduino átolvasása, megtanulása. Az Arduino Notebook lapozása, Illetve Harsányi Réka emlegetett E-Bookja...
Mintha a programozási alapelvek, logikák (blokkdiagramm, HW háttértudás) hiányozna...
Az RTC nem holmi utasítások kiolvasgatását jelenti. Van mögötte egy függvénykönyvtár, ami működik. Egy HW bekötve.
Javasolt az alapok fele a 60 nap alatt Arduino átolvasása, megtanulása. Az Arduino Notebook lapozása, Illetve Harsányi Réka emlegetett E-Bookja...
Re: Beállítás, óra DS1307
alapelv: ne bonyolítsad, amit nem kell bonyolítani!
a bemásolt programodban több olyan kérdésem van, amely megkérdőjelei az üzemszerű működést:
1. melyik lábon is van a led?
2.ez mit is csinál? ha nem fut az rtc, hibát ír ki, ÉS beállítja a nemlétező rtc-t? mintha hiányozna innen egy ELSE ág.
a __DATE__, __TimE__ változó? ha igen, hol adtál neki értéket? mire állítanád az rtc-t?
ide nem egy konkrét dátumot és egy időt kellett volna írni?
3.ez mit is csinál? és miért?
4. ennek mit kéne csinálnia?
honnan veszi az "i" változót? hol van deklarálva? hol adsz neki értéket? mit vezérel?
minden perc 5. másodpercében kikapcsolsz valamit (hol is van a leded? 3as? 13as?)
5. amit 07:00 kor bekapcsolsz??? vagy nem
now.second()<o az o micsoda?
változó? deklarációja? étéke?
elírt 0? NEGATiV másodperc, mint feltétel?!?
ez a program ebben a formában nem hiszem, hogy lefodul értelmes kóddá.
szerintem hagyd ezt a fenébe, és a Robert által linkelt példaprogit nézegesd át.
ott van benne a gombkezelés, az rtc írás, olvasás
nincs benne rtc függvénykönyvtár, ellenben nagyon jól kommentezett, látszik, hogy olvassa-írja az rtc chip regisztereit
én linkeltem anno a csip memória térképét, abból kinézheted, melyik címen milyen adat van
ne veszítsd el csüggedésed, próbálkozz lelkesen!
a bemásolt programodban több olyan kérdésem van, amely megkérdőjelei az üzemszerű működést:
1. melyik lábon is van a led?
Kód: Egész kijelölése
pinMode(3,OUTPUT);
digitalWrite(13,LOW);
Kód: Egész kijelölése
if (! RTC.isrunning()) {
lcd.println("RTC hiba!");// ha nem érzékeli az RTC futását hibaüzenet jelenik meg
RTC.adjust(DateTime(__DATE__, __TIME__));// először beállítjuk a kezdő dátumot és ídőt az RTC-n
}
ide nem egy konkrét dátumot és egy időt kellett volna írni?
3.ez mit is csinál? és miért?
Kód: Egész kijelölése
if(Serial.available()){
RTC.adjust(DateTime(__DATE__, __TIME__));
Kód: Egész kijelölése
lcd.setCursor(9,1);
lcd.print("mode:");
lcd.print(i);
//kikapcsolás
if(now.second()>5)
{digitalWrite(3,LOW);}
minden perc 5. másodpercében kikapcsolsz valamit (hol is van a leded? 3as? 13as?)
5. amit 07:00 kor bekapcsolsz??? vagy nem
Kód: Egész kijelölése
if(now.hour()==7&&now.minute()==0 && now.second()<o)
{digitalWrite(3,HIGH);}}
változó? deklarációja? étéke?
elírt 0? NEGATiV másodperc, mint feltétel?!?
ez a program ebben a formában nem hiszem, hogy lefodul értelmes kóddá.
szerintem hagyd ezt a fenébe, és a Robert által linkelt példaprogit nézegesd át.
ott van benne a gombkezelés, az rtc írás, olvasás
nincs benne rtc függvénykönyvtár, ellenben nagyon jól kommentezett, látszik, hogy olvassa-írja az rtc chip regisztereit
én linkeltem anno a csip memória térképét, abból kinézheted, melyik címen milyen adat van
ne veszítsd el csüggedésed, próbálkozz lelkesen!