Bonjour,
Hier j'ai joué avec mes SG90. La Datasheet nous parle de 0.1s pour 60deg, soit 0.3s pour 180deg.
Je pensais faire une fonction pour bouger mes servos, et qu'elle intègre une pause pour s'assurer que les servos sont bien arrivés.
En gros, si mon servo est à 0deg, que je lui dis servo.write(180), et bien qu'une pause de 0.3 se fasse. Ce produit en croix, je le fais avec map.
Seulement, depuis hier, j'ai essayé servo.read() dans tous les sens, avec byte, int, en déclarant la variable avant... j'ai pas compris quelque chose, et je ne comprends pas l'erreur.
Au secours.
#include <Servo.h>
Servo servo5;
Servo servo6;
byte angle5;
byte angle6;
int ledpin = 13;
void setup() {
Serial.begin(9600);
servo5.attach(5);
servo6.attach(6);
pinMode(ledpin, OUTPUT);
}
void loop() {
// on commande les servos, les temps de pause se font automatiquement, enfin normalement
servomove(0, 0); //servo5 à 0deg, servo6 à 0deg
servomove(180, 180);
servomove(0, 180);
servomove(180, 0);
servomove(90, 90);
}
void servomove(byte pos5, byte pos6) {
digitalWrite(ledpin, HIGH); //allume la led pour montrer qu'il bosse
servo5.read(byte oldpos5); //j'essaie de lire la position actuelle
servo6.read(byte oldpos6); //id
servo5.write(pos5); //les servo se mettent en mouvement
servo6.write(pos6); //id
//calcul du delay exact, 0.1s pour 60deg
byte ecart5 = abs(oldpos5 - pos5); //compare la position origine du servo à la position de destination
byte ecart6 = abs(oldpos6 - pos6); //id
byte ecartmax = max(ecart5, ecart6); //compare les ecart, stocke le plus grand des deux
map(byte iecart, 0, 300 , 0 , 180); //fait le produit en croix entre le temps nécessaire et l'écart max relevé //val = map(val, 0, 1023, 0, 180);
delay(iecart); //pause pile poil
digitalWrite(ledpin, LOW); //éteint la led
}
Question bonus: le signal que j'envoie avec servo.write, est-ce que je peux l'envoyer à deux servos en même temps, sur le même pin (avec une soudure) ?