Sortie de vieille par interruption d'horloge

Bonjour,
Je travaille actuellement sur un mode de mise en vieille et de réveille par horloge externe sur l’arduino

J’ai 2 programmes qui marchent indépendamment :

  • Un qui vise à mettre en vieille l’arduino et à le réveiller par interruption (changement d’etat) sur la pin2
  • Un autre qui permet de générer (à l’heure voulu) un état 0 ou 5V sur la Pin SQW d’une horloge DS3234.

Malheureusement je n’arrive pas à faire tourner le programme de l’interruption par l’horloge pendant que l’arduino est en vieille…
Quelqu’un aurait-il une idée de l’endroit ou je devrais mettre la partie loop du programme DS3234?
J’ai essayé à l’intérieure de la fonction de la fonction vieille, mais ça ne fonctionne pas

Voici les 2 programmes en question :

Interruption par DS3234 :

#include <DS3234.h>
#include <SPI.h>
//===========================================================================================

#define BUFF_MAX 256

const int cs = 10;              // chip select pin

// time when to wake up
uint8_t wake_HOUR = 14;
uint8_t wake_MINUTE = 6;
uint8_t wake_SECOND = 9;

// rafraichissement (ms)
unsigned long prev = 5000, interval = 5000;

//===========================================================================================
void set_alarm(void)
{

    // flags define what calendar component to be checked against the current time in order
    // to trigger the alarm - see datasheet
    // A1M1 (seconds) (0 to enable, 1 to disable)
    // A1M2 (minutes) (0 to enable, 1 to disable)
    // A1M3 (hour)    (0 to enable, 1 to disable) 
    // A1M4 (day)     (0 to enable, 1 to disable)
    // DY/DT          (dayofweek == 1/dayofmonth == 0)
    boolean flags[5] = { 0, 0, 0, 1, 1 };

    // set Alarm1
    DS3234_set_a1(cs, wake_SECOND, wake_MINUTE, wake_HOUR, 0, flags);

    // activate Alarm1
    DS3234_set_creg(cs, DS3234_INTCN | DS3234_A1IE);
}

//=============================================================================================
void setup()
{
    Serial.begin(9600);
    DS3234_init(cs, DS3234_INTCN);
    DS3234_clear_a1f(cs);
    set_alarm();
}

//==============================================================================================
void loop()
{
    char buff[BUFF_MAX];
    unsigned long now = millis();
    struct ts t;

    // once a while show what is going on
    if ((now - prev > interval) && (Serial.available() <= 0)) {
        DS3234_get(cs, &t);

        // display current time
        snprintf(buff, BUFF_MAX, "%d.%02d.%02d %02d:%02d:%02d", t.year,
             t.mon, t.mday, t.hour, t.min, t.sec);
        Serial.println(buff);

        // display a1 debug info
        DS3234_get_a1(cs, &buff[0], 59);
        Serial.println(buff);

        if (DS3234_triggered_a1(cs)) {
            // INT has been pulled low
            Serial.println(" -> alarm1 active");
            // clear a1 alarm flag and let INT go into hi-z
            DS3234_clear_a1f(cs);
        }
        else{Serial.println(" -> alarm1 desactive ");}
        prev = now;
    }
}

Mise en vieille et réveille de l’arduino par interruption externe sur la pin 2 (attach 0)

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


int pin2 = 2;
//===========================================================
//===========================================================
void pin2Interrupt(void)
{
  detachInterrupt(0);
}

//===========================================================
//===========================================================
void enterSleep(void)
{
  attachInterrupt(0, pin2Interrupt, CHANGE); //interruption sur pin2 à chaque changement d'etat
  delay(100);
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode();
  sleep_disable(); 
}


//===========================================================
//===========================================================
void setup()
{
  Serial.begin(9600);
  
  /* Setup the pin direction. */
  pinMode(pin2, INPUT);
  
  Serial.println("Initialisation complete.");
}



//===========================================================
//===========================================================
int seconds=0;
void loop()
{
  delay(1000);
  seconds++;
  
  Serial.print("Awake for ");
  Serial.print(seconds, DEC);
  Serial.println(" second");
  
  if(seconds == 3)
  {
    Serial.println("Entering sleep");
    delay(200);
    seconds = 0;
    enterSleep();
  }
  
}