Exception(0) lors du déclenchement de la rotation d'un moteur pas à pas

Bonjour.
J’utilise un nodeMCU 1.0 sur lequel j’ai branché un module RTC qui déclenche une alarme (une routine qui met un flag à true est exécutée après une interruption, et ce flag est utilisé dans la boucle principale pour déclencher un moteur).
Le moteur fonctionne bien si je le teste dans la boucle principale.
Mais si j’essaie de le faire tourner après le déclenchement de l’alarme (le déclenchement se trouve dans une classe, mais pas dans la boucle principale), le programme s’arrête avec ce message d’erreur:

Exception (0):
epc1=0x4000dce5 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

stack>>>

ctx: cont
sp: 3ffffda0 end: 3fffffc0 offset: 01a0
3fffff40: 3fffdad0 000000c8 3ffeebb4 4020b765
3fffff50: 3ffe8744 00000000 3ffee804 3ffeec34
3fffff60: 3fffdad0 00000002 3ffee82c 4020b268
3fffff70: 3fffdad0 00000002 3ffee82c 4020b2a4
3fffff80: 3fffdad0 00000002 3ffee82c 4020824e
3fffff90: 3fffdad0 00000000 3ffee800 4020892a
3fffffa0: 3fffdad0 00000000 3ffeec04 4020c1f4
3fffffb0: feefeffe feefeffe 3ffe851c 4010136d
<<<stack<<<

ets Jan 8 2013,rst cause:2, boot mode:(1,6)

ets Jan 8 2013,rst cause:4, boot mode:(1,6)

wdt reset

Voici le code du programme principal (le moteur fonctionne si j’enlève les commentaires correspondants; les lignes commentées ne servent qu’à tester le moteur):

#include "ModuleRTC.h"
#include "BoutonPoussoir.h"
#include "Serveur.h"


BoutonPoussoir bouton(D5, D0); //D5 = pin du bouton poussoir D0=pin de la led d'éclairage
BasicStepperDriver moteur(200, D4, D3, D6);//200=nombre de pas du moteur D4=pin DIR D3=pin STEP D6=pin ENABLE sur driver moteur
ModuleRTC modRTC(D7, moteur); //D7 est le pin du nodeMCU sur lequel est branché le pin SQUAREWAVE du module RTC pour les interruptions
Serveur serveur(80, modRTC);//sur le port 80

void setup() {
  Serial.begin(115200);
  moteur.begin(150, 1); //150= RPM 1=pas du moteur
  moteur.setEnableActiveState(LOW);
  serveur.demarrer();
  modRTC.demarrerTimeServeur();
}


void loop() {
  serveur.traiterRequete();
  bouton.miseAJour();
  if (modRTC.getFlagInterruption() == true) {
    modRTC.declencheActionAlarme();
  }
//  moteur.enable();
//  moteur.rotate(360);
//  moteur.disable();
//  delay(3000);
}

Voici une partie du code de la classe qui déclenche le moteur (l’objet moteurModuleRTC représente le même objet que moteur dans le programme principal, il est initialisé grâce au constructeur de la classe ModuleRTC):

void ModuleRTC::declencheActionAlarme()
{
  flagInterruption = false;
  DS3231AlarmFlag flag = Rtc.LatchAlarmsTriggeredFlags();//Pour savoir quelle alarme a été déclenchée

  if (flag & DS3231AlarmFlag_Alarm1) //Si l'alarme 1 a été déclenchée: Synchronisation heure sur serveur temps (tous les jours à 4h)
    //Permet de mettre à jour heure été et hiver rapidement (moins de 2 heures)
  {
    synchroniseRTCAvecTimeServeur();
  }
  if (flag & DS3231AlarmFlag_Alarm2) //Si l'alarme 2 a été déclenchée: on déclenche le moteur
  {
    moteurModuleRTC.enable();
    moteurModuleRTC.rotate(360);
    moteurModuleRTC.disable();
    delay(3000);
  }
}

Le déclenchement de l’alarme fonctionne. La ligne qui pose problème est moteurModuleRTC.rotate(360). Si je supprime uniquement cette ligne, il n’y a pas d’erreur (donc je pense que l’objet moteurModuleRTC est bien initialisé puisque moteurModuleRTC.enable() ne provoque pas d’erreur).
Je ne comprends pas ce qui provoque l’erreur.
Une idée ?
Merci pour les réponses. :slight_smile: