#include "ServoSweep.h"const int interval = 3000 ;const int inputButton = 12 ;const int servoPin = 13 ;unsigned long prev ;byte state ;// pin min max speed (bigger speed = slower movement ;ServoSweep servo1(servoPin, 10, 30, 50) ; // als je hier een 5e getal toevoegt, dan is dat getal het pinnummer van je puntstuk relais.void setup() { servo1.begin() ; <-- dit toevoegen voor elke motor}void loop() { servo1.sweep(); // de sweep moet continu aangeroepen worden if( digitalRead( inputButton ) ) servo1.setState( 1 ) ; // door setState aan te roepen met een 1 of een 0, kan je motor laten bewegen else servo1.setState( 0 ) ; }
Wat je niet mag doen in deze constructor is ook hardware dingen initialiseren. De constructor wordt namelijk uitgevoerd voordat de init() functie wordt uitgevoerd.
#include "ServoSweep.h"const int inputButton1 = 11 ; const int inputButton2 = 12 ; const int servoPin1 = 2 ;const int servoPin2 = 3 ;unsigned long prev ;byte state ;// pin min max speed (bigger speed = slower movement ;ServoSweep servo1(servoPin1, 0, 180, 20, 13) ; // led 13 is puntstuk outputServoSweep servo2(servoPin2, 0, 180, 50) ; void setup() { Serial.begin( 115200 ) ; pinMode( inputButton1, INPUT_PULLUP ) ; pinMode( inputButton2, INPUT_PULLUP ) ; servo1.begin() ; servo2.begin() ;}void loop() { servo1.sweep(); // de sweep moet continu aangeroepen worden servo2.sweep(); // de sweep moet continu aangeroepen worden char b = Serial.read() ; if( digitalRead( inputButton1 ) ) servo1.setState( 1 ) ; // door setState aan te roepen met een 1 of een 0, kan je motor laten bewegen else servo1.setState( 0 ) ; if( digitalRead( inputButton2 ) ) servo2.setState( 1 ) ; // door setState aan te roepen met een 1 of een 0, kan je motor laten bewegen else servo2.setState( 0 ) ; }
Lijkt slim maar voor een eenvoudig stukje hardware als een servo die alleen maar een tussen 1 en 2 mseconde regelbaar pulsje nodig heeft is dat een olifantengeweer gebruiken voor een veldmuis.
ISR(TIMER1_COMPA_vect) { // set at every 5us static uint16_t counter = 0 ; if( counter == 0 ) { PORTB |= ( 1 << motor1.pin ) | ( 1 << motor2.pin ) | ( 1 << motor3.pin ) ; // turn on all pwm pins } if( counter == motor1.pos ) PORTB &= ~ (1 << motor1.pin ) ; // turn them off when it is their time if( counter == motor2.pos ) PORTB &= ~ (1 << motor2.pin ) ; if( counter == motor3.pos ) PORTB &= ~ (1 << motor3.pin ) ; counter ++ ; if( counter == 3600 ) counter = 0 ;}
Dat moet sowieso werken omdat je dan de pulsentrein stopt. Ik kan dat wel toevoegen aan de library. Dan hoef jij alleen maar de library weer te update Bas
#include "ServoSweep.h"#include "debounceClass.h"const int pin5 = 5 ;const int pin6 = 6 ;Debounce btn1( pin5 ) ; Debounce btn2( pin6 ) ;unsigned long prevTime = 0 ;byte state1 = 1;byte state2 = 1;ServoSweep servo1(3, 10, 180, 20, 1, 13 ); // de 1 is nieuw en geeft aan dat we detach willen gebruikenServoSweep servo2(4, 6, 10, 1, 20 );unsigned long prev ;void setup() { Serial.begin(115200) ; Serial.println("hello world");}void loop() { unsigned long currTime = millis() ; if( currTime > prevTime ) { prevTime += 20 ; // debounce interval is 20ms btn1.debounceInputs(); btn2.debounceInputs(); } uint8_t btnState = btn1.readInput() ; if( btnState == RISING ) { servo1.setState( 1 ); Serial.println("motor 1 is true") ; } if( btnState == FALLING ) { servo1.setState( 0 ); Serial.println("motor 1 is false") ; } btnState = btn2.readInput() ; if( btnState == RISING ) { servo1.setState( 1 ); Serial.println("motor 2 is true") ; } if( btnState == FALLING ) { servo1.setState( 0 ); Serial.println("motor 2 is false") ; } servo1.sweep( ); servo2.sweep( );}
hello worldmotor 1 is truemotor 2 is truemotor 1 is falsemotor 1 is truemotor 2 is falsemotor 2 is true
if( turnOff ) servo.attach( servoPin ) ;
if( ( pos == servoMax || pos == servoMin ) && turnOff == 1 ) servo.detach( ) ;