Neen. Als je de snelheid waarmee de servo beweegt wilt beïnvloeden wordt het en stuk complexer. Om dat toe te passen moet je de materie goed begrijpen en dat is lastig via dit medium...
... servo.write(hoek); // update de servo hoek if (hoek == 180) { digitalWrite(led, 1); // LED aan } else { digitalWrite(led, 0); // LED uit } // toevoegen delay (1000); // geef servo 1 sec om te verdraaien voordat indrukken knop weer effect heeft // }
Dit heeft geen zin... de servo wacht nergens op, het enige wat je hiermee bereikt is dat de knop slecht reageert.
en in iedere stap wordt 15 msec gepauzeerd.
... Nu nog iets verzinnen dat de stand van de servo onthouden wordt bij een stroomonderbreking.
#include <Servo.h>#include <EEPROM.h> const int servoPin = 8; // Servo pinconst int buttonPin = 9; // Pushbutton pinconst int LEDpin = 13; // LED pin op Arduino pcbconst byte del = 100; // vertraging servoint directionState = 0; Servo myservo; byte pos;// -------------------------------------------------void draaiservo (byte hoek) { myservo.write(hoek); EEPROM.write(1,hoek); // schrijf servopositie naar adres 1 van de eeprom delay(del); // wacht op servo}// -------------------------------------------------void setup() { myservo.attach(servoPin); pinMode (buttonPin,INPUT); pos = constrain (EEPROM.read(1), 0, 180); // lees oude servopositie uit adres 1 van de eeprom draaiservo(pos); // draai naar oude positie binnen bereik 0..180° }// -------------------------------------------------void loop(){ digitalWrite (LEDpin, directionState); // LED aan of uit if (digitalRead (buttonPin) == HIGH) // alleen als knop ingedrukt if (directionState == 0) { // stand is 0, draai servo naar 180° for (pos = 0; pos < 180; pos += 1) draaiservo(pos); directionState = 1; // stand is nu 1 (180°), volgende keer naar 0° draaien } else { //(directionState == 1) // stand is 1 (=180°), draai servo naar 0° for (pos = 180; pos>=1; pos -=1) draaiservo(pos); directionState = 0; // stand is nu 0, volgende keer naar 180° draaien }}
... Is het misschien ook te regelen dat hij ook in de 180 graden stand na een contactherstel en een druk op de knop langzaam naar de 0 gaat?
#include <Servo.h>#include <EEPROM.h> const int servoPin = 8; // Servo pinconst int buttonPin = 9; // Pushbutton pinconst int LEDpin = 13; // LED pin op Arduino pcbconst byte del = 100; // vertraging servoint directionState;Servo myservo; byte pos;// -----------------------------------[ subroutines ]--------------void draaiservo (byte hoek) { myservo.write(hoek); // draai servo naar opgegeven hoek EEPROM.write(1,hoek); // schrijf servohoek naar adres 1 van de eeprom delay(del); // wacht op servo}// -----------------------------------[ init ]--------------void setup() {byte oudestand; pinMode (servoPin,OUTPUT); pinMode (buttonPin,INPUT); pinMode (LEDpin,OUTPUT); myservo.attach(servoPin); oudestand = constrain(EEPROM.read(1), 0, 180); // lees oude servopositie uit adres 1 van eeprom for (pos = oudestand; pos = 0; pos--) // draai servo langzaam naar 0° draaiservo(pos); directionState = 0; }// ------------------------------------[ hoofdprog ]-------------void loop(){ digitalWrite (LEDpin, directionState); // LED aan of uit if (digitalRead (buttonPin) == HIGH) // alleen als knop ingedrukt if (directionState == 0) { // stand is 0, draai servo naar 180° for (pos = 0; pos = 180; pos++) draaiservo(pos); directionState = 1; // stand is nu 1 (180°), volgende keer naar 0° draaien } else { //(directionState == 1) // stand is 1 (=180°), draai servo naar 0° for (pos = 180; pos = 0; pos--) draaiservo(pos); directionState = 0; // stand is nu 0, volgende keer naar 180° draaien }}// -------------------------------------- [ einde ] ------------