Ich möchte, wenn der RGB-Taster gedrückt wurde, eine mp3 abgespielt wird.
In der Zeit soll der RGB-Taster blinken und nicht mehr blinken, wenn die mp3 abgespielt wurde.
Einzel läuft alles, aber bei alles zusammen, komm ich einfach nicht weiter.
Ab der Taster Abfrage hängt es.
Das ist der "alles zusammen code" der nicht geht:``
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
int rot = 5;
int gruen = 6;
int blau = 3;
//Farbe vom Taster festlegen
int rotHell = 26;
int gruenHell = 33;
int blauHell = 0;
int dunkel = 0;
unsigned long lastMillis;
unsigned long newMillis = millis() - lastMillis;
int Taster = 13; //Taster an Pin 13.
int Tasterstatus = 0; //Das Wort „tasterstatus“ steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der Taster gedrückt ist oder nicht.
SoftwareSerial mySoftwareSerial(10, 11); // TX, RX
DFRobotDFPlayerMini myDFPlayer;
void setup() {
pinMode(Taster, INPUT);
pinMode(blau, OUTPUT);
pinMode(gruen, OUTPUT);
pinMode(rot, OUTPUT);
mySoftwareSerial.begin(9600);
Serial.begin(115200);
myDFPlayer.begin(mySoftwareSerial);
}
void loop() {
Tasterstatus = digitalRead(Taster); //Hier wird der Pin13 ausgelesen. Das Ergebnis wird unter der Variable „TasterstatusViolet“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert
if (Tasterstatus == HIGH) //Ist der Taster gedrückt
{
newMillis = millis() - lastMillis;
if (newMillis >= 1000) {
lastMillis = millis();
}
myDFPlayer.volume(27); //Lautstärke von bis (0~30).
myDFPlayer.EQ(DFPLAYER_EQ_BASS);//Equalizer: NORMAL; POP; ROCK; JAZZ; CLASSIC; BASS
myDFPlayer.playMp3Folder(1);
if ( (newMillis < 500) || ( (newMillis > 125) && (newMillis < 155)) || ( (newMillis > 250) && (newMillis < 280)))
{
analogWrite(rot, rotHell);
analogWrite(gruen, gruenHell);
analogWrite(blau, blauHell);
}
else
{
analogWrite(rot, dunkel);
analogWrite(gruen, dunkel);
analogWrite(blau, dunkel);
}
}
else
{
analogWrite(rot, rotHell);
analogWrite(gruen, gruenHell);
analogWrite(blau, blauHell);
}
}
Ich habe dein Vorschlag ausprobiert.
Kein blinken, nur das mp3 wird ausgelöst.
Nach dem zweiten mal auslösen, gibt es danach keine Reaktion mehr.
Nur der LED auf dem ArdunioUno leuchtet, solange der Taster gedrückt gehalten wird.
Ich würde dazu den Busy-Pin abfragen (Bild rechts oben):
Der Busy-Pin ist LOW solange ein File abgespielt wird und HIGH (3,3 Volt), wenn nichts spielt (wenn also das mp3 zu Ende ist).
In der Bibliothek gibt es zwar auch die Möglichkeit über die Serielle Schnittstelle abzufragen, ob gerade gespielt wird oder nicht, allerdings führt das meist zu hörbaren Störungen der Audiowiedergabe.
Diese while-Konstrukte einem Anfänger als Lösung anzubieten, halte ich für grenzwertig.
Sie mögen zwar im einem konkreten Fall Erfolg zeigen, leiten aber die Erkenntnis in die falsche Richtung: hin zu blockierender Programmgestaltung.