menniti:
inoltre ho un altro problema: a volte questo strab sensore resta aperto, in base alla posizione, e potrebbe restarlo per tutto il giorno (il tx per attivarsi vuole una sequenza low-high), quindi poiché gestisco già questa cosa via software, secondo te potrei mettere in sleep il micro anche col sensore aperto?
La soluzione è semplice, invece di risvegliare su uno stato logico ben preciso, che può essere sia LOW che HIGH, risvegli quando c'è un cambio di stato, quindi sia HIGH->LOW che LOW->HIGH, per farlo basta che metti la keyword CHANGE nella modalità di attivazione dell'interrupt.
Ti allego solo come viene modificata la funzione che mette in sleep, commenta, o cancella, l'attivazione dell'interrupt che si trova in SETUP in modo da attivare l'interrupt solo prima di entrare in sleep e disattivarlo quando ne esce.
void A_nanna() // funzione attivazione sleep
{
/*
Modalità sleep per ATmega 328p
SLEEP_MODE_IDLE
SLEEP_MODE_ADC
SLEEP_MODE_PWR_DOWN
SLEEP_MODE_PWR_SAVE
SLEEP_MODE_STANDBY
SLEEP_MODE_EXT_STANDBY
*/
attachInterrupt(0, sbadiglio, CHANGE); // riattiva l'interrupt
sleep_mode(); // mette in stato di sleep
sleep_disable(); // disattiva la modalità sleep e riporta il micro a piena operatività
detachInterrupt(0); // disattiva l'interrupt
}