Bonjour,
Je cherche à coder une action en boucle me permettant de faire bouger 2 servomoteurs de 0 à 180° progressivement sur une temporalité de 3 secondes puis retourner à leur position d'origine sur la même temporalité. En parallèle de ce mouvement, j'utilise des rubans leds RGB qui doivent s'allumer et s'éteindre progressivement en "blanc chaud" (r=225, G=255, B=255). Pour ceci j'ai réalisé le code suivant :
#include <Servo.h>
#define PIN_SERVO1 6
#define PIN_SERVO2 5
int RedPin = 10; //Arduino driving pin for Red
int GreenPin = 11; //Arduino driving pin for Green
int BluePin = 9; //Arduino driving pin for Blue
int dur;
Servo servo1;
Servo servo2;
void setColor(int red, int green, int blue)
{
analogWrite(RedPin, red);
analogWrite(GreenPin, green);
analogWrite(BluePin, blue);
}
void setup() {
pinMode(RedPin, OUTPUT); //Init Arduino driving pins
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
Serial.begin(9600);
pinMode(PIN_SERVO1, OUTPUT);
pinMode(PIN_SERVO2, OUTPUT);
servo1.attach(PIN_SERVO1);
servo2.attach(PIN_SERVO2);
}
void loop() {
//delay(5);
unsigned long t = millis();
long dur = t % 6000;
float servopos = 0 ;
float servopos2 = 0;
float r = 0;
float g = 0;
float b = 0;
if (dur > 0 && dur < 3000) {
servopos = map(dur, 0, 3000, 0 , 1800) / 10.;
servopos2 = map(dur, 0, 3000, 0 , 1800) / 10. ;
r = map(dur, 0, 3000, 0, 2350) / 10.;
g = map(dur, 0, 3000, 0, 2550) / 10.;
b = map(dur, 0, 3000, 0, 2550) / 10.;
servo1.write(servopos);
servo2.write(servopos2);
analogWrite(RedPin, r);
analogWrite(GreenPin, g);
analogWrite(BluePin, b);
else if (dur > 3000 && dur < 6000) {
servopos = map(dur, 6001, 9000, 1800 , 0)/10.;
servopos2 = map(dur, 6001, 9000, 1800 , 0)/10.;
r = map(dur, 6001, 9000, 2350, 0)/10.;
g = map(dur, 6001, 9000, 2550, 0)/10.;
b = map(dur, 6001, 9000, 2550, 0)/10.;
servo1.write(servopos);
servo2.write(servopos2);
analogWrite(RedPin, r);
analogWrite(GreenPin, g);
analogWrite(BluePin, b);
}
Serial.print("servo1: ");
Serial.print(servopos);
Serial.print(", servo2: ");
Serial.print(servopos2);
Serial.print(",red: ");
Serial.print(r);
Serial.print(",green: ");
Serial.print(g);
Serial.print(",blue: ");
Serial.print(b);
Serial.println();
}
Cependant après téléversement, le mouvement des servos est saccadé et les leds s'allument et s'éteignent progressivement mais uniquement en couleur verte quoi que je fasse... (j'ai testé les leds et autre et tous les composants du circuit sont bons).
Avez-vous une solution ?
Merci d'avance