Comment puis-je faire une reset manuel sur un Leonardo

Bonjour à tous

J'ai changer de UNO a LEONARDO.
Sur le Leonardo, il y a un bouton rest qui ne fonctionne pas quand on a un cable USB connecté à l'ordi. EN fait d'après ce que j'ai compris, le carte reset, mais on ne voit rien à l'écran car la connection USB n'est plus étabéie
Plus de détail

J'ai pas exctement tou compris l'explication. Peut-être que mon anglais n'est pas assez bon.
Mais j'ai fait ceci, comme indiqué

Serial1.begin(baud_rate);          // Comm to GPS/GSM
    while(!Serial1);                    // while the serial stream is not open, do nothing:

Ceci, quand j'appui sur le bouton reset, je ne vois pas, sur mon terminal, que le module reset.

Je voulais savoir comment résoudre ce probleme.

Aussi, j'ai comme fait une recherche et je voulais aussi savoir ce que vous en penser.
Sur la carte Leonardo, il y a une pin rest.
Es-ce que si je la mettais à 1, es-ce que résoudrait mon prblème, ou j'aurai le meme.

En effet, je trouve pratique de pouvoir rséseter sa carte, maniellement, avec le bouton.

Merci pour vos lumières.

Merci pour tes explications
Pour être franc avec toi, j'ai travaillé sur un autre truc, car en effet, c'est pas super obligatoire.
Mais je reviendrai là dessus, aussi tot que j'aurai terminer pour problème actuel.
Mais j'ai tout lu. Merci

Bonjour pierrot10,

En voyant le titre du sujet je lisais restauration alors qu'il s'agit de reset ?
STP, pourrais-tu le modifier pour ceux qui font des recherches.

Lorsqu'un sujet est terminé, il est recommandé de le marquer [Résolu] en modifiant le titre
du 1er post.

Merci à tous.
Pour une qualité encore meilleure de ce site.
Géryko

Salut,
Merci pour ce signalement, je l'ai fait.
Je n'ai pas encore clos se sujet. Je suis passé sur un autre truc. Mais je mettrai ma solution dans les 2-3 jours qui suivent.

Merci pierrot10
Très sympa

@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?

D'accord,
On fait c'est pas trop important, mais ennuyant

Le truc c'est que mon programme avanc bien, mais il y a des fois ou j'aimerais que le programme recommence en appuyant sur le bouton reset.

Le probleme actuel, c'est que je dois toujours uploader mon programme pour voir tous les Serial.print(F("")), des le setup(). Ca m'est très utile pour le debugage.

C'est simplement pour ca que j'aimerais le reseter comme je le faisais avec UNO.

Je perds aussi très souvent a connection USB, et ca c'est encore plus ennuyant.
Dans tool->programmer. J'ai choisi (en fait j'ai rien fait) AVRISP mkII.
Es-ce juste? Ne devrais-je pas choisi l'un des USBxxx?

Merci pepe!!!!

Une solution : http://www.instructables.com/id/two-ways-to-reset-arduino-in-software/step2/using-just-software/

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

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?

En fait les questions à se poser c'est:

  • Qu'elle est l'intérêt d'un reset?

  • Pourquoi est-il nécessaire de le faire?

Parce que, lorsqu'un programme fonctionne bien, il n'est absolument pas nécessaire de faire un reset.
De la à conclure qu'il y a un problème de programmation qui va être masqué par ce reset. On en arrive à la question quel est le bug qui t'oblige à faire un reset et qu'il serait peut bon de chercher au lieu de perdre du temps à essayer de réinitialiser la carte.

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 !