Go Down

Topic: Comment puis-je faire une reset manuel sur un Leonardo (Read 4559 times) previous topic - next topic

pierrot10

Sep 13, 2014, 12:06 pm Last Edit: Sep 14, 2014, 12:06 pm by pierrot10 Reason: 1
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
http://arduino.cc/en/Guide/ArduinoLeonardoMicro?from=Guide.ArduinoLeonardo#toc3

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é

Code: [Select]
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.
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

pierrot10

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
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

geryko

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


Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

pierrot10

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.
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

geryko

Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

pierrot10

@_pepe_
Quote

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
Code: [Select]
pinMode(12,OUTPUT);
digitalWrite(12,LOW);

Mettre un cable entre la pin 12 et la pin rst
Puis dans ma loop()
Code: [Select]

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?
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

pierrot10

#6
Sep 15, 2014, 08:33 pm Last Edit: Sep 15, 2014, 08:36 pm by pierrot10 Reason: 1
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?
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

pierrot10

Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

B@tto

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
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

pierrot10

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

@_pepe_
Quote

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
Code: [Select]
pinMode(12,OUTPUT);
digitalWrite(12,LOW);

Mettre un cable entre la pin 12 et la pin rst
Puis dans ma loop()
Code: [Select]

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?
Il ne suffit pas de tout savoir, la persévérance, c'est déjà presque tout!
You can not know everything, perseverance, it is almost everything!

fdufnews

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.

B@tto


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

@_pepe_
Quote

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
Code: [Select]
pinMode(12,OUTPUT);
digitalWrite(12,LOW);

Mettre un cable entre la pin 12 et la pin rst
Puis dans ma loop()
Code: [Select]

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.


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 :)

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 !
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Go Up