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 ?
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...
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
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...
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 ....
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>
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 ...
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
icare:
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
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:
if (myservo.write == (pos))
Maintenant dans le contexte où est placée cette ligne,
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
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.
En suivant vos conseils précédents, je suis arriver à cela :
#include <Servo.h>
Servo myservo;
int pos=90;
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);
}
}
Malheureusement il y a encore des erreurs :
sketch_dec31a.ino: In function 'void loop()':
sketch_dec31a:26: error: invalid use of member (did you forget the '&' ?)
sketch_dec31a:27: error: invalid use of member (did you forget the '&' ?)
Je n'arrive pas à bien combiner les deux codes. Pourriez vous me mettre sur la piste et / ou me donner des adresses qui me permettraient d'avancer dans ce projet.
Dans le premier code il y a deux if ouverts donc cela ne va pas. Et je pense que ceci :
if (myservo.write = (pos))
myservo.write = (pos);
else
myservo.write (pos);
Ne signifie pas grand chose vu que la valeur "pos" ne change pas.
Alors que dans le deuxième code vous déterminez la valeur de "pos" en faisant la différence de deux valeurs. (je ne vois pas bien ce qu'elles représentent)
Il faudrait alors rajouter un "else" dans le deuxième code pour faire bouger le servomoteur.
Pourriez vous me dire si mon résonnement est bon ?
void loop(){
unsigned long currentMillis = millis(); // relever la valeur actuelle du temps
if(currentMillis - previousMillis > interval) { // si le temps écoulé depuis la dernière action sur le servo est supérieur à 1000 ms :
previousMillis = currentMillis; // Remettre "à zéro" le compteur de temps
myservo.write (pos); // mettre le servo à jour
} // fin si
}
je ne vois pas où je détermine la valeur de "pos" en faisant la différence de deux valeurs, d'ailleurs, si personne ne modifie la valeur de "pos", ben ça va pas changer grand chose dans le monde... mais mon code marche.