Comunicazione I2C mkrfox /ATmega328P - problemi sleep

Ciao a tutti.
Ho collegato una scheda mkrfox 1200 e una scheda DFrobot con le caratteristiche di un Arduino Pro (ATMEGA328P, 3.3V) utilizzando la comunicazione I2C, e tutto funziona perfettamente (invio dati rilevati da sensori da ATMEGA --> mkrfox) .

Ora ho la necessità di attivare la modalità di risparmio energetico su entrambe le schede. Per quanto riguarda la scheda mkrfox1200 non ci sono problemi, ma con l'ATMEGA328P sto incontrando delle difficoltà. In particolare, sto tentando di risvegliare la scheda con "attachInterrupt(1, wakeup, CHANGE), senza successo. Il produttore indica che il modulo BLE integrato è collegato all'ATMEGA attraverso il pin D2 (0), quindi l'unico pin disponibile come interruttore esterno è il D3 (1).

Ho provato a connettere il PIN D3 con un PIN digitale della mkrfox, e ad effettuare un cambio di stato (HIGH/LOW) ma non ottengo nessuna risposta.

Questo è il codice:

MKRFOX1200 - MASTER READER:

#include <Wire.h>

#define ADDRESS 8

int var1 = 0;    
int var2 = 0;   


void setup(){
  Wire.begin();                 // Avvia il bus I2C, indirizzo opzionale per il master
  pinMode(5, OUTPUT);     // pin SVEGLIA   
}

void loop(){
  digitalWrite(5, LOW);       
  delay(500);                     

  Wire.requestFrom(ADDRESS, 2);   // richiede 2 byte al dispositivo slave
  
  while (Wire.available()) {
    var1 = Wire.read();     // leggi il byte ricevuto
    var2 = Wire.read();     // leggi il byte ricevuto
  }

  digitalWrite(5, HIGH);   

  delay(10000);

}

ATMEGA328P - SLAVE SENDER:

#include <Wire.h>
#include <avr/sleep.h>


#define ADDRESS 8

int var1 = 0;    //variabile 
int var2 = 0;    //variabile 


// --------------------- SLEEP -------------------------

void wakeup(){
  sleep_disable();
  delay(500);
}

void lowpower(){
 ADCSRA &= ~(1<<ADEN);  //turn off ADC
 TWCR &= ~(1<<TWEN);   // turn off TWI
 delay(10);
 set_sleep_mode(SLEEP_MODE_PWR_DOWN);   //set sleep mode to power down mode
 sleep_enable();                                              //enable sleep mode
 MCUCR |= (1<<BODS|1<<BODSE);
 MCUCR = MCUCR & (~(1<<BODSE)) | (1<<BODS);
 sleep_cpu();                                                 //enter sleep mode
}

// ------------------------------------------------- 

void setup(){

  pinMode(5,INPUT);    //dati in INPUT dal pin5, legge il sensore
  pinMode(6,INPUT);    //dati in INPUT dal pin6, legge il sensore

  Wire.begin(ADDRESS);
  Wire.onRequest(requestEvent); // esegue la funzione quando ha una richiesta

  attachInterrupt(1, wakeup, CHANGE);       pin interrupt esterno D3 (1)

  lowpower();
}

void loop(){
  var1 = digitalRead(5);
  var2 = digitalRead(6);
  delay(100);


  lowpower();
  delay(100);
}

void requestEvent(){
  Wire.write(var1); 
  Wire.write(var2);
}

Potete aiutarmi a capire dove sto sbagliando? Grazie.

Ciao boss!
Ho visto stai provando ad "addormentare" arduino, hai provato questa libreria?
E' super facile da usare basta solo importarla e non ti vai a creare problemi con interrupt e quant altro.
La sto usando anche io per mandare in Super risparmio energetico Arduino.
Se invece volevi procedere con quel che gia' hai impostato al momento non posso esserti d'aiuto :smiley: