Frage von mokkaistlecker, 30

Arduino Synthesizer programmierung Problem?

Moin Moin Ich habe einen Synthesizer mit hilfe von einem Arduinobord Programmiert(Mega 2560).Das Problem ist nich der Synthesizer selber diesen habe ich schon fertig gestellt . Das Problem ist eine Modification welche ich einbauen will und zwar besteht der Synthesizer aus 8 Tastern (C,D,E,F,G,A,H,C) an jedem Taster ist eine Led . Die Leds sollen nun als spiel anleitung fungieren also es leutet immer die Led bei dem Taster welcher gedrückt werden muss um ein bestimmtes Musicstück zu spielen. Außerdem soll man noch die zeit einstellen können wie lange eine Led leuchtet so das man weiß wie lange man drücken muss .DAs Problem hierbei ist das man nicht einfach die Lampen mit Delay laufen lassen kann weil dies das gesammte Programm anhalten (Verlangsamen ) würde . Es sollen auch weiterhin alle Taster betätiegt werden können wärend die Leds Leuchten.Ich bitte um Tipps oder Vorschläge habe schon viele verschiedene möglichkeiten ausprobiert brauche keine fertiegen Quelltext .

Hier ein Ausschnitt meines Programmes:

if(buttonStateC == 1){ tone(5, notesC);
} else if(buttonStateD == 1){ tone(5, notesD);
} else if(buttonStateE == 1){ tone(5, notesE);
} else if(buttonStateF == 1){ tone(5, notesF);
} else if(buttonStateG == 1){ tone(5, notesG);
} else if(buttonStateA == 1){ tone(5, notesA);
} else if(buttonStateH == 1){ tone(5, notesH);
} else if(buttonStateCC == 1){ tone(5, notesCC); }
else{ noTone(5); }

Antwort
von nikolaiki, 6

Zuerst erstellst du eine Tabelle, in der steht welche Lampe wie lange zu leuchten hat. 

Dann programmierst du eine Endlosschleife und fragst jedes mal zu Beginn den Timer ab und ziehst den Zeitwert von der Tabelle ab. Fällt der Wert unter Null schaltest du die Lampe ab. 

Eine ISR wäre vermutlich nicht der nächstliegende Ansatz. Dann müsste man den Timer auf das nächste anstehende Ereignis programmieren, das waere aber etwas umständlich, weil bei jedem Tastendruck die Tabelle neu berechnet werden muss.

Antwort
von Nube4618, 21

Eine Lösung wäre das über eine ISR (Interrupt Service Routine) zu lösen. Auf arduino.cc gbts Beispiele zu dem Thema. Geht dann schon etwas ans eingemachte, aber lohnt sich!

Kommentar von mokkaistlecker ,

Danke aufjedenfall schonmal gucke mir das mal an:D

Keine passende Antwort gefunden?

Fragen Sie die Community