Doofkopp brauch Hilfe...

Moin erstmal...

Ich bin an verzweifeln... bin ich wirklich so blöd?
Ich hab recht wenig erfahrung was Mikrocontroller angeht und bin schon froh, wenn ich ein bestehendes Programm so umgeschrieben bekomm das es am ende so läuft wie ich das will (ansatzweise)

Solltet ihr euch meiner erbahmen, danke ich euch jetzt schon mal im vorraus.

Ausgangspunkt: Ich hab hier einen Arduino Nano, eine 4x4 Matrix Tastatur und einen DFPlayer Mini liegen,

Hab das ganze auch ans laufen bekommen, heist wenn ich Taste 1 auf der tastatur drücke, spielt er MP3_file_1 ab und so weiter... mit * und ' kann ichs Leiser bzw. Lauter drehen... und mit 0 das ganze stoppen...

#include <Keypad.h>
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

#define ledA_pin 13
#define ledB_pin 14 //A0
#define ledC_pin 15 //A1
#define ledD_pin 16 //A2
bool ledA_state, ledB_state, ledC_state, ledD_state;// Variablendeklaration (global)

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;



const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
  mySoftwareSerial.begin(9600);

pinMode(ledA_pin, OUTPUT);
pinMode(ledB_pin, OUTPUT);
pinMode(ledC_pin, OUTPUT);
pinMode(ledD_pin, OUTPUT);

  
  myDFPlayer.begin(mySoftwareSerial);




   myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  
  //----Set volume----
  myDFPlayer.volume(25);  //Set volume value (0~30).
  myDFPlayer.volumeUp(); //Volume Up
  myDFPlayer.volumeDown(); //Volume Down
  
  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
//  myDFPlayer.EQ(DFPLAYER_EQ_POP);
//  myDFPlayer.EQ(DFPLAYER_EQ_ROCK);
//  myDFPlayer.EQ(DFPLAYER_EQ_JAZZ);
//  myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC);
//  myDFPlayer.EQ(DFPLAYER_EQ_BASS);
  
  //----Set device we use SD as default----
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP);
//  myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH);
  
  
  /*
  //----Mp3 play----
  myDFPlayer.next();  //Play next mp3
  delay(1000);
  myDFPlayer.previous();  //Play previous mp3
  delay(1000);
  myDFPlayer.play(1);  //Play the first mp3
  delay(1000);
  myDFPlayer.loop(1);  //Loop the first mp3
  delay(1000);
  myDFPlayer.pause();  //pause the mp3
  delay(1000);
  myDFPlayer.start();  //start the mp3 from the pause
  delay(1000);
  myDFPlayer.playFolder(15, 4);  //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255)
  delay(1000);
  myDFPlayer.enableLoopAll(); //loop all mp3 files.
  delay(1000);
  myDFPlayer.disableLoopAll(); //stop loop all mp3 files.
  delay(1000);
  myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535)
  delay(1000);
  myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535)
  delay(1000);
  myDFPlayer.stopAdvertise(); //stop advertise
  delay(1000);
  myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000)
  delay(1000);
  myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05.
  delay(1000);
  myDFPlayer.randomAll(); //Random play all the mp3.
  delay(1000);
  myDFPlayer.enableLoop(); //enable loop.
  delay(1000);
  myDFPlayer.disableLoop(); //disable loop.
  delay(1000);
*/

}
  
void loop(){
  char key = keypad.getKey();
  
  if (key){
    switch(key) {
     
    case '0' :  Serial.println("TEST");
                  myDFPlayer.stop();
    break;

    case '1' : Serial.println("HALLO");
                 myDFPlayer.play(1);
    break;
    

    case '2' :  Serial.println("WELT");
                  myDFPlayer.play(2);
    break;

    
    case '3' :  Serial.println("TEST");
                  myDFPlayer.play(3);
    break;
    
    
    case '4' :  Serial.println("TEST");
                  myDFPlayer.play(4);
    break;


    case '5' :  Serial.println("TEST");
                  myDFPlayer.play(5);
    break;
    
    
    case '6' :  Serial.println("TEST");
                  myDFPlayer.play(6);
    break;


    case '7' :  Serial.println("TEST");
                  myDFPlayer.play(7);
    break;        
    

    case '8' :  Serial.println("TEST");
                  myDFPlayer.play(8);
    break;     


    case '9' :  Serial.println("TEST");
                  myDFPlayer.play(9);
    break;         


    case 'A' :  Serial.println("TEST");
               {  digitalWrite(ledA_pin,HIGH);
                  digitalWrite(ledB_pin,LOW);
                  digitalWrite(ledC_pin,LOW);
                  digitalWrite(ledD_pin,LOW);}
    break;     


    case 'B' :  Serial.println("TEST");
               {  digitalWrite(ledA_pin,LOW);
                  digitalWrite(ledB_pin,HIGH);
                  digitalWrite(ledC_pin,LOW);
                  digitalWrite(ledD_pin,LOW);}
    break;     


    case 'C' :  Serial.println("TEST");
               {  digitalWrite(ledA_pin,LOW);
                  digitalWrite(ledB_pin,LOW);
                  digitalWrite(ledC_pin,HIGH);
                  digitalWrite(ledD_pin,LOW);}
    break;     


    case 'D' :  Serial.println("TEST");
               {  digitalWrite(ledA_pin,LOW);
                  digitalWrite(ledB_pin,LOW);
                  digitalWrite(ledC_pin,LOW);
                  digitalWrite(ledD_pin,HIGH);}
    break;     


    case '*' :  Serial.println("TEST");
                  myDFPlayer.volumeUp();
    break;     


    case '#' :  Serial.println("TEST");
                  myDFPlayer.volumeDown();
    break;      
    }
  }
}

MP3TEST_mehrere_varianten.ino (5.29 KB)

tastatur_f_r_MP3.ino (5.65 KB)

Jetzt dacht ich mir, "wär doch cool, wenn du mit den ABCD Tasten auchnoch zwischen verschiedenen Ordnern/Dateibereichen hin und her schalten könntest... (also wenn A aktiv ist spielt er A1-9 ab wenn B aktiv ist B1-9 usw. )... Und da verließen sie mich... Ich bekomm es hin, das die LED's die den momentanen Modus (A, B, C oder D) anzeigen sollen so leuchten wie sie sollen... aber egal was ich mache ich bekomme keine Ausgabe...

#include <Keypad.h>
#include "Arduino.h"


#define ledA_pin 13
#define ledB_pin 14 //A0
#define ledC_pin 15 //A1
#define ledD_pin 16 //A2
bool ledA_state, ledB_state, ledC_state, ledD_state;// Variablendeklaration (global)





const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

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


pinMode(ledA_pin, OUTPUT);
pinMode(ledB_pin, OUTPUT);
pinMode(ledC_pin, OUTPUT);
pinMode(ledD_pin, OUTPUT);

einsbisneunA();

  

}
  
void loop(){
  char key = keypad.getKey();
  
  if (key){
    switch(key) {
     
   


  case 'A' : 
               
                  einsbisneunA();
    break;     


    case 'B' :  
              
                  einsbisneunB();
    break;     


    case 'C' : 
               
                  einsbisneunC();

    break;     


    case 'D' : 

                  einsbisneunD();
    break;     


    case '*' :  Serial.println("TEST");
            
    break;     


    case '#' :  Serial.println("TEST");
              
   


    
    }
  }
}
void einsbisneunA(){
   char keyA = keypad.getKey();

   {  digitalWrite(ledA_pin,HIGH);
      digitalWrite(ledB_pin,LOW);
      digitalWrite(ledC_pin,LOW);
      digitalWrite(ledD_pin,LOW);}
       Serial.println("A");
  if (ledA_pin,HIGH){
    switch(keyA) {
     
    case '0' :  Serial.println("Stop");

    break;

    case '1' : Serial.println("1A");

    break;
    

    case '2' :  Serial.println("2A");

    break;

    
    case '3' :  Serial.println("3A");

    break;
    
    
    case '4' :  Serial.println("4A");

    break;


    case '5' :  Serial.println("5A");

    break;
    
    
    case '6' :  Serial.println("6A");

    break;


    case '7' :  Serial.println("7A");

    break;        
    

    case '8' :  Serial.println("8A");

    break;     


    case '9' :  Serial.println("9A");

    break;         
  
  
  
  
      }
    }    
  }

void einsbisneunB(){
   char keyB = keypad.getKey();
   {  digitalWrite(ledA_pin,LOW);
      digitalWrite(ledB_pin,HIGH);
      digitalWrite(ledC_pin,LOW);
      digitalWrite(ledD_pin,LOW);}
      Serial.println("B");
    if (ledB_pin,HIGH){
    switch(keyB) {
     
    case '0' :  Serial.println("Stop");

    break;

    case '1' : Serial.println("1B");

    break;
    

    case '2' :  Serial.println("2B");

    break;

    
    case '3' :  Serial.println("3B");

    break;
    
    
    case '4' :  Serial.println("4B");

    break;


    case '5' :  Serial.println("5B");

    break;
    
    
    case '6' :  Serial.println("6B");

    break;


    case '7' :  Serial.println("7B");

    break;        
    

    case '8' :  Serial.println("8B");

    break;     


    case '9' :  Serial.println("9B");

    break;         
  
  
  
  
  
      }  
    }
  }
void einsbisneunC(){
   char keyC = keypad.getKey();
   {  digitalWrite(ledA_pin,LOW);
      digitalWrite(ledB_pin,LOW);
      digitalWrite(ledC_pin,HIGH);
      digitalWrite(ledD_pin,LOW);}
       Serial.println("C");
    if (ledC_pin,HIGH){
    switch(keyC) {
     
    case '0' :  Serial.println("Stop");

    break;

    case '1' : Serial.println("1C");

    break;
    

    case '2' :  Serial.println("2C");

    break;

    
    case '3' :  Serial.println("3C");

    break;
    
    
    case '4' :  Serial.println("4C");

    break;


    case '5' :  Serial.println("5C");

    break;
    
    
    case '6' :  Serial.println("6C");

    break;


    case '7' :  Serial.println("7C");

    break;        
    

    case '8' :  Serial.println("8C");

    break;     


    case '9' :  Serial.println("9C");

    break;         
  
  
  
  
  
      }  
    }
  }
void einsbisneunD(){
   char keyD = keypad.getKey();
   {  digitalWrite(ledA_pin,LOW);
      digitalWrite(ledB_pin,LOW);
      digitalWrite(ledC_pin,LOW);
      digitalWrite(ledD_pin,HIGH);}
       Serial.println("D");
    if (ledD_pin,HIGH){
    switch(keyD) {
     
    case '0' :  Serial.println("Stop");

    break;

    case '1' : Serial.println("1D");

    break;
    

    case '2' :  Serial.println("2D");

    break;

    
    case '3' :  Serial.println("3D");

    break;
    
    
    case '4' :  Serial.println("4D");

    break;


    case '5' :  Serial.println("5D");

    break;
    
    
    case '6' :  Serial.println("6D");

    break;


    case '7' :  Serial.println("7D");

    break;        
    

    case '8' :  Serial.println("8D");

    break;     


    case '9' :  Serial.println("9D");

    break;         
  
  
  
  
  
  }  

  }

  
}

Ich hab den ganzen DFPlayer Kram erstmal rausgenommen und mich auf ne Serielle Textausgabe beschränkt aber mehr als die Ausgabe LEDs und die jeweilige Serielle nachricht, Welche LED grad leuchtet bring ich nich zu stande...

Warum bist du so sparsam mit Leerzeilen? Die kosten doch nichts.

So nach ganz kurzem Duschschauen: Kompiliert das überhaupt?

if (ledB_pin,HIGH)

Meinst Du da vielleicht

if (digitalRead(ledB_pin) == HIGH)

Gruß Walter

Aloha...

Hausknecht:
Warum bist du so sparsam mit Leerzeilen? Die kosten doch nichts.

I c h b i n m i r g r a d n i c h t s i c h e r , o b d a s s a r k a s t i s c h g e m e i n t i s t . . . : P
oder wie ich das verstehen soll... sorry, ich bin manchmal etwas begriffstutzig.

wno158:
So nach ganz kurzem Duschschauen: Kompiliert das überhaupt?

if (ledB_pin,HIGH)

Meinst Du da vielleicht

if (digitalRead(ledB_pin) == HIGH)

Gruß Walter

Also sowohl meine als auch deine Variante Kompilieren und Funktionieren genau gleich... Also soweit schon im ansatz richtig nur ebend nicht wie gewünscht :smiley:

crazyhawk86:
I c h b i n m i r g r a d n i c h t s i c h e r , o b d a s s a r k a s t i s c h g e m e i n t i s t . . . : P
oder wie ich das verstehen soll... sorry, ich bin manchmal etwas begriffstutzig.

Ist wohl so gemeint....durch die vielen Leerzeilen wird ein schlecht formatierter Sketch noch schlechter bis überhaupt nicht lesbar.
Also unterlasse das bitte mit den unnützen Leerzeilen.
Das lesen tut man sich dann nicht an.

Also sowohl meine als auch deine Variante Kompilieren und Funktionieren genau gleich... Also soweit schon im ansatz richtig nur ebend nicht wie gewünscht :smiley:

Mag sein, dass deine Version kompiliert, aber die wird nicht so funktionieren, wie du es möchtest.
Da du an dieser Stelle sehr geizig mit den Kommentaren bist, wissen wir ja nicht, was da genau passieren soll.

Hi

Tatsächlich - DAS kompiliert 8)

 if (0,0,0,0,0,0,0,1,0,2,3,4){
//...
}

Was Das macht ... kA, ob oder wie die 'Einzelwerte' behandelt werden ...

Mir möchte trotzdem nicht in den Kopf, daßif (ledA_pin, HIGH) {
den Zustand des Pin, spezifiziert durch die Variable/Konstante ledA_pin, auf HIGH geprüft wird.
ledA_pin ist, nach Definition, nur eine Zahl (per #define 13 ) - WAS Die miteinander in der IF machen ... kA.
... solange sich aber diese Schreibweise nicht einbürgert - meinen Segen habt Ihr :wink: ...

MfG

postmaster-ino:
Mir möchte trotzdem nicht in den Kopf, daßif (ledA_pin, HIGH) {
den Zustand des Pin, spezifiziert durch die Variable/Konstante ledA_pin, auf HIGH geprüft wird.
ledA_pin ist, nach Definition, nur eine Zahl (per #define 13 ) - WAS Die miteinander in der IF machen ... kA.

Das sollte auch nicht in deinen Kopf, weil es Quatsch ist.

if (ledA_pin, HIGH) {

benutzt den Komma-Operator, d.h. die Ausdrücke werden von links nach rechts evaluiert,
alle Ergebnisse außer dem des letzten Ausdrucks werden weggeworfen,
dieser ergibt den Wert des gesamten Ausdrucks.

Faktisch ist es also ein

if (HIGH) {

Da is der Doofkopp wieder...

Nochmal vorab. Ich bin Anfänger. und zwar blutiger. ich versuche zu verstehen und das mir mitgegebene richtig umzusetzten. Ich weis, ich mache Fehler (oft wirklich dumme Fehler) Aber ich versuche daraus zu lernen.

ich hab das Programm jetzt mal komplett umgeschrieben (naja fast) Es ist warscheinlich immernoch nicht Schön und weit ab von effektiv, aber es Funktioniert jetzt (naja so fast... so 99%ig)

ich hab mich, was die Formatierung angeht so gut wie möglich zurückgehalten und auch ein Paar kommentare gesetzt (ein paar hab ich weggelassen weil in meinen Augen unnötig)

Mögen die weisen Meister noch mal drüberschauen und mir eventuell noch ein paar Tipps geben? Ich weis, ihr habt auch besseres zu tun... (Ich bin oft genug selber mit Auszubildenden unterwegs, versuche aber immer möglichst alles zu erklären und auf Fragen zu antworten)

Kann man damit was anfangen oder is das wieder totale Grütze? (Bitte nich gleich Hauen)

(Den DFPlayer Part hab ich erstmal noch komplett draussen. Momentan ist alles nur über den seriellen Monitor um zu schauen ob es funktioniert)

// DFPlayer Mini gesteuert über 4x4 Tastatur Matrix
#include <Keypad.h>
#include "Arduino.h"

//Ausgänge AnzeigeLED's
#define ledA_pin 13 //D13
#define ledB_pin 14 //A0
#define ledC_pin 15 //A1
#define ledD_pin 16 //A2
bool ledA_state, ledB_state, ledC_state, ledD_state;// Variablendeklaration (global)

//Matrix Tastatrurgedöns
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

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


pinMode(ledA_pin, OUTPUT);   //Das das die LED Ausgänge sind, brauch ich hoffentlich nicht zu erwähnen...
pinMode(ledB_pin, OUTPUT);
pinMode(ledC_pin, OUTPUT);
pinMode(ledD_pin, OUTPUT);

digitalWrite(ledA_pin,HIGH);
}
  
void loop(){
  char key = keypad.getKey();
  
  if (key){
  switch(key) {
   case 'A' :                               //Taste A wurde Gedrückt, Nummer 1A-9A sind aktiv, LED A Leuchtet
             {digitalWrite(ledA_pin,HIGH);
              digitalWrite(ledB_pin,LOW);
              digitalWrite(ledC_pin,LOW);
              digitalWrite(ledD_pin,LOW);
              Serial.println("A"); }  
    break;     
   case 'B' :                              //Taste B wurde Gedrückt, Nummer 1B-9B sind aktiv, LED B Leuchtet
             {digitalWrite(ledA_pin,LOW);
              digitalWrite(ledB_pin,HIGH);
              digitalWrite(ledC_pin,LOW);
              digitalWrite(ledD_pin,LOW);
              Serial.println("B"); }
    break;
   case 'C' :                              //Taste C wurde Gedrückt, Nummer 1C-9C sind aktiv, LED C Leuchtet
             {digitalWrite(ledA_pin,LOW);
              digitalWrite(ledB_pin,LOW);
              digitalWrite(ledC_pin,HIGH);
              digitalWrite(ledD_pin,LOW);
              Serial.println("C"); }
    break;          
   case 'D' :                              //Taste D wurde Gedrückt, Nummer 1D-9D sind aktiv, LED D Leuchtet
             {digitalWrite(ledA_pin,LOW);
              digitalWrite(ledB_pin,LOW);
              digitalWrite(ledC_pin,LOW);
              digitalWrite(ledD_pin,HIGH);
              Serial.println("D"); }
    break;       
  case '*' :  Serial.println("Lauter");  // Tasten für den DFPlayer  
    break;     
  case '#' :  Serial.println("Leiser");
    break;
  case '0' :  Serial.println("Stop");  
    break;
   }
  }

 if (digitalRead(ledA_pin) == HIGH) {    
   char key = keypad.getKey();
    if (key) {
    switch(key) {
     
    case '1' :  Serial.println("1A");
    break;
    case '2' :  Serial.println("2A");
    break;
    case '3' :  Serial.println("3A");
    break;
    case '4' :  Serial.println("4A");
    break;
    case '5' :  Serial.println("5A");
    break;
    case '6' :  Serial.println("6A");
    break;
    case '7' :  Serial.println("7A");
    break;        
    case '8' :  Serial.println("8A");
    break;     
    case '9' :  Serial.println("9A");
    break;         
     }
    }
   }    

 if (digitalRead(ledB_pin) == HIGH) {
   char key = keypad.getKey();
    if (key) {
    switch(key) {
     
    case '1' :  Serial.println("1B");
    break;
    case '2' :  Serial.println("2B");
    break;
    case '3' :  Serial.println("3B");
    break;
    case '4' :  Serial.println("4B");
    break;
    case '5' :  Serial.println("5B");
    break;
    case '6' :  Serial.println("6B");
    break;
    case '7' :  Serial.println("7B");
    break;        
    case '8' :  Serial.println("8B");
    break;     
    case '9' :  Serial.println("9B");
    break;         
     }
    }
   }    

   if (digitalRead(ledC_pin) == HIGH) {
   char key = keypad.getKey();
    if (key) {
    switch(key) {
     
    case '1' :  Serial.println("1C");
    break;
    case '2' :  Serial.println("2C");
    break;
    case '3' :  Serial.println("3C");
    break;
    case '4' :  Serial.println("4C");
    break;
    case '5' :  Serial.println("5C");
    break;
    case '6' :  Serial.println("6C");
    break;
    case '7' :  Serial.println("7C");
    break;        
    case '8' :  Serial.println("8C");
    break;     
    case '9' :  Serial.println("9C");
    break;         
     }
    }
   } 

   if (digitalRead(ledD_pin) == HIGH) {
   char key = keypad.getKey();
    if (key) {
    switch(key) {
     
    case '1' :  Serial.println("1D");
    break;
    case '2' :  Serial.println("2D");
    break;
    case '3' :  Serial.println("3D");
    break;
    case '4' :  Serial.println("4D");
    break;
    case '5' :  Serial.println("5D");
    break;
    case '6' :  Serial.println("6D");
    break;
    case '7' :  Serial.println("7D");
    break;        
    case '8' :  Serial.println("8D");
    break;     
    case '9' :  Serial.println("9D");
    break;         
     }
    }
   }       
 
 }

Du hast sehr viel ähnlichen Code, der sich wiederholt. Das kann man meist eleganter in Funktionen und Schleifen lösen.
Beispielsweise kannst du die Ledpins in ein Array packen und mit einer for Schleife drüber iterieren, um alle auszuschalten, oder wenigstens das alle ausschalten in eine Funktion packen. Danach schaltest du die an, die leuchten soll.

Anstatt

case 'A' :            //Taste A wurde Gedrückt, Nummer 1A-9A sind aktiv, LED A Leuchtet
            {digitalWrite(ledA_pin,HIGH);
             digitalWrite(ledB_pin,LOW);
             digitalWrite(ledC_pin,LOW);
             digitalWrite(ledD_pin,LOW);
             Serial.println("A"); }  
   break;

Dann

case 'A' :           //Taste A wurde Gedrückt, Nummer 1A-9A sind aktiv, LED A Leuchtet
            {
             alles_aus();      
             digitalWrite(ledA_pin,HIGH);
             Serial.println(key); 
             }  
   break;
void alles_aus()
{          digitalWrite(ledA_pin,LOW);
             digitalWrite(ledB_pin,LOW);
             digitalWrite(ledC_pin,LOW);
             digitalWrite(ledD_pin, LOW);

Oder eben dann
for (byte i=0;i<4;i++) digitalWrite(led_pin[i],LOW)

}

// Variablendeklaration (global)

const byte led_pin[]={13,A0,A1,A2};
bool led_state[4];

Die Funktionalität mag die gleiche sein, aber die Wartung und Änderungen sind wesentlich einfacher.

Ich sehe das ähnlich, was hältst du davon?

// DFPlayer Mini gesteuert über 4x4 Tastatur Matrix
#include <Keypad.h>
#include <Arduino.h>

//Ausgänge AnzeigeLED's
const byte ledPins[] = { 13, A0, A1, A2 };

//Matrix Tastatrurgedöns
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
  Serial.begin(9600);
  for (byte pin : ledPins) {
    pinMode(pin, OUTPUT);
  }
  liteOneLed(0);
}

void liteOneLed(byte which) {
  for (byte idx = 0; idx < sizeof(ledPins); idx++) {
    digitalWrite(ledPins[idx], idx == which ? HIGH : LOW);
  }
}

void loop() {
  char key = keypad.getKey();
  switch (key) {
    case 'A':                               //Taste A wurde Gedrückt, Nummer 1A-9A sind aktiv, LED A Leuchtet
      liteOneLed(0);
      Serial.println('A');
      break;
    case 'B':                              //Taste B wurde Gedrückt, Nummer 1B-9B sind aktiv, LED B Leuchtet
      liteOneLed(1);
      Serial.println('B');
      break;
    case 'C':                              //Taste C wurde Gedrückt, Nummer 1C-9C sind aktiv, LED C Leuchtet
      liteOneLed(2);
      Serial.println('C');
      break;
    case 'D':                              //Taste D wurde Gedrückt, Nummer 1D-9D sind aktiv, LED D Leuchtet
      liteOneLed(3);
      Serial.println('D');
      break;
    case '*':
      Serial.println(F("Lauter"));  // Tasten für den DFPlayer
      break;
    case '#':
      Serial.println(F("Leiser"));
      break;
    case '0':
      Serial.println(F("Stop"));
      break;
    case '1' ... '9':
      Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
      }
      break;
  }
}

Ich habe den Verdacht dass deine Tasten 1-9 nur jedes zweite Mal funktionierten.

Whandall:
Ich sehe das ähnlich, was hältst du davon?

// DFPlayer Mini gesteuert über 4x4 Tastatur Matrix

#include <Keypad.h>
#include <Arduino.h>

//Ausgänge AnzeigeLED's
const byte ledPins[] = { 13, A0, A1, A2 };

//Matrix Tastatrurgedöns
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
  Serial.begin(9600);
  for (byte pin : ledPins) {
    pinMode(pin, OUTPUT);
  }
  liteOneLed(0);
}

void liteOneLed(byte which) {
  for (byte idx = 0; idx < sizeof(ledPins); idx++) {
    digitalWrite(ledPins[idx], idx == which ? HIGH : LOW);
  }
}

void loop() {
  char key = keypad.getKey();
  switch (key) {
    case 'A':                              //Taste A wurde Gedrückt, Nummer 1A-9A sind aktiv, LED A Leuchtet
      liteOneLed(0);
      Serial.println('A');
      break;
    case 'B':                              //Taste B wurde Gedrückt, Nummer 1B-9B sind aktiv, LED B Leuchtet
      liteOneLed(1);
      Serial.println('B');
      break;
    case 'C':                              //Taste C wurde Gedrückt, Nummer 1C-9C sind aktiv, LED C Leuchtet
      liteOneLed(2);
      Serial.println('C');
      break;
    case 'D':                              //Taste D wurde Gedrückt, Nummer 1D-9D sind aktiv, LED D Leuchtet
      liteOneLed(3);
      Serial.println('D');
      break;
    case '*':
      Serial.println(F("Lauter"));  // Tasten für den DFPlayer
      break;
    case '#':
      Serial.println(F("Leiser"));
      break;
    case '0':
      Serial.println(F("Stop"));
      break;
    case '1' ... '9':
      Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
      }
      break;
  }
}



Ich habe den Verdacht dass deine Tasten 1-9 nur jedes zweite Mal funktionierten.

Ja Stimmt es hat zwar Funktioniert, allerdings nur mit "lags" Die 'ABCD' Tasten sprachen manchmal erst beim 2., 3., 4., Drücken an...
Dürfte wohl daran liegen, dass das in der Loop alles nacheinander abgefragt wird oder?. Mit deinem Code funktioniert das ganze flüssig. Kommt das durch das zusammenfassen der einzelnen Schritte?

Ich hab das ganze jetzt mal mit dem DFPlayer Mini wieder in verbindung gebracht...

Ich musste zwar (vorallem damit ich damit klarkomme), die Case 1-9 wieder aufdröseln.. (geht bestimmt auch noch eleganter und platzsparender) aber egal.

Das Ganze funktioniert jetzt genauso wie es soll

Vielen vielen Lieben Dank für die Hilfe. (Drücke grade wahllos alle möglichen Tasten und Freu mich wie son Kleines Kind :smiley: )

crazyhawk86:
Mit deinem Code funktioniert das ganze flüssig. Kommt das durch das zusammenfassen der einzelnen Schritte?

In erster Linie liegt das daran, dass die Tastatur nur noch an einer Stelle abgefragt wird. :wink:

Ach ich Torfkopp... Hier der Code

// DFPlayer Mini gesteuert über 4x4 Tastatur Matrix
#include <Keypad.h>
#include <Arduino.h>
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"


//Ausgänge AnzeigeLED's
const byte ledPins[] = { 13, A0, A1, A2 };


SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;


//Matrix Tastatrurgedöns
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
   Serial.begin(9600);
  mySoftwareSerial.begin(9600);

  myDFPlayer.begin(mySoftwareSerial);




   myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
  
  //----Set volume----
  myDFPlayer.volume(25);  //Set volume value (0~30).
  myDFPlayer.volumeUp(); //Volume Up
  myDFPlayer.volumeDown(); //Volume Down
  
  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);

  
  //----Set device we use SD as default----

  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);


  for (byte pin : ledPins) {
    pinMode(pin, OUTPUT);
  }
  liteOneLed(0);
}

void liteOneLed(byte which) {
  for (byte idx = 0; idx < sizeof(ledPins); idx++) {
    digitalWrite(ledPins[idx], idx == which ? HIGH : LOW);
  }
}

void loop() {
  char key = keypad.getKey();
  switch (key) {
    case 'A':                               //Taste A wurde Gedrückt, Nummer 1A-9A sind aktiv, LED A Leuchtet
      liteOneLed(0);
      Serial.println('A');
      break;
    case 'B':                              //Taste B wurde Gedrückt, Nummer 1B-9B sind aktiv, LED B Leuchtet
      liteOneLed(1);
      Serial.println('B');
      break;
    case 'C':                              //Taste C wurde Gedrückt, Nummer 1C-9C sind aktiv, LED C Leuchtet
      liteOneLed(2);
      Serial.println('C');
      break;
    case 'D':                              //Taste D wurde Gedrückt, Nummer 1D-9D sind aktiv, LED D Leuchtet
      liteOneLed(3);
      Serial.println('D');
      break;
    case '*':
      Serial.println(F("Lauter"));  // Tasten für den DFPlayer
      myDFPlayer.volumeUp(); //Volume Up
      break;
    case '#':
      Serial.println(F("Leiser"));
      myDFPlayer.volumeDown(); //Volume Up
      break;
    case '0':
      Serial.println(F("Stop"));
      myDFPlayer.stop();
      break;
    case '1':
    Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 1);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 1);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 1);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 1);
      }
      break;
      
    case '2':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 2);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 2);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 2);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 2);
      }
      break;
        
   case '3':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 3);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 3);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 3);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 3);
      }
      break;   
    
  case '4':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 4);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 4);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 4);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 4);
      }
      break;  

  case '5':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 5);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 5);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 5);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 5);
      }
      break;  

  case '6':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 6);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 6);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 6);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 6);
      }
      break;         

  case '7':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 7);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 7);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 7);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 7);
      }
      break;  

  case '8':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 8);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 8);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 8);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 8);
      }
      break;  

  case '9':
     Serial.write(key);
      if (digitalRead(ledPins[0]) == HIGH) {
        Serial.println('A');
        myDFPlayer.playFolder(1, 9);
      } else if (digitalRead(ledPins[1]) == HIGH) {
        Serial.println('B');
        myDFPlayer.playFolder(2, 9);
      } else if (digitalRead(ledPins[2]) == HIGH) {
        Serial.println('C');
        myDFPlayer.playFolder(3, 9);
      } else if (digitalRead(ledPins[3]) == HIGH) {
        Serial.println('D');
        myDFPlayer.playFolder(4, 9);
      }
      break;      
          
  }
}

Hi

Bitte noch in Code-Tage (CODE, statt QUOTE) ändern - dann klappt's auch mit dem Nachbarn :wink:

MfG

Hausknecht:
Warum bist du so sparsam mit Leerzeilen? Die kosten doch nichts.

Brauchst sie ja nicht zu lesen :grin:

Du schreibst gerne viel Kode, oder irre ich mich.
Schau mal, das geht doch auch viel kürzer. (Compiled aber ungetestet)

// DFPlayer Mini gesteuert über 4x4 Tastatur Matrix
#include <Keypad.h>
#include <Arduino.h>
#include "SoftwareSerial.h"
#include <DFRobotDFPlayerMini.h>

//Ausgänge AnzeigeLED's
const byte ledPins[] = { 13, A0, A1, A2 };

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

//Matrix Tastatrurgedöns
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup() {
  Serial.begin(9600);
  mySoftwareSerial.begin(9600);

  myDFPlayer.begin(mySoftwareSerial);
  myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms

  //----Set volume----
  myDFPlayer.volume(25);  //Set volume value (0~30).
  myDFPlayer.volumeUp(); //Volume Up
  myDFPlayer.volumeDown(); //Volume Down

  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);

  //----Set device we use SD as default----
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);

  for (byte pin : ledPins) {
    pinMode(pin, OUTPUT);
  }
  liteOneLed(0);
}

void liteOneLed(byte which) {
  for (byte idx = 0; idx < sizeof(ledPins); idx++) {
    digitalWrite(ledPins[idx], idx == which ? HIGH : LOW);
  }
}

void loop() {
  char key = keypad.getKey();
  byte folder = 1;
  switch (key) {
    case 'A':                               //Taste A wurde Gedrückt, Nummer 1A-9A sind aktiv, LED A Leuchtet
      liteOneLed(0);
      Serial.println('A');
      break;
    case 'B':                              //Taste B wurde Gedrückt, Nummer 1B-9B sind aktiv, LED B Leuchtet
      liteOneLed(1);
      Serial.println('B');
      break;
    case 'C':                              //Taste C wurde Gedrückt, Nummer 1C-9C sind aktiv, LED C Leuchtet
      liteOneLed(2);
      Serial.println('C');
      break;
    case 'D':                              //Taste D wurde Gedrückt, Nummer 1D-9D sind aktiv, LED D Leuchtet
      liteOneLed(3);
      Serial.println('D');
      break;
    case '*':
      Serial.println(F("Lauter"));  // Tasten für den DFPlayer
      myDFPlayer.volumeUp(); //Volume Up
      break;
    case '#':
      Serial.println(F("Leiser"));
      myDFPlayer.volumeDown(); //Volume Up
      break;
    case '0':
      Serial.println(F("Stop"));
      myDFPlayer.stop();
      break;
    case '1' ... '9':
      if (digitalRead(ledPins[0]) == HIGH) {
        folder =  1;
      } else if (digitalRead(ledPins[1]) == HIGH) {
        folder =  2;
      } else if (digitalRead(ledPins[2]) == HIGH) {
        folder =  3;
      } else if (digitalRead(ledPins[3]) == HIGH) {
        folder =  4;
      }
      Serial.write(key);
      Serial.println('A' - 1 + folder);
      myDFPlayer.playFolder(folder, key - '0');
      break;
  }
}