Go Down

Topic: myservo.write() & myservo.writeMicrosecond() (Read 634 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy