Reboot arduino par logiciel.

Bonjour, y-a-t'il une fonction logiciel qui permette de relancer l'arduino sans appuyer sur le bouton Reset?
j'ai essayé après avoir regarder sur internet :
asm volatile (" jmp 0");

Mais elle ne compile pas^^'. En gros le but serait de redémarrer l'arduino en appuyant sur un bouton du joystick/ une appli mobile.

Merci d'avance pour votre aide! :slight_smile:

Provoquer un Reset logiciel sur un UNO fonctionne si tu exécutes le code:

__asm__ __volatile__ ("jmp 0");

Donc on peut imaginer qu'une fonction contenant cette ligne de code soit appelée si une broche du uc passe à l'état haut et est câblée à cette fonction par un attachinterrupt(). Sauf qu'un Reset est généralement provoqué pour sortir d'un état de plantage du uc, et si tel est le cas, il est très probable que le code ne renverra pas vers la fonction sensée générer le Reset.
Donc si c'est pour sortir d'un état de plantage, il faut plutôt utiliser le watchdog.

pour rebooter l'arduino depuis une appli mobile, tu peux regarder ce topic

Bonjour

Effectivement, la solution qui passe pour être la plus propre consiste à utiliser le watchdog

Mais même pour la solution "crade" il n'est pas nécessaire de descendre dans le barbarisme de l'assembleur. La même chose peut être codée en C standard

void(* reboot) (void) = 0;//déclarer une fonction reboot qui pointe vers l'adresse 0 de la flash
...
//plus loin dans le code
  reboot();

Merci pour vos réponses,

Je vais être plus clair car je ne savais pas que c’était important, mais j’utilise une Arduino Due, et l’instruction que tu m’as donné ne compile pas ( c’est lié je suppose).

Alors dans les fait le but est de revenir à l’état de base de l’arduino, donc que je remette toutes mes variables à leur état d’origine, que je retourne dans la fonction de base, et c’est juste que actuellement le moyen le plus pratique (même si bourrin) de le faire c’est de reboot l’arduino. Donc si j’utilise un watchdog ça ne va pas marcher, la fonction ne plante pas, et ne reste que le temps d’activer le reboot.

Pour l’application mobile merci mais ne vous inquiétez pas elle est déjà faite, j’aimerais juste rajouter cette option, et pour ça je dois savoir la faire en c. Aussi le lien que tu as envoyé je n’arrive pas à voir le rapport, j’ai mal lu?^^’

Pareil pour le reboot, il me dis que la fonction reboot n’existe pas et ne compile pas^^’.

Sur une carte DUE il y a plusieurs façons de provoquer un software Reset.

Un exemple ici :

void setup() {

  Serial.begin(250000);
  GPBR->SYS_GPBR[0] ++;
  Serial.print("GPBR[0] = "); Serial.println( GPBR->SYS_GPBR[0] ); 
  uint32_t   status = (RSTC->RSTC_SR & RSTC_SR_RSTTYP_Msk) >> RSTC_SR_RSTTYP_Pos;
  Serial.print("\nRSTTYP = 0b"); Serial.println(status, BIN);  // Should be 0b011 see page 232
}

void loop() {

  delay(1000);
  __DSB();
  __DMB();

  SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);//software reset
}