Aller au contenu


Photo
- - - - -

Code arduino qui ne s'arrête pas


4 réponses à ce sujet

#1 majab

majab

    Nouveau membre

  • Membres
  • 2 messages

Posté 10 septembre 2011 - 12:55

Bonjour,

Je me lance dans la robotique, j'arrive à faire deux / trois trucs avec la carte en programmation.

Par contre une fois que les instruction sont lancées plus moyen de les arrêter (si je demande au robot d'aller tout droit, il y va indéfiniment !)

Le bouton stop de l'interface logiciel...ne fonctionne plus.

Quelqu'un a-t-il une idée ?

Merci d'avance
Maxime

#2 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 10 septembre 2011 - 01:41

Salut

Soit c'est un mauvais branchement , soit c'est un problème dans ta programmation.

#3 David_CH

David_CH

    Membre

  • Membres
  • 19 messages

Posté 10 septembre 2011 - 01:43

On fois que tu transfert le code dans l'Arduino, il restera dedans (dans la mémoire de ton Arduino) et comme il a une boucle infini (la boucle "void loop(){}" ba ça tournera indéfiniment. Essaye d'envoyer des commandes du genre "AV" ou "STOP" via le port série afin de contrôler ton robot.

Pour te donner une idée de la façon dont je procède pour ça :

#define MAX_DATA  20

char data[MAX_DATA];
int resetData;


void setup()
{
  Serial.begin(9600);  
}

void loop()
{
  if(Serial.available() > 0) // interruption sur le port serie
  {
    /*Reset les data avant d'en reçevoir de nouveaux*/
    for(resetData = 0; resetData < MAX_DATA; resetData++)
       data[resetData] = 0;
       
    GetStringFromPc();
    Serial.println(data);

    /* strcmp permet de comparer des chaînes de caractères */
    if(strcmp(data, "avance")==0)
      /* Fait avancer ton robot ici */
      
    if(strcmp(data, "InitServo")==0)
       // Fait stopper ton robot ici
  }  
}



Et ma fonction pour récupérer des données sur le port série

/* GetStringFromPC
 * Permet de récupérer des commandes
 * envoyées via le port série 
 * depuis le PC
 */

void GetStringFromPc()
{
  int i;
  for(i = 0; Serial.available() > 0; i++)
  {
    data[i] = Serial.read();
    delay(2); 
  } 
}

P.S. Je pense que la fonction peu-être améliorable avec des String au lieu d'un tableau de char, j'essayerai de le faire quand j'aurais fini mon projet :(

#4 majab

majab

    Nouveau membre

  • Membres
  • 2 messages

Posté 10 septembre 2011 - 05:19

Bah, j'esaie de faire le robot Robby, pour l'instant j'en suis à la phase 1, il avance et tourne et je pige à peu près le code :wacko:.
Je cherche juste à arrêter le robot pour faire des tests, sans qu'il boucle sans fin.
Je pensais que cela pouvait être facilement via le bouton "stop" de l'interface Arduino (un peu comme lorsque l'on balance le nouveau programme), mais cela n'a pas l'air d'être le cas ...

#5 David_CH

David_CH

    Membre

  • Membres
  • 19 messages

Posté 10 septembre 2011 - 09:22

Le plus simple pour ça est de rajouter cette ligne à la fin de ta boucle loop(){}

while(1);

Si par la suite tu veux relancer ton code, appuie simplement sur le bouton reset de la carte.



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users