Go Down

Topic: myservo.write() & myservo.writeMicrosecond() (Read 609 times) previous topic - next topic

AMBUSH

Ciao

Stavo giocando con un semplice servo motore usando lo sketch
Code: [Select]


#include <Servo.h>

Servo myservo; 

int angle = 0;


void setup()
{
  myservo.attach(9,550,6330);
}                                                           
void loop()
{
  for(angle = 0; angle < 180; angle +=1)
  {
    myservo.write(angle);
    delay(20);
  }
  for(angle = 180; angle >= 1; angle -=1)
{
  myservo.write(angle);
delay(20);
}
}


e fin qui tutto ok. Poi mi sono chiesto se era possibile far ruotare con velocità diversa l'elica a seconda se si va da 0 a 180 o viceversa.

Allora mi sono cimentato nell'usare il comado
Code: [Select]

myservo.writeMicroseconds(us)


e ovviamente qui sono sorti i primi problemi. Sì che ruotavano con velocità differenti ma avevano un comportamento anomalo. Arrivata a "fine corsa" l'elica invece di tornare subito dietro stava ferma diversi secondi.

e variando us ( argomento dentro write.Microseconds ) il servo andava a piccoli scatti vibrando notevolmente.

Perchè tale comportamento anomalo? Come risolvo?

Grazie

uwefed

Con myservo.write() dai come valore un angolo da 0 a 180 gradi che in linea di massima corrisponde al angolo di rotazione del servo.
Con myservo.writeMicrosecond() dai come valore il tempo in µsecondi del impulso dove 1000 corrisponde a 0 di myservo.write() e 2000 a 180.

Dovresti darci lo sketch con myservo.writeMicrosecond() per poterti dire qualcosa.

Ciao Uwe

AMBUSH

Praticamento lo sketch che ho usato è il seguente.
Ho dovuto scrivere myservo(9,550,6330) affinchè avessi una rotazione di 180 gradi.

E questo sketch funziona in modo anomali


Code: [Select]
#include <Servo.h>

Servo myservo; 

int angle = 0;


void setup()
{
  myservo.attach(9,550,6330);
}                                                           
void loop()
{
  for(angle = 0; angle < 180; angle +=1)
  {
    myservo.write(angle);
myservo.writeMicrosecond(700);   
    delay(20);
  }
  for(angle = 180; angle >= 1; angle -=1)
{
  myservo.write(angle);
myservo.writeMicrosecond(2000); 
delay(20);
}
}


Go Up