Ich versuche einige Anfänger Arduino Programmierung.Pin Interrupt ist inkonsistent
Die Aufgabe ist es, das Board, das ich habe (ESP8266) etwas Musik spielen und dann sollte die Musik aufhören, wenn ich die Taste drücke, und dann neu starten, wenn ich es erneut drücke.
Hier ist mein Code,
#include "pitches.h" // contains frequencies for notes
#define PIN_BUTTON 0 // the button
#define PIN_BUZZER 13 // the digital pin the Buzzer is attached to
bool stop = false; // button pressed
void play_note(int freq){
if (freq > 0 && !stop){
analogWrite(PIN_BUZZER, 512);
analogWriteFreq(freq);
} else {
analogWrite(PIN_BUZZER, 0);
}
}
void stopMusic(){
stop = !stop;
play_note(0);
}
void setup() {
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_BUTTON, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_BUTTON), stopMusic, RISING);
}
void loop() {
// intro
play_note(NOTE_E7);
delay(110);
play_note(NOTE_E7);
delay(220);
play_note(NOTE_E7);
delay(220);
play_note(NOTE_C7);
delay(110);
play_note(NOTE_E7);
delay(220);
play_note(NOTE_G7);
delay(440);
play_note(NOTE_G6);
delay(440);
}
Das Problem ist, dass die Schaltfläche inkonsistent wird. Manchmal wird die Musik beim Drücken sofort gestoppt. Zu anderen Zeiten wird es weiterspielen und ich muss es ein- oder zweimal mehr drücken. Wenn ich die Musik neu starten möchte, startet sie manchmal, sobald ich die Taste drücke, aber manchmal muss ich sie zweimal drücken, um die Musik wieder hochzuladen. Ich weiß nicht, was das verursacht. Vorschläge?
Arduino ist nicht C. – Olaf