if Abfrage - LED geht nicht mehr aus trotzt Anweisung

Hallo Community,

ich habe hier mein erstes Projekt mit meinem Arduino UNO vor mir. Ich habe davor noch keine Programme geschrieben und bin dafür eigentlich ganz gut voran gekommen. Bis jetzt.

Im Code anbei funktioniert alles bis zum Punkt Alarmanlage. Es werden bei verschiedenen Aktionen meine RGB LEDs angesteuert. Und eine "normale" LED. Durch einen Taster soll meine Funktion "Alarm" aktiviert werden.

Wenn ich nun Abfrage, das bei Alarm == 1 meine LEDs kurz blau leuchten sollen geht nichts mehr. Die LEDs leuchten zwar blau aber sie gehen nicht mehr aus und auch der Taster reagiert dann nicht mehr. Er lässt die Funktion nicht mehr abschalten. Jetzt sitze ich an dieser "Kleinigkeit" seit 2 Tagen und finde keinen Fehler.

Ich bitte um Tipps und Hilfe. Vielen Dank :slight_smile:

CODE:

#include <SPI.h>

//SdFat Librarie hinzufügen
#include <SdFat.h>
#include <SdFatUtil.h> 

//MP3 Shield Library hinzufügen
#include <SFEMP3Shield.h>

//Librarie Objekte erstellen und benennen
SFEMP3Shield MP3player;
SdFat sd;
SdFile file;

byte temp;
byte result;
char title[30];

//Konstante Variablen

int sensitivity = 500; // Schwelle für eine Aktion übers Mikrofon
int threshold= 1020; // Schwelle für Aktion über Vibration
int audioPin = A0; // Mikrofon an Pin A0 angeschlossen
int vibePin = A1; // Vibration an Pin A1 angeschlossen
int counter = 0; //Counter wird auf 0 gesetzt bzw. deaktiviert

const int aledPin = 10; // Rote LED der Alarmanlage an Pin 10 angeschlossen
const int rotPin = 3; // Rote LED an Pin 3 angeschlossen
const int gruenPin = 4; // Gruene LED an Pin 4 angeschlossen
const int blauPin = 5; // Blaue LED an Pin 5 angeschlossen

//Deklaration für Alarmtaster

int alarmPin = 16;    //Taster zum Alarm aktivieren an Pin 16/A2 angeschlossen
int ledOn = LOW;       // the current state of the output pin
int reading;           // aktuelles Auslesen vom alarmPin
int previous1 = LOW;  // vorher ausgelesene Daten von alarmPin
int alarm = 0;
long time = 0;
long debounce = 200;

void setup() {
Serial.begin(115200);

//MP3 Player Shield inkl. SD booten
result = sd.begin(SD_SEL, SPI_HALF_SPEED);
result = MP3player.begin();

// Festlegen der Ein- und Ausgänge 
pinMode(aledPin, OUTPUT); //Setzt die AlarmLED als Ausgang
pinMode(blauPin, OUTPUT); //Setzt den LEDPin als Ausgang
pinMode(rotPin, OUTPUT); //Setzt den LEDPin als Ausgang
pinMode(gruenPin, OUTPUT); //Setzt den LEDPin als Ausgang
pinMode(audioPin, INPUT); //Setzt den MikrofonPin als Eingang
pinMode(alarmPin, INPUT); //Setzt den Taster für den Alarm als Eingang

analogWrite(blauPin, 0);
analogWrite(rotPin, 0);
analogWrite(gruenPin, 0);
}

void loop() {

int r;
randomSeed(millis()); //Verwendet millisekunden seit Programmstart als Basis für die Zufallszahl
r = random (1, 3);

int soundWave = analogRead(audioPin);
int vibeWave = analogRead(vibePin);

//-----------------------------------------------------------------------
// Schreien erkennen und zufällige Datei 1-9 abspielen
if ((soundWave < sensitivity) && (alarm == 0)) {
//MP3 Shield spielt Track
result = MP3player.playTrack(r);
}

//-----------------------------------------------------------------------
// Bewegung/Rütteln erkennen und zufällig Datei 1-9 abspielen
if ((vibeWave > threshold) && (alarm == 0)) {
//MP3 Shield spielt Track
result = MP3player.playTrack(r);
}

//-----------------------------------------------------------------------
// Abfragen ob die Datei abgespielt wird und dementsprechen LEDs steuern
if ((MP3player.isPlaying()) && (alarm == 0)) {
 analogWrite(rotPin, 255);
 counter = 1;
}else {
 analogWrite(rotPin, 0);
}

//------------------------------------------------------------------------
// Verabschiedung starten wenn keine Aktion mehr kommt
if ((counter > 0) && (alarm == 0)) {
 counter++;
}
if (counter == 20000) {
 counter = 0;
 result = MP3player.playTrack(2);
 analogWrite(gruenPin, 255);
 delay(1000);
 analogWrite(gruenPin, 0);
}

//------------------------------------------------------------------------
// Taster für Alarmaktivierung
 reading = digitalRead(alarmPin);
 
 if (reading == HIGH && previous1 == LOW && millis() - time > debounce) {
   ledOn = !ledOn;
   time = millis();
   alarm = !alarm;
 }
 digitalWrite(aledPin, ledOn);
 previous1 = reading;
 
//------------------------------------------------------------------------
// Alarmanlage

if (alarm == 1) {
analogWrite(blauPin, 255);
delay(2000);
analogWrite(blauPin, 0);
}
}

