novakkry
Vytvořené odpovědi
-
AutorPříspěvky
-
novakkryÚčastník
Tady je můj kód, kterej jsem poslepoval z nějakejch kódů. Je to zatím asi nejdál, co jsem se dostal. 😀
Problém je, že proběhne loop, potom se to uspí, probudí, uspí, ale už neprobudí. :/ Možná ten kód je blbost, já nevím…#include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC #include <Streaming.h> //http://arduiniana.org/libraries/streaming/ #include <Time.h> //https://playground.arduino.cc/Code/Time #include <Wire.h> //https://arduino.cc/en/Reference/Wire #include <avr/sleep.h> #define SQW_PIN 2 void setup(void) { Serial.begin(115200); //setSyncProvider() causes the Time library to synchronize with the //external RTC by calling RTC.get() every five minutes by default. setSyncProvider(RTC.get); Serial << "RTC Sync"; if (timeStatus() != timeSet){ Serial << " FAIL!"; } Serial << endl; printDateTime( RTC.get() ); Serial << " --> Current RTC time." << endl; //Disable the default square wave of the SQW pin. RTC.squareWave(SQWAVE_NONE); //Attach an interrupt on the falling of the SQW pin. //digitalWrite(SQW_PIN, HIGH); //redundant with the following line pinMode(SQW_PIN, INPUT_PULLUP); //Set an alarm at every 20th second of every minute. RTC.setAlarm(ALM1_MATCH_SECONDS, 20, 0, 0, 1); //daydate parameter should be between 1 and 7 RTC.alarm(ALARM_1); //ensure RTC interrupt flag is cleared RTC.alarmInterrupt(ALARM_1, true); } //volatile boolean alarmIsrWasCalled = false; myslim, ze to nepotrebujeme void alarmIsr() { Serial.println("alarmIsr"); //abych zjistil, jestli tahle funce byla zavolana // alarmIsrWasCalled = true; myslim, ze to nepotrebujeme } void sleepNow() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here sleep_enable(); // enables the sleep bit in the mcucr register // use interrupt 0 (pin 2) and run function attachInterrupt(0,alarmIsr, CHANGE);// here the device is actually put to sleep!! sleep_mode(); Serial.println("SleepNow"); //abych zjistil, jestli tahle funce byla zavolana // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP // sleep_disable(); // first thing after waking from sleep: disable sleep... // detachInterrupt(0); // disables interrupt 0 on pin 2 so the wakeUpNow code will not be executed during normal running time. } int i = 1; //abych zjistil, kolikrat probehl loop void loop(void) { // alarmIsrWasCalled = false; myslim, ze to nepotrebujeme delay(100); Serial.println(i); delay(100); i++; sleepNow(); } void printDateTime(time_t t) { Serial << ((day(t)<10) ? "0" : "") << _DEC(day(t)) << ' '; Serial << monthShortStr(month(t)) << " " << _DEC(year(t)) << ' '; Serial << ((hour(t)<10) ? "0" : "") << _DEC(hour(t)) << ':'; Serial << ((minute(t)<10) ? "0" : "") << _DEC(minute(t)) << ':'; Serial << ((second(t)<10) ? "0" : "") << _DEC(second(t)); }
novakkryÚčastníkTo by bylo žůžo. Díkes! 😀
novakkryÚčastníkJinak díky moc za objasnění TX a RX. To jsou takový malý věci, který člověk neví, zaberou mi celej den a potom člověk zjistí, že má přehodit jenom dva drátky… 😀
novakkryÚčastníkNo já bych nepoužíval arduino na samotné buzení. Postavil bych si bareduino (bez všech regulátorů, ledek a těchto zbytečností) a budil bych ho přes ten rtc ds3231 modul. Ten má na sobě atmel 24c32n a běží na vlastní baterce, takže arduino může spát a mít spotřebu v micro amperech.
Na internetu jsou k tomu tuny návodů, ale já jsem prostě takový kopyto, že to neumím zprovoznit… 🙁novakkryÚčastníkVojto, díky moc za odpověď, nakonec jsem to dal dohromady. :)) Po nastavení na „serial“ a přepojejní na piny 0 a 1 to funguje. Resp. se musí zapojit TX na RX a RX na TX – nevím proč. Promiň, že odepisuju po tak dlouhý době, byl jsem pryč.
Potřebuju překonat ještě jeden problém, možná trochu větší… Chci, aby arduino tu informaci posílalo jednou za den. Bude poměrně na opuštěném místě, tak potřebuji, aby vydrželo aspoň rok na baterku. Jelikož mi stačí, aby bylo v činnosti max minutu denně, tak by to snad neměl být problém.
Koupil jsem RTC modul ds3231 a mým cílem je, aby arduino spalo, DS3231 ho v určitý čas probudil, arduino by udělalo měření a poslalo by data na server a zase uslo. Takhle furt dokola. Už se to snažím dva dny zprovoznit a výsledek naprosto žádnej.Na této stránce (zhruba v první třetině) pod nadpisem „waking from sleep with signal“ je docela pěkný kód, který bych možná chtěl použít, ale není v něm zaimplementováno DS3231.
http://gammon.com.au/powerTady JChristensen, který napsal knihovnu DS3231.h postoval kód, který má nastaven alarm a interrupt na určitý čas. Zprovoznil jsem ho, ale nemá v sobě „sleep“ funkci a za boha jí tam neumím dodat.
https://github.com/JChristensen/DS3232RTC/issues/5Už se o to snažím dva dny a výsledek pořád žádnej, jsem z toho už fakt zoufalej… :/
Jde mi opravdu jenom o to, aby arduino spalo a v určitej čas ho ds3231 probudilo a arduino udělalo nějakou úlohu a zase uslo. Podle všeho, co jsem se dočetl na netu, by to mělo bejt fakt jednoduchý, ale prostě já nejsem schopnej to zprovoznit.Kdyby mi někdo pomohl, byl bych opravdu neskutečně vděčnej.
Díky moc
Kryštof
-
AutorPříspěvky