kacperos.89 Napisano Grudzień 25, 2022 Udostępnij Napisano Grudzień 25, 2022 Dzień dobry. Robię sobie takie małe urządzonko na ATtiny13 i chciał bym używać opcji oszczędzania energii bo układ jest na baterii 3V. Do oszczędzania energii używam biblioteki <avr/sleep.h> ale po wprowadzeniu procesora w stan uśpienia (sleep_cpu()) później nie chce się wzbudzić (sleep_disable()). Używam Arduino IDE z biblioteką dla ATtiny13 (MicroCore). Ten sam program uruchamiany na normalnym Arduino UNO (oczywiście z odpowiednio dopasowanymi pinami) Działa tak jak należy po uśpieniu wybudza się. Kod programu wygląda tak: #include <avr/sleep.h> #define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off) #define RLED 3 #define YLED 4 #define GLED 0 #define BUZZ 2 #define BUTT 1 int mode = 0; void setup() { adc_disable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); pinMode(YLED, OUTPUT); //Yellow pinMode(GLED, OUTPUT); //Green pinMode(RLED, OUTPUT); //Red pinMode(BUZZ, OUTPUT); //Buzzer pinMode(BUTT, INPUT); //Button //attachInterrupt(BUTT, button, RISING); } void button() { digitalWrite(YLED, HIGH); delay(500); digitalWrite(YLED, LOW); delay(500); mode = ++mode; riseCPU(); } void sleepCPU() { attachInterrupt(BUTT, riseCPU, RISING); sleep_enable(); delay(100); sleep_cpu(); tone(BUZZ, 50); delay(300); noTone(BUZZ); } void riseCPU() { sleep_disable(); attachInterrupt(BUTT, button, RISING); } void road() { digitalWrite(RLED, HIGH); delay(5000); digitalWrite(YLED, HIGH); delay(1000); digitalWrite(RLED, LOW); digitalWrite(YLED, LOW); digitalWrite(GLED, HIGH); delay(5000); digitalWrite(YLED, HIGH); digitalWrite(GLED, LOW); delay(1000); digitalWrite(YLED, LOW); } void sound() { tone(BUZZ, 100); delay(300); tone(BUZZ, 50); delay(300); } void loop() { attachInterrupt(BUTT, button, RISING); switch (mode) { case 0: noTone(BUZZ); digitalWrite(GLED, HIGH); delay(500); digitalWrite(GLED, LOW); delay(500); break; case 1: noTone(BUZZ); digitalWrite(GLED, HIGH); delay(100); digitalWrite(GLED, LOW); delay(100); digitalWrite(GLED, HIGH); delay(100); digitalWrite(GLED, LOW); delay(1000); sound(); break; case 2: noTone(BUZZ); digitalWrite(GLED, HIGH); delay(100); digitalWrite(GLED, LOW); delay(100); digitalWrite(GLED, HIGH); delay(100); digitalWrite(GLED, LOW); delay(100); digitalWrite(GLED, HIGH); delay(100); digitalWrite(GLED, LOW); delay(500); road(); break; case 3: sleepCPU(); break; default: mode = 0; break; } } 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ę »