Sie sollten Ihren Code zwischen Code-Tags gesetzt </>. Auch können Sie auf sholud wirklich ins Englische übersetzt. Die meisten von uns kein Deutsch sprechen

In English:-
I have my first project with my Arduino UNO before me . I have previously written no programs and am in favor of actually come quite good progress . Until now.

The code attached everything works to the point alarm . There are my RGB controlled LEDs for various actions . And a "normal" LED . Through a switch to my "Alarm" function can be activated.

When I query that should my LEDs light blue short in alarm == 1 is no more. Although the lights are blue , but they no longer go out and the button no longer responds . He can no longer switch off the function . Now I'm sitting on this " little thing " for 2 days and find no error .

I ask for advice and help . Many thanks :slight_smile:

#include <SPI.h>

//SdFat Librarie hinzufügen
#include <SdFat.h>
#include <SdFatUtil.h>

//MP3 Shield Library hinzufügen
#include <SFEMP3Shield.h>

//Librarie Objekte erstellen und benennen
SFEMP3Shield MP3player;
SdFat sd;
SdFile file;

byte temp;
byte result;
char title[30];

//Konstante Variablen

 int sensitivity = 500; // Schwelle für eine Aktion übers Mikrofon
 int threshold= 1020; // Schwelle für Aktion über Vibration
 int audioPin = A0; // Mikrofon an Pin A0 angeschlossen
 int vibePin = A1; // Vibration an Pin A1 angeschlossen
 int counter = 0; //Counter wird auf 0 gesetzt bzw. deaktiviert
 
 const int aledPin = 10; // Rote LED der Alarmanlage an Pin 10 angeschlossen
 const int rotPin = 3; // Rote LED an Pin 3 angeschlossen
 const int gruenPin = 4; // Gruene LED an Pin 4 angeschlossen
 const int blauPin = 5; // Blaue LED an Pin 5 angeschlossen

//Deklaration für Alarmtaster

 int alarmPin = 16;    //Taster zum Alarm aktivieren an Pin 16/A2 angeschlossen
 int ledOn = LOW;       // the current state of the output pin
 int reading;           // aktuelles Auslesen vom alarmPin
 int previous1 = LOW;  // vorher ausgelesene Daten von alarmPin
 int alarm = 0;
 long time = 0;
 long debounce = 200;

void setup() {
 Serial.begin(115200);
 
 //MP3 Player Shield inkl. SD booten
 result = sd.begin(SD_SEL, SPI_HALF_SPEED);
 result = MP3player.begin();
 
 // Festlegen der Ein- und Ausgänge
 pinMode(aledPin, OUTPUT); //Setzt die AlarmLED als Ausgang
 pinMode(blauPin, OUTPUT); //Setzt den LEDPin als Ausgang
 pinMode(rotPin, OUTPUT); //Setzt den LEDPin als Ausgang
 pinMode(gruenPin, OUTPUT); //Setzt den LEDPin als Ausgang
 pinMode(audioPin, INPUT); //Setzt den MikrofonPin als Eingang
 pinMode(alarmPin, INPUT); //Setzt den Taster für den Alarm als Eingang

 analogWrite(blauPin, 0);
 analogWrite(rotPin, 0);
 analogWrite(gruenPin, 0);
}

