Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #include <avr/wdt.h>
  2. #include <avr/sleep.h>
  3. #include <avr/interrupt.h>
  4. #define adc_disable() (ADCSRA &= ~(1<<ADEN)) // disable ADC (before power-off)
  5. #define adc_enable() (ADCSRA |= (1<<ADEN)) // re-enable ADC
  6.  
  7. void setup() {
  8. // все пины как входы, экономия энергии
  9. for (byte i = 0; i < 6; i++) {
  10. pinMode(i, INPUT);
  11. }
  12. adc_disable(); // отключить АЦП (экономия энергии)
  13.  
  14. wdt_reset(); // инициализация ватчдога
  15. wdt_enable(WDTO_1S); // разрешаем ватчдог
  16. // 15MS, 30MS, 60MS, 120MS, 250MS, 500MS, 1S, 2S, 4S, 8S
  17.  
  18. WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет резет.
  19. sei(); // разрешаем прерывания
  20. set_sleep_mode(SLEEP_MODE_PWR_DOWN); // максимальный сон
  21. }
  22.  
  23. void loop() {
  24. mainTimer++;
  25.  
  26. if (!state) { // если помпа не включена
  27. if ((long)mainTimer - myTimer > PERIOD) { // таймер периода
  28. myTimer = mainTimer; // сброс таймера
  29. state = true; // флаг на запуск
  30. pinMode(MOS, OUTPUT); // пин как выход
  31. digitalWrite(MOS, HIGH); // врубить
  32. }
  33. } else { // если помпа включена
  34. if ((long)mainTimer - myTimer > WORK) { // таймер времени работы
  35. myTimer = mainTimer; // сброс
  36. state = false; // флаг на выкл
  37. digitalWrite(MOS, LOW); // вырубить
  38. pinMode(MOS, INPUT); // пин как вход (экономия энергии)
  39. }
  40. }
  41.  
  42. sleep_enable(); // разрешаем сон
  43. sleep_cpu(); // спать!
  44. }
  45.  
  46. ISR (WDT_vect) {
  47. WDTCR |= _BV(WDIE); // разрешаем прерывания по ватчдогу. Иначе будет реcет.
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement