Go Down

Topic: Arduino Uno en boucle sans moyen de l'arrêter (Read 2 times) previous topic - next topic

R2

Bonjour,

je débute sur Arduino et j'ai fait un programme pour faire osciller un moteur qui semble boucler sans que je puisse reprendre la main sur le matériel.

Voici mon programme extrait d'un exemple dans lequel j'ai maladroitement modifié quelques valeurs numériques:

#include <Servo.h>
Servo myservo;  
int pos = 0;

void setup()
{
 myservo.attach(9);
}

void loop()
{
 for(pos = 100; pos < 150; pos += 10)
 {            
   myservo.write(pos);  
   delay(30);    
 }
 for(pos = 150; pos>=100; pos-=10)
 {                                
   myservo.write(pos);
   delay(30);
 }
}

Clairement je crois voir que les 30ms sont insuffisantes et ne lui laissent pas le temps nécessaire à faire le mouvement, donc il repart direct dans l'autre sens etc.

depuis le moteur oscille de moins de 50° (comme demandé), à grande vitesse sans que je puisse charger quoique ce soit d'autre. (comme un programme qui ne fait rien)
L'appui sur le bouton Reset le fait s'arrêter, mais il reprend de plus belle quelques secondes après.

Quelle serait la procédure pour faire un RAZ ?

Merci de votre aide.
R2

Korman

Charge un autre programme. Blink par exemple.

Korman

erlik

#2
Nov 30, 2010, 11:20 pm Last Edit: Dec 01, 2010, 12:21 pm by erlik Reason: 1
C'est simple, la fonction loop() est une boucle qui reprend indéfiniment.
Essaye de limiter le nombre d'oscillations,  un truc du style
Code: [Select]
#include <Servo.h>
Servo myservo;  
int pos = 0;
int loop = 5;

void setup()
{
myservo.attach(9);
}

void loop()
{
if(loop <= 5){
for(pos = 100; pos <= 150; pos++)
{            
  myservo.write(pos);  
  delay(30);    
 }
 for(pos = 150; pos>=100; pos--)
 {                                
  myservo.write(pos);
  delay(30);
 }
}

loop++;
}


Sinon, reste les interruptions

R2

J'essaye bien de charger un autre programme comme Blink, mais il ne veut rien savoir.
Il reste sur "Uploading to I/O Board..." sans me redonner la main, ni rien charger.
Comment le remettre à 0 ?
Thanks
R2

Luj06

Est-ce que tu as bien débranché le servomoteur avant d'essayer de reprogrammer l'Arduino ?

Sinon, effectivement 30 millisecondes ce n'est pas suffisant puisque le signal de position est envoyé au servo toutes les 20 millisecondes.

Avec ton code, il devrait passer de 100 à 150 en 5 tour soit en 150 millisecondes. Donc on lui demande de faire 50° en 150 millisecondes alors que généralement un bon servo fait 300 millisecondes pour 60°, souvent plus, genre 800 ms.

B@tto

Nan mais il arrive même pas à réuploader un programme dessus !!

R2, le ptit bouton sur la carte c'est le reset. Branche ta carte, lance l'upload et appuie sur le bouton  ;)
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

R2

Hourra !

il faut effectivement recharger un programme (style blink) en appuyant sur reset,
il faut juste refaire l'opération x fois pour que le timing soit correct.

bref on s'en sort ainsi,
merci à vous pour votre guide précieux dans ce moment difficile.

Pour info,
Nous sommes sur la construction d'un robot delta et ce sont les débuts un peu laborieux.
Aujourd'hui donc un des 3 bras est actionné.

Merci encore
R2

Go Up