Töne erzeu­gen Tastenfeld

# include "Adafruit_Keypad.h"

int LAUTSPRECHER = 13;

// Größe des Tastenfeldes
// 3 Spalten
const byte SPALTEN = 3;

// 4 Zeilen
const byte REIHEN = 4;

// die Ziffern/Zeichen:
// Array 3 x 4
char Tasten[REIHEN][SPALTEN] =
{
  { '#', '0', '*' },
  { '9', '8', '7' },
  { '6', '5', '4' },
  { '3', '2', '1' }
};

// die Pins für die 3 Spalten
byte SpaltenPins[SPALTEN] = { 3, 4, 5 };

// die Pins für die 4 Zeilen
byte ReihenPins[REIHEN] = { 6, 7, 8, 9 };

// TastenFeld → Name des Keypads
// -> Zuordnung der Pins zu den REIHEN und SPALTEN des Arrays
Adafruit_Keypad Tastenfeld = Adafruit_Keypad(makeKeymap(Tasten), ReihenPins, SpaltenPins, REIHEN, SPALTEN);

/*
  C-Dur Tonleiter Frequenzen
  c'  -> 264
  d'  -> 297
  e'  -> 330
  f'  -> 352
  g'  -> 396
  a'  -> 440
  h'  -> 495
  c'' -> 528
*/

void setup()
{
  // Tastenfeld starten
  Tastenfeld.begin();

  pinMode(LAUTSPRECHER, OUTPUT);
  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial) { ; }
}

void loop()
{
  // gedrückte Taste lesen
  Tastenfeld.tick();

  while (Tastenfeld.available())
  {
    keypadEvent Taste = Tastenfeld.read();

    // wenn die Taste losgelassen wurde -> Lautsprecher ausschalten
    if (Taste.bit.EVENT == KEY_JUST_RELEASED) noTone(LAUTSPRECHER);

    // solange die Taste gedrückt wird -> Ton abspielen
    if (Taste.bit.EVENT == KEY_JUST_PRESSED)
    {
      // ASCII-Code der gedrückten Taste anzeigen
      Serial.println(Taste.bit.KEY);

      /*
         Tastencode entspricht dem ASCII-Code:
         49 = 1
         50 = 2
         . . . 
         56 = 8
       */
      switch (Taste.bit.KEY)
      {
        case 49:
          tone(LAUTSPRECHER, 264);
          break;

        case 50:
          tone(LAUTSPRECHER, 297);
          break;

        case 51:
          tone(LAUTSPRECHER, 330);
          break;

        case 52:
          tone(LAUTSPRECHER, 352);
          break;

        case 53:
          tone(LAUTSPRECHER, 396);
          break;

        case 54:
          tone(LAUTSPRECHER, 440);
          break;

        case 55:
          tone(LAUTSPRECHER, 495);
          break;
          
        case 56:
          tone(LAUTSPRECHER, 520);
          break;
      }
    }
  }
}

Letzte Aktualisierung: 25. Jul 2023 @ 21:13