Ich habs mal geändert, hatte aber irgendwie keine Auswirkungen.
Nachdem ich jedoch eine Pulldown-Widerstand von 10k in die Schaltung eingefügt habe, funktioniert es nun
Durch eine Erweiterung funktioniert nun auch vor- und zurück schalten:
const int inputPin_0 = 2;
const int inputPin_1 = 3;
const int outputPin = 13;
volatile int state=1; // Variablen, die von Interruptroutinen angefasst werden, sollten "volatile" deklariert werden
volatile unsigned long lastTime=0; // Zeitpunkt der letzten steigenden Flanke, nötig zum Entprellen
void setup() {
pinMode(outputPin, OUTPUT);
pinMode(inputPin_0, INPUT);
pinMode(inputPin_1, INPUT);
attachInterrupt(0, keyPressed_0, RISING); // 0 ist der Interrupt für Pin 2, bei jeder steigenden Flanke wird keyPressed_0() aufgerufen
attachInterrupt(1, keyPressed_1, RISING); // 1 ist der Interrupt für Pin 2, bei jeder steigenden Flanke wird keyPressed_1() aufgerufen
}
void keyPressed_0(){ // state hochzählen, falls mindestens 50ms seit der letzten Flanke vergangen sind
unsigned long now = millis();
if (now - lastTime > 100){ // entprellen
state++;
if (state > 4){state=1;}
}
lastTime=now;
}
void keyPressed_1(){ // state hochzählen, falls mindestens 50ms seit der letzten Flanke vergangen sind
unsigned long now = millis();
if (now - lastTime > 100){ // entprellen
state--;
if (state < 1){state=4;}
}
lastTime=now;
}
void loop(){
switch(state) {
case 1: led_1();
break;
case 2: led_2();
break;
case 3: led_3();
break;
case 4: led_4();
break;
//hier weitere "case" fälle ergänzen
default:
state = 1;
break;
}
}
void led_1()
{
digitalWrite(outputPin, HIGH);
delay(1000);
digitalWrite(outputPin, LOW);
delay(1000);
}
void led_2()
{
digitalWrite(outputPin, HIGH);
delay(500);
digitalWrite(outputPin, LOW);
delay(500);
}
void led_3()
{
digitalWrite(outputPin, HIGH);
delay(100);
digitalWrite(outputPin, LOW);
delay(100);
}
void led_4()
{
digitalWrite(outputPin, HIGH);
delay(50);
digitalWrite(outputPin, LOW);
delay(50);
digitalWrite(outputPin, HIGH);
delay(500);
digitalWrite(outputPin, LOW);
delay(500);
}
Nun habe ich aber ein weiteres Problem, die Schaltung soll in ein RC-Modell mit Servo-Ausgängen. Dachte mir ich könnte die 5V des Servo-Ausgang schalten, jedoch ändert sich dann nur die Pulsbreite des PWM-Signals (Hätte mal vorher darüber nachdenken sollen ;))
Wie kann ich das PWM-Signal auswerten?
Folgendes soll passieren:
Ich habe einen 3-Stufen-Schalter (Bei Mittelstellung keine Aktion ausführen, Impulslänge zwischen 1,3 und 1,7ms).
Beim Impulslängen kleiner 1,3ms wird zurückgeschaltet (Schalterstellung unten), bei Impulslängen größer 1,7ms wird weitergeschaltet (Schalterstellung oben).
Werden hierfür beide Interrupt-Eingänge benötigt, oder kann das auch anderst realisiert werden?