Un delay qui corresponde au temps de rotation d'un servo

lesept:
Je suppose que tu voulais quelque chose comme

byte temps = map (ecartmax , 0 , 300 , 0 , 180);

delay(temps);

Ouais ^^ j'ai du mal avec cette syntaxe. J'ai contourné le problème quand je me suis aperçu que ça ne fonctionnait pas

  rotime = ecartmax*1.9;  //300 ms / 180 deg = 1.7 ms/deg, j'ai vu large
  delay(rotime);

C'est pas joli, mais je me suis aperçu, comme noté en commentaire, que faire demi-tour, ça lui prend du temps. Quand le servo doit faire 0 à 180, il fait peut-être 0.3s
Mais quand on lui fait faire 0/180/0, il met plus de 0.6s

Le map est plus élégant, mais mon équation semble plus simple à régler...

Au final, voici mon code qui marche, fait maison, sans tricher. Les SG90 chauffent un peu, mais c'est choupinet ces trucs qui gigotent.

//  petite fonction sympa pour commander des servos
//  le temps de rotation optimal d'une commande à une autre
//  est automatiquement défini par la fonction
//  mon premier code qui marche, comme un grand!
//  kammo, 16/4/2018


#include <Servo.h>
Servo servo5; //pin 5 et 6 sont PWM
Servo servo6;
byte angle5;
byte angle6;
int ledpin = 13; //led témoin


void setup() {
  Serial.begin(9600);
  servo5.attach(5);  //servo5 est sur le pin D5
  servo6.attach(6);
  pinMode(ledpin, OUTPUT); //le pin led est une sortie

}

void loop() {
  // on commande les servos, delay() automatique
  servomove(0, 0); // fonction(position du servo5, position du servo6
  servomove(180, 0);
  servomove(0, 0);
  servomove(180, 90);
  servomove(0, 0);
  servomove(0,180);

}

void servomove(byte pos5, byte pos6) {
  digitalWrite(ledpin, HIGH); //allume la led pour montrer qu'il bosse
  byte oldpos5 = servo5.read();  //j'essaie de lire la position actuelle
  byte oldpos6 = servo6.read();  //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
  int rotime; //temps de rotation
  /*Serial.println("Mesure d'écart sur servo5");
  Serial.print(oldpos5);
  Serial.print("     ");
  Serial.println(oldpos6);
  Serial.print(pos5);
  Serial.print("     ");
  Serial.println(pos6);
  Serial.print(ecart5);
  Serial.print("     ");
  Serial.println(ecart6);
  Serial.println (" ");
  Serial.print("Ecart max  ");
  Serial.println(ecartmax);
  Serial.println(rotime);*/
  
  rotime = ecartmax*1.9;  //300 ms / 180 deg = 1.7 ms/deg, j'ai vu large
  delay(rotime);
  digitalWrite(ledpin, LOW); //éteint la led
}

question bonus: oui, ça marche, le même signal de position peut être envoyé à deux servos en même temps.