Go Down

Topic: Servomoteur, débutant (Read 5934 times) previous topic - next topic

roboazert

Oct 11, 2013, 08:55 pm Last Edit: Oct 17, 2013, 07:14 pm by roboazert Reason: 1
Bonjour, je débute avec Arduino et je recherche à programmer un servomoteur de tel sorte à ce qu'il s'allume pendant x secondes, toute les quart d'heure par exemple. J'ai pris comme base un des exemples nommé Sweep (fichier>Exemple>Servo>Sweep) mais je n'arrive pas à modifier le code pour avoir ce que je veux (je suis un pur débutant...).
Est-ce que quelqu'un pourrait m'aider ?

Merci d'avance,

Noé

B@tto

Salut,

idéalement utiliser les interruptions temporelles : http://battomicro.wordpress.com/2013/06/07/tutorial-les-interruptions-temporelles-avec-arduino/

Après répéter dans l'interruption un simple myservo.write(pos);
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

zoroastre

Yep!

Les solutions non bloquantes sont à privilégier.

L'exempledu logiciel Arduino /Exemples/02.Digital/BlinkWithoutDelay est plutôt parlant et à faire.

@+

Zoroastre.
Gné! ;)

roboazert

Excusez moi mais je suis vraiment un vrai débutant et je n'arrive pas en remplacer dans le code pour le servo moteur. Si quelqu'un pourrait me donner un peu + d'infos pour que j'y arrive...

jfs

je suis vraiment un vrai débutant


Peut être commencer par faire des choses simples, comme "blink" et ensuite modifier quelques paramètres et évoluer comme ça...
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

zoroastre

Donne un début de code. Même si il est mal fait, on aura plus envie de corriger un effort fournit que rien du tout.

@+

Zoroastre.
Gné! ;)

roboazert

J'ai suivi vos conseils et voilà le résultat. Il y a encore des erreurs ... Si quelqu'un saurait m'aider à corriger, ce serait vraiment sympa.

Merci d'avance

Code: [Select]

Servo myservo;     

myservo.write(pos);
long previousMillis = 0;       


long interval = 1000;           

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

void loop()
{

  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {
 
    previousMillis = currentMillis;   


    if (myservo.write == LOW)
      myservo.write = HIGH;
    else
      myservo.write = LOW;

 
  }
}

3Sigma

Bonjour,

Ca ne marche pas ou bien tu as des erreurs de compilation ?
Dans le second cas, peux-tu les poster ?

roboazert

voilà les erreurs :

Code: [Select]
BlinkWithoutDelay:2: error: 'Servo' does not name a type
BlinkWithoutDelay:4: error: expected constructor, destructor, or type conversion before '.' token
BlinkWithoutDelay.ino: In function 'void setup()':
BlinkWithoutDelay:12: error: 'myservo' was not declared in this scope
BlinkWithoutDelay.ino: In function 'void loop()':
BlinkWithoutDelay:25: error: 'myservo' was not declared in this scope

Super_Cinci

en voilà une autre :

Code: [Select]
      myservo.write = HIGH;
et la correction : http://arduino.cc/en/Reference/ServoWrite

d'où as-tu inventé ça? tu n'as pas suivi nos conseils : tu vas trop vite... Les gens n'imaginent pas le temps que l'on perd à vouloir griller des étapes...

roboazert

Excusez moi, je me suis renseigné mais apparemment pas assez ...
J'ai du mal a débuter et c'est pour cela que je vous demande votre aide. Pour que vous expliquiez mes erreurs et pour
que je puisse progresser. Si cela ne vous convient pas alors tan pis ....

icare

Bonsoir,

voilà les erreurs :

Code: [Select]
BlinkWithoutDelay:2: error: 'Servo' does not name a type
BlinkWithoutDelay:4: error: expected constructor, destructor, or type conversion before '.' token
BlinkWithoutDelay.ino: In function 'void setup()':
BlinkWithoutDelay:12: error: 'myservo' was not declared in this scope
BlinkWithoutDelay.ino: In function 'void loop()':
BlinkWithoutDelay:25: error: 'myservo' was not declared in this scope


Il faut peut être déclarer ta bibliothèque Servo dans le début de ton programme et avant Servo myservo, genre #include <Servo.h>
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

roboazert

Bonjour,

J'ai recorrigé mon code et des erreurs persistent ...

Je sais que je me trompe dans à la fin du code et que je dois déclarer "pos" mais je n'arrive pas à le faire même avec le lien de Super_Cinci.
Code: [Select]

#include <Servo.h>
Servo myservo;     


long previousMillis = 0;       


long interval = 1000;           

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

void loop()
{

  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {
 
    previousMillis = currentMillis;   


    if (myservo.write = (pos)
      myservo.write = (pos);
    else
      myservo.write (pos);

 
  }
}



et voila le nouveau rapport d'erreurs :

Code: [Select]


BlinkWithoutDelay.ino: In function 'void loop()':
BlinkWithoutDelay:27: error: 'pos' was not declared in this scope
BlinkWithoutDelay:28: error: expected `)' before 'myservo'


Je serais vraiment très reconnaissant si vous saviez m'aidez à corriger ...

icare

#13
Nov 02, 2013, 12:01 pm Last Edit: Nov 02, 2013, 12:05 pm by icare Reason: 1
Bonjour,
Déjà pour commencer, il faut corriger cela :
if (myservo.write = (pos)
par
if (myservo.write = (pos))

Le compilateur ne comprend pas "pos"
Cette variable n'est pas déclarer dans ton programme et elle n'a pas de valeur (n'existe pas)
@+

[EDIT] Il faut lire les messages du compilateur dans les 3 erreurs tu avais la solution
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

fdufnews


Bonjour,
Déjà pour commencer, il faut corriger cela :
if (myservo.write = (pos)
par
if (myservo.write = (pos))

Le compilateur ne comprend pas "pos"
Cette variable n'est pas déclarer dans ton programme et elle n'a pas de valeur (n'existe pas)
@+

[EDIT] Il faut lire les messages du compilateur dans les 3 erreurs tu avais la solution


En fait dans la ligne il y a 2 erreurs
Code: [Select]
if (myservo.write = (pos)
il manque la parenthèse fermante
et le = est une affectation et non une comparaison.
le code correcte serait plutôt:
Code: [Select]
if (myservo.write == (pos))

Maintenant dans le contexte où est placée cette ligne,
Code: [Select]
    if (myservo.write = (pos)
      myservo.write = (pos);
    else
      myservo.write (pos);
que la syntaxe soit bonne ou pas le résultat et le même puisque les 2 branches du if sont équivalentes

Pour la déclaration de pos tu as déjà 2 variables déclarées au début de ton programme donc il suffit de reproduire.
Selon la doc de servo write attend un paramètre de type int donc tu déclares au début du programme
Code: [Select]
int pos=90; postionne le servo à 90 degrés

Après, à toi de faire évoluer cette valeur dans ton code pour faire ce que tu veux.

Go Up