in een void loop()
Hallo Ron,Een antwoord op de vraag of Arcomora ook dat gedrag heeft. Antwoord: Nee.mvg spock
#include <Servo.h>Servo servoL ;Servo servoR ;// LEFT SERVOconst int servoPinL = 3 ;const int servoSpeedL = 20 ;const int servoMinL = 20 ; const int servoMaxL = 100 ; // RIGHT SERVOconst int servoPinR = 4 ;const int servoSpeedR = 30 ;const int servoMinR = 50 ; const int servoMaxR = 150 ; enum servoStates { moveRight , moveLeft ,} ;unsigned long currentTime ;byte signal1 ;byte signal2 ;byte servoPosL = 90 ;byte servoPosR = 90 ;char serialByte ;void setup() { cli() ; servoL.write( servoPosL ) ; // send both servo's to middle servoR.write( servoPosR ) ; servoL.attach( servoPinL ) ; servoR.attach( servoPinR ) ; Serial.begin( 115200 ) ; sei() ; Serial.println(" hello world ") ;}void loop() { currentTime = millis() ; if( Serial.available() > 0 ) { serialByte = Serial.read() ; } servoLeft() ; servoRight() ; }void servoLeft () { static unsigned long timeToRun ; static byte state = moveLeft, prevPos; if( currentTime > timeToRun ) { timeToRun = currentTime + servoSpeedL ; switch( state ) { case moveRight: if( servoPosL < servoMaxL ) servoPosL ++ ; if( serialByte == 'L' ) { serialByte = 0 ; state = moveLeft ; Serial.println("moving left") ; } break ; case moveLeft: if( servoPosL > servoMinL ) servoPosL -- ; if( serialByte == 'L' ) { serialByte = 0 ; state = moveRight ; Serial.println("moving right") ; } break ; } if( servoPosL != prevPos ) { prevPos = servoPosL ; Serial.println( servoPosL ) ; servoR.write( servoPosL ) ; } }}void servoRight () { static unsigned long timeToRun ; static byte state = moveLeft, prevPos; if( currentTime > timeToRun ) { timeToRun = currentTime + servoSpeedR ; switch( state ) { case moveRight: if( servoPosR < servoMaxR ) servoPosR ++ ; if( serialByte == 'R' ) { serialByte = 0 ; state = moveRight ; Serial.println("moving left") ; } break ; case moveLeft: if( servoPosR > servoMinR ) servoPosR -- ; if( serialByte == 'R' ) { serialByte = 0 ; state = moveRight ; Serial.println("moving right") ; } break ; } if( servoPosR != prevPos ) { prevPos = servoPosR ; Serial.println( servoPosR ) ; servoR.write( servoPosR ) ; } }}
void loop() { currentTime = millis() ; if( Serial.available() > 0 ) { serialByte = Serial.read() ; } servoLeft() ; servoRight() ; }
moving left999897969594939291908988878685848382818079787776757473moving left7271149701486914768671466614565641446314362611426014159
Serial.println( servoPosR ) ;servoR.write( servoPosR ) ;
Als ik de code doorkijk, met de kennis die ik heb, mis ik ergens dat afhankelijk van de letter die je gebruikt een actie wordt gedaan.Ik vermoed dat het hier gedaan moet worden, omdat hier de serial line wordt gelezen.Zie ik iets over het hoofd?
if( serialByte == 'R' ) { serialByte = 0 ; state = moveLeft ; Serial.println("moving left") ;}
#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() {}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 ) ; }