Popularny post 99teki Napisano Grudzień 15, 2023 Popularny post Udostępnij Napisano Grudzień 15, 2023 (edytowany) - dzieci zasypiają z włączonym oświetleniem globusa Albi. - fakt że pobiera tylko 2.5 W mocy ale po co ma się świecić całą noc. - dorobimy "timer" na 30 minut a potem deep sleep Uno. - poniżej wersja beta programu, ma te zaletę że działa u mnie. // 2023.12.14, bubu321, working // // piny PWM 3,5,6,9,10,11 // analogWrite(pins, dutyCycle); // dutyCycle 0..255 // pin PWM #include <avr/sleep.h> #define pins 9 unsigned long int czas15min = 1800000; // 1.800.000 30 minut unsigned long int czas30sek; int dutyCycle = 255; // -------------------------- subroutine --------------------------- // -------------- void enterSleep() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); analogWrite(pins, 0); sleep_enable(); // attachInterrupt(digitalPinToInterrupt(2), wakeUpNow, LOW); sleep_mode(); /* The program will continue from here. */ /* First thing to do is disable sleep. */ // sleep_disable(); // detachInterrupt(digitalPinToInterrupt(2)); } // ----------------------------------------- setup -------------------- void setup() { Serial.begin(250000); Serial.println("start"); Serial.println(czas15min); pinMode(13, OUTPUT); analogWrite(pins, dutyCycle); // czas15min = millis(); // 15 minut; } // ------------------------------------------ loop -------------------------- void loop() { if (millis() > czas15min ) { Serial.println("sleeping ..."); delay(500); enterSleep(); // Enter sleep method! } digitalWrite(13, HIGH); delayMicroseconds(100); digitalWrite(13, LOW); delayMicroseconds(1000 - 100); if (millis() > czas30sek) { dutyCycle -= 10; czas30sek = millis() + 60000; // co 60 sekund if (dutyCycle < 10) dutyCycle = 0; Serial.println(dutyCycle); Serial.println(millis()); } analogWrite(pins, dutyCycle); } // ------------- end ---------------- - Edytowano Grudzień 15, 2023 przez 99teki 4 Link do komentarza Share on other sites More sharing options...
kaczakat Grudzień 15, 2023 Udostępnij Grudzień 15, 2023 No to pięknie. Dodatkowo można wszystkie piny wyzerować, wyłączyć moduły i zegary co obniża pobór prądu w powerdown. Jak ten delay jest po to by Serial skończył działanie to można też użyć funkcji Serial.flush, zatrzymuje program w tym miejscu dopóki Serial nie wyśle całości. Mój ulubiony zestaw informacji o usypianiu AVR: http://www.gammon.com.au/forum/?id=11497 . Nie ma to znaczenia w takim projekcie podłączonym do gniazdka, ale może akurat wpadnie coś nowego do warsztatu. 1 Link do komentarza Share on other sites More sharing options...
jand Grudzień 15, 2023 Udostępnij Grudzień 15, 2023 Jasne, że pięknie. Moim zdaniem niepotrzebna jest pętla odmierzające czas pozostający do uśpienia - procesor usypiamy jak dutyCycle zejdzie do zera, czyli światło zgaśnie. Uwielbiam, jak zmienna o nazwie czas15min ma wartość odpowiadającą 30 minutom. 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »