Salve ragazzi,
stavo scrivendo uno sketch per porvare i miei servomotori e per iniziare a programmare il mio braccio robotico.
Avevo una domanda però: se utilizzo troppe volte attach() e detach(), c'è qualchè problema? nel senso, si possono rovinare i motori o arduino? oppure ci sono altri problemi?
Lo sketch è questo:
// ** Braccio robotico **
//M:includo le librerie utili
#include<Servo.h>
//M: dichiaro la costante per la pausa e per i pin dei servi
#define pausa 400
#define pin_base 3
#define pin_spalla 5
#define pin_gomito 6
#define pin_polso 9
#define pin_mano 10
//M: creo gli oggetti dei 5 servi
Servo base; //A: servomotore alla base del braccio
Servo spalla; //A: servomotore iniziale del braccio
Servo gomito; //A: servomotore a metà braccio
Servo polso; //A: servomotore che gira la mano
Servo mano; //A: servomotore che apre e chiude la mano
//M: dichiaro le variabili utili
//M: dichiaro i prototipi delle funzioni e delle procedure
void azzera_braccio();
void prova_servo(Servo motore);
void setup()
{
Serial.begin(9600);
}
void loop()
{
int scelta;
if(Serial.available())
{
scelta=Serial.read()-48;
Serial.println(scelta);
switch(scelta)
{
case 1: azzera_braccio(); delay(pausa); break;
case 2: prova_servo(base, pin_base); delay(pausa); break;
case 3: prova_servo(spalla, pin_spalla); delay(pausa); break;
case 4: prova_servo(gomito, pin_gomito); delay(pausa); break;
case 5: prova_servo(polso, pin_polso); delay(pausa); break;
case 6: prova_servo(mano, pin_mano); delay(pausa); break;
}
}
}
void azzera_braccio()
{
//M:dichiaro la variabile per la posizione dei servi
int pos=0;
delay(pausa/2);
//M:posiziono i servi su pos
base.attach(pin_base);
base.write(pos);
delay(pausa);
base.detach();
spalla.attach(pin_spalla);
spalla.write(pos);
delay(pausa);
spalla.detach();
gomito.attach(pin_gomito);
gomito.write(pos);
delay(pausa);
gomito.detach();
polso.attach(pin_polso);
polso.write(pos);
delay(pausa);
polso.detach();
mano.attach(pin_mano);
mano.write(pos);
delay(pausa);
mano.detach();
}
void prova_servo(Servo motore, int pin)
{
//M: dichiaro la variabile pe rla posizione
int pos=0;
motore.attach(pin);
for(pos=1;pos<=180;pos++)
{
motore.write(pos);
delay(5);
}
motore.detach();
}
Come potete vedere ho usato varie volte attach() e detach() perchè altrimenti i servi iniziavano a vibrare e non smettevano più, se non durante il posizionamento.
Con detach e attach ho risolto questo problema, ma non avendoli mai usati, ho vari dubbi.
Grazie, Salvatore