Salve a tutti,
sono Tony e sono alle prime armi con Arduino.
Ho iniziato subito a creare un piccolo braccio meccanico collegato ad una penna in grado di creare delle semplici linee.
Uno dei problemi che ho dovuto affrontare (oltre alla scelta dei servi, giochi di forza,peso,gravita ecc ecc..) e' stato quello di fare eseguire dei movimenti di due servi contemporaneamente.
La necessita' di eseguire il movimento dei due servi contemporaneamente mi serve per far si che quando il braccio si allunga in orizzontale, la penna si alzi e si allinei verticalmente al terreno in modo tale da tracciare sempre una linea dritta nello spazio x e y.
Vediamo subito un esempio:
Il seguente codice di esempio serve a far muovere il primo servo da 0 gradi fino a 180 e il secondo servo da 0 gradi fino a 90 gradi.
for (int start1= 0; start1 <= 180; start1++)
{
MyServo1.write(start1);
delay(20);
}
for (int start2= 0; start2 <= 90; start2++)
{
MyServo2.write(start2);
delay(20);
}
Eseguendo il codice otterremo il movimento del primo servo e una volta completato, inziera' e terminera' il movimento del secondo servo.
Se volessimo farli muovere contemporaneamente e far si che il movimento del primo servo termini nello stesso istante del movimento del secondo servo, il codice precedente non va per niente bene.
Cercando sul forum potrete trovare molti esempi per l'utilizzo della funzione millis(), ma non sono sicuro che vada bene perche' i due servo devono eseguire movimenti diversi con gradi finali e/o di partenza anche diversi.
Aggirando altre soluzioni ho creato una funzione in grado da far muovere entrambi i servo per la stessa durata e quindi compiere entrambi i movimenti nello stesso periodo di tempo.
Ecco la mia funzione:
void Move2Servo(Servo MyServo1, Servo MyServo2, int end1, int end2)
{
for (int i= 0; 0 <= 100; i++++)
{
float degreeServo1 = (i * end1) / 100;
MyServo1.write(int(degreeServo1));
Float degreeServo2 = (i * end2) / 100;
MyServo2.write(int(degreeServo2));
delay(20);
}
}
Come potete vedere ha solo un ciclo sempre fisso che va da 0 a 100.
Il compito e' quello di prendere il valore percentuale del grado finale e applicarlo contemporaneamente ai due servi.
Con questa funzione ora e' possibile eseguire 2 movimenti per due servi con gradi di partenza e/o finali diversi nello stesso tempo (quindi contemporaneamente).
Spero che questa funzione puo' essere utile e magari ottimizzata.
Ha risolto il mio problema e spero possa risolverlo ad altri.
Grazie a tutti.
tony