#include <Keypad.h>
const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[numRows] = {9, 8, 7, 6};
byte colPins[numCols] = {5, 4, 3, 2};
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
const int buzzerPin = 10;
void myTone(int pin, int frequency, int duration) {
long period = 1000000L / frequency;
long cycles = (long)frequency * duration / 1000;
for (long i = 0; i < cycles; i++) {
digitalWrite(pin, HIGH);
delayMicroseconds(period / 2);
digitalWrite(pin, LOW);
delayMicroseconds(period / 2);
}
}
void setup() {
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
char keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
Serial.println(keypressed);
switch (keypressed) {
case '1': myTone(buzzerPin, 262, 200); break; // C4
case '2': myTone(buzzerPin, 294, 200); break; // D4
case '3': myTone(buzzerPin, 330, 200); break; // E4
case '4': myTone(buzzerPin, 349, 200); break; // F4
case '5': myTone(buzzerPin, 392, 200); break; // G4
case '6': myTone(buzzerPin, 440, 200); break; // A4
case '7': myTone(buzzerPin, 494, 200); break; // B4
case '8': myTone(buzzerPin, 523, 200); break; // C5
case '9': myTone(buzzerPin, 587, 200); break; // D5
case '0': myTone(buzzerPin, 659, 200); break; // E5
case '*': myTone(buzzerPin, 698, 200); break; // F5
case '#': myTone(buzzerPin, 784, 200); break; // G5
case 'A': myTone(buzzerPin, 880, 200); break; // A5
case 'B': myTone(buzzerPin, 988, 200); break; // B5
case 'C': myTone(buzzerPin, 1047, 200); break; // C6
case 'D': myTone(buzzerPin, 1175, 200); break; // D6
default: break;
}
}
}