Ciao a tutti,
come riportato nel post aperto ieri nella sezione hardware, dovrei realizzato un progetto per un cosplay basato su due servomotori. Nell'altro post chiedevo informazioni hardware, ma nel frattempo volevo portarmi avanti con circuito e codice.
Prima di passare ai sistemi di controllo, volevo settare la funzione loop che permetteva ai servo di passare da una "posizione 0" ad una "posizione 1". Essendo speculari (ovvero immaginateveli montati uno di fronte all'altro) gli angoli saranno diversi. Per semplicità, diciamo che la posizione 0 del servo1 corrisponde a 0° mentre quella del 2 a 180°. La posizione 1 di entrambi a 90°.
Con un semplice "servo.write()" ottengo il mio obiettivo. Non potendo regolare la velocità del servo, pensavo di usare un ciclo for. Il problema è che con la mia poca esperienza con Arduino, al momento riesco a fare due cicli for separati che scriveranno due angoli diversi ("i" ed "f"), ma naturalmente viene eseguito prima quello del servo 1, poi quello del servo 2. Io vorrei che partissero insieme. Come posso fare?
Qui riporto il codice che porta da posizione 0-->1, attende 5 secondi e torna indietro.
#include <Servo.h>
#define PIN_SERVO_1 9 // sx vista da dietro
#define PIN_SERVO_2 10 // dx vista da dietro
int attesa = 5000;
int singlestep = 15;
Servo servo1; // classe oggetto, la seconda parola è il nome di tale oggetto. Se due servo, crearne due con nomi diversi
Servo servo2;
void setup() {
servo1.attach(PIN_SERVO_1);
servo2.attach(PIN_SERVO_2);
}
void loop() {
ascesa();
delay(attesa);
discesa();
}
void ascesa(){
for(int i = 0; i <= 90; i++){ // sposta testina da 0 a 100 gradi
servo1.write(i);
delay(singlestep);
}
for(int f = 180; f >= 90 ; f--){ // sposta testina da 180 a 100 gradi
servo2.write(f);
delay(singlestep);
}
}
void discesa(){
for(int i = 90; i >= 0; i--){ // sposta testina da 100 a 0 gradi
servo1.write(i);
delay(singlestep);
}
for(int f = 90; f <= 180 ; f++){ // sposta testina da 180 a 100 gradi
servo2.write(f);
delay(singlestep);
}
}
Grazie mille!