Comment puis-je faire une reset manuel sur un Leonardo

pierrot10:
Salut,
Merci. Oui j'aivais aussi trouvé ceci. C'est de là que j'ai eu ce questionnement.

pierrot10:
@pepe

Sinon, pour éviter de devoir faire face à une coupure de la liaison USB, on peut câbler un bouton-poussoir sur une entrée de l'Arduino Leonardo, et lancer une routine de réinitialisation logicielle quand on appuie dessus.

Pour plus de détails sur la façon de procéder, il faudrait connaître le besoin qui mène à utiliser une telle procédure, et le contexte de fonctionnement de la carte (variables, interruptions, périphériques présents, actuateurs éventuels...).

En fait ce que je pourrai faire, c'est mettre la pin 12 par exemple

pinMode(12,OUTPUT);

digitalWrite(12,LOW);



Mettre un cable entre la pin 12 et la pin rst
Puis dans ma loop()

void serialhwread(void)
{
  int i=0;
  char inSerial[5]; //inSerial[20]
  boolean error = false;
 
  if (Serial.available() > 0){ 
     
      while (Serial.available() > 0) {
        inSerial[i]=(Serial.read());
        delay(10);
        i++;     
      }
   
    inSerial[i]='\0';
   
    /* REST THE BOARD */
    if(!strcmp(inSerial,"reset"))
    {
        Serial.println("> Reseting the board");
digitalWrite(12,HIGH);
delay(1500)
digitalWrite(12,LOW);
    }
   
   
    // Vide inSerial
    inSerial[0]='\0';
  }
}



Quand je tape 'reset' dans mon terminal, mon Leonardo devrait reseter sans perdre la connexion USB.
N'es-ce pas?

Pas de rapport, je te parle de la deuxième méthode du tuto qui est purement software. La tienne permet un reset hard par le soft.

pepe:

B@tto:
Par contre les plus calés me moi statueront sur la "propreté" de la méthode puisqu'il me semble que ce n'est pas un pur reset puisque la RAM n'est pas remise à zéro notamment

C'est inexact. Dans tous les cas, la mémoire est réinitialisée par la routine exécutée au démarrage (voir __do_clear_bss ci-dessous). Fort heureusement, car l'état de la RAM est aléatoire après une mise sous tension de la carte.

Justement je me disais que peut-être cette routine n'était pas executée du fait de la méthode employée. Mais tant mieux si c'est le cas :slight_smile:

Et je confirme qu'elle marche, je bosse sur un projet actuellement ou j'avais par erreur pointé une fonction sur l'adresse 0 et évidemment ça rebootait !