Il sito per chi ama smanettare con Arduino, Raspberry Pi & Co.
Share:
Notifications
Clear all

wdt e sleep interrupt  

   RSS

0

ciaoa tutti , sono nuovo e del forum di arduino.

ho fatto un arrocchio ma mi ritrovo in un problema che ora cerco di spiegare

se si puo'dire, ha 2 modi di andare in sleep e di conseguenza svegliarsi.
il primo  che da acceso valuta if (Time1 < Time)  se vera va in sleep  usando watchdog dorme 8 secondi si accende per 1 e valuta nuovamente  l if.
la seconda che funziona in parallelo alla prima legge il pin Interrupt, e si sveglia valuta un if (il tempo tra una pressione di un tasto ed un alto )questo usando millis(), e dovrei arrangiarmi  se e vera torna in sleep altrimenti va in loop.
a quando ce watchdog in esecuzione ,legge (digitalPinToInterrupt(PU_ACC)
e disattivi il watchdog durante l esecuzione
in qualsiasi momento

se durante il watchdog (digitalPinToInterrupt(PU_ACC) va low in ogni momento
si sveglia
valuta if (), o va in loop o  va nuovamente in sleep_down e riattiva il wdt per 8 sec .
ogni 8 secondi valuta if(time) e procede di conseguenza

metto un pezzo del programma che sicuramente va aggiustato

Questa discussione è stata modificata 2 mesi fa da daniele79
1 Answer
0
#include <avr Link rimosso ;
#include <avr Link rimosso ;
#include <avr Link rimosso ;
#define PU_ACC 2           //pulsante accensione
#define PU_AVV 3           //pulsante avviamento
#define POWER 13           // alimentazione sensori
int Time ;       // varoalbile per sleep
int Time1 ;       // varoalbile per sleep
void pin2Interrupt(void) {
  detachInterrupt(digitalPinToInterrupt(2));
  digitalWrite(13, HIGH);
}

void enterSleep(void) {
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 
 
   sleep_enable(); 
 
  digitalWrite(13, LOW);
  attachInterrupt(digitalPinToInterrupt(PU_ACC), pin2Interrupt, LOW);
  sleep_mode();
 
  /* Il programma riprende qui. */
   
  sleep_disable();
}

void setup() {
  wdt_disable();
  Serial.begin(9600);
  wdt_enable(WDTO_8S);
   pinMode(PU_ACC, INPUT_PULLUP); // pulsante quadro
  pinMode(PU_AVV, INPUT_PULLUP);   //pulsante avviamento
 
}

void loop() {
 
   if (Time1 < Time) { //se ricezio e' inferiore a

    digitalWrite(POWER, LOW);
    enterSleep();                     // metto in sleep
    while (1);
  }
  wdt_reset();                //resetto  watchdog

}

}
Share:

Entra nel forum

Hai un nuovo progetto in mente ma hai dei dubbi su come realizzarlo? Vuoi condividere la tua conoscenza da maker con gli altri? Registrati nella nostra community e potrai chiedere fare la tua domanda o rispondere e condividere la tua conoscenza in internet.