Nu is debounce niet zon probleem hoor, daar moet ik wel uitkomen, op meerdere you tube films bespreken ze servo en bedienen met joystick en daar gebruiken ze button 12 voor, nu kan ik daar nu even niet in omdat de arduino weg gewerkt zit in de movinghead, om een beeld te krijgen er is een filmje van deze movingheads op .
Ik gebruik 3 cases, 1 in case0 om led aan te zetten, in case1 om de movinghead met joystick te bedienen en in laatste case 2, dat hij automatisch iets doet, ik heb de sketch net aangepast zoals het zou moeten zijn.
Nu werkt hij eigenlijk naar behoren, echter in CASE2 probeer ik ook de While functie te gebruiken om uit deze case te komen, dat werkt wel voor Case 1 waar we de handbediening hebben maar niet in Case 2, nu komt dat waarschijnlijk omdat er delays worden gebruikt, deze vind echt lastig aanpassen omdat deze in veel sketches word gebruikt bij servo's, je ziet nauwelijk servos die werken met millis.
Maar wat gaat er hier fout? of hoe kunnen we deze onderbreken, blijft immers in de laatste case hangen. Om een indruk te krijgen is hier een filmpje https://www.youtube.com/watch?v=ZWKkUnCbfYw
De code zoals hij er nu uitziet is als volgt en ik zal zo even zorgen dat er deze week koffie gezet kan worden ha, komt goed dank je wel
#include <Servo.h>
const int buttonPin = 12; // the pin that the pushbutton is attached to
const int ledPin = 11; // the pin that the LED is attached to
Servo servo1;
Servo servo2;
int joyX = 0;
int joyY = 1;
int servoVal;
int pos = 0; // variable
int pos1 = 0; // variable
int buttonPushCounter1 = 2; // counter for the number of button presses. Start at 0 (will loop around first)
bool buttonState1;
void setup() {
Serial.begin(9600);
Serial.println("Start");
servo1.attach(9);
servo2.attach(10);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
buttonState1 = false;
}
void loop() {
int buttonValue = digitalRead(buttonPin);
if (buttonValue == LOW)
{
if (buttonState1 == false) {
buttonPushCounter1++;
if (buttonPushCounter1 == 3) {
buttonPushCounter1 = 0;
}
buttonState1 = true;
}
switch (buttonPushCounter1) {
case 0:
analogWrite(ledPin, 30); // zet de led aan, geef waarde mee in 0 t/m 254
Serial.println("zet de led aan");
break;
case 1:
do {
Serial.println("hier gaat joystick aan voor handbediening");
servoVal = analogRead(joyX);
servoVal = map(servoVal, 0, 1023, 0, 180);
servo1.write(servoVal);
servoVal = analogRead(joyY);
servoVal = map(servoVal, 0, 1023, 0, 180);
servo2.write(servoVal);
} while (digitalRead(buttonPin) == HIGH);
Serial.println("Einde case 1");
break;
case 2:
Serial.print("naar links");
for (pos = 40; pos <= 180; pos += 1) { // naar boven
// in steps of 1 degree
servo1.write(pos);
delay(20);
}
Serial.print("naar rechts");
for (pos = 180; pos >= 40; pos -= 1) { // naar beneden pos 40
servo1.write(pos);
delay(20);
}
Serial.println("einde case 2");
break;
}
}
else {
buttonState1 = false;
}
}