void loop() {

 int r;
 randomSeed(millis()); //Verwendet millisekunden seit Programmstart als Basis für die Zufallszahl
 r = random (1, 3);

 int soundWave = analogRead(audioPin);
 int vibeWave = analogRead(vibePin);

 //-----------------------------------------------------------------------
 // Schreien erkennen und zufällige Datei 1-9 abspielen
 if ((soundWave < sensitivity) && (alarm == 0)) {
 //MP3 Shield spielt Track
 result = MP3player.playTrack(r);
 }

 //-----------------------------------------------------------------------
 // Bewegung/Rütteln erkennen und zufällig Datei 1-9 abspielen
 if ((vibeWave > threshold) && (alarm == 0)) {
 //MP3 Shield spielt Track
 result = MP3player.playTrack(r);
 }

 //-----------------------------------------------------------------------
 // Abfragen ob die Datei abgespielt wird und dementsprechen LEDs steuern
 if ((MP3player.isPlaying()) && (alarm == 0)) {
  analogWrite(rotPin, 255);
  counter = 1;
 }else {
  analogWrite(rotPin, 0);
 }

 //------------------------------------------------------------------------
 // Verabschiedung starten wenn keine Aktion mehr kommt
if ((counter > 0) && (alarm == 0)) {
  counter++;
}
if (counter == 20000) {
  counter = 0;
  result = MP3player.playTrack(2);
  analogWrite(gruenPin, 255);
  delay(1000);
  analogWrite(gruenPin, 0);
 }

 //------------------------------------------------------------------------
 // Taster für Alarmaktivierung
  reading = digitalRead(alarmPin);
 
  if (reading == HIGH && previous1 == LOW && millis() - time > debounce) {
    ledOn = !ledOn;
    time = millis();
    alarm = !alarm;
  }
  digitalWrite(aledPin, ledOn);
  previous1 = reading;
 
 //------------------------------------------------------------------------
 // Alarmanlage
 
if (alarm == 1) {
 analogWrite(blauPin, 255);
 delay(2000);
 analogWrite(blauPin, 0);
 }

}

Edit: Change all "analogWrite(255);" to "digitalWrite(HIGH);"

Example:- (Beispiel:-)

f (alarm == 1) {
 digitalWrite(blauPin, HIGH);
 delay(2000);
 digitalWrite(blauPin, LOW);
 }

Trank you! Thats a really good tipp :relaxed: and thank you for work!

I also changed the 255 to High ... but this was not the problem. It dont work at all.

atweb:
Trank you! Thats a really good tipp :smiling_face: and thank you for work!

I also changed the 255 to High ... but this was not the problem. It dont work at all.

Did you also make them digitalWrite() instead of analogWrite()?

For use as analog outputs you cannot do this:- "pinMode(gruenPin, OUTPUT);"
It makes them digital outputs.

I can't help with the rest - I don't speak German and can't read your comments. Also I have no experience with the MP3 shield.

You could possibly try using Serial.print() to send debug information to the serial monitor.
That might help you to find the problem.

Hallo,

moment please. You are in the german part of this Forum. We speak german by default. :slight_smile:

Doc_Arduino:
Hallo,

moment please. You are in the german part of this Forum. We speak german by default. :slight_smile:

Moment please - This was originally posted in the English section of the forums, then moved here by a moderator after my reply.

Hallo,

ach du hast deutsch im englischen Teil geschrieben? Und dann wurde alles komplett verschoben. Okay, na dann Kaos vorprogrammiert. :slight_smile:

Wie ist denn dein Taster angeschlossen? Mit Pulldown oder Pullup?
Dein delay ist auch nicht gerade hilfreich. Vermutlich steckt der Fehler in den beiden vorletzten Abschnitten.
Hilfreich wäre Debugausgabe vom alarm Status und andere auf die serielle. Dann solltest du sehen wo es hängt.

Doc_Arduino:
Hallo,

ach du hast deutsch im englischen Teil geschrieben? Und dann wurde alles komplett verschoben. Okay, na dann Kaos vorprogrammiert. :slight_smile:

Wie ist denn dein Taster angeschlossen? Mit Pulldown oder Pullup?
Dein delay ist auch nicht gerade hilfreich. Vermutlich steckt der Fehler in den beiden vorletzten Abschnitten.
Hilfreich wäre Debugausgabe vom alarm Status und andere auf die serielle. Dann solltest du sehen wo es hängt.

thannk Sie für die Übersetzung , was ich vorgeschlagen

du solltest deinen Alarm auch wieder ausschalten

// Alarmanlage
 
if (alarm == 1) {
alarm=!alarm;                        //z.B. hier
 analogWrite(blauPin, 255);
 delay(2000);
 analogWrite(blauPin, 0);
 }

sonst läuft dieser Teil immer wieder durch und gleich nach dem Ausschalten wird die Led wieder eingeschaltet.
Wenn ein loop Durchlauf 2ms dauert, wird die Led für 2ms ausgeschaltet, dass sieht dein Auge nicht

Hallo,

wenn es nur an dem liegen sollte, würde ich statt dem dauernden negieren gleich
alarm = 0; oder alarm = false; schreiben. Da sieht man sofort was gemacht wird und es wird ein eindeutiger Zustand gesetzt.

Ich vermute mal das der Nachrichtenverfasser immernoch im englschen Forumsteil herumirrt, oder er ist an keiner Lösung interressiert:

Hallo,

wir können nur dem helfen der unsere Hilfe möchte. Bestimmt wieder Crossposting.