#include <LiquidCrystal.h>
#include <Servo.h>
const int rs = 13, en = 12, d4 = 11, d5 = 10, d6 = 9, d7 = 8;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int rowPins[4] = {7, 6, 5, 4};
const int colPins[4] = {3, 2, 1, 0};
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
String input = "";
Servo myServo;
int buzzerPin1 = A1; // Пін для зумера
int buzzerPin2 = A2; // Другий пін для зумера
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(rowPins[i], OUTPUT);
digitalWrite(rowPins[i], HIGH);
}
for (int i = 0; i < 4; i++) {
pinMode(colPins[i], INPUT_PULLUP);
}
lcd.begin(16, 2);
lcd.print("Enter command:");
lcd.setCursor(0, 1);
myServo.attach(A0); // Підключення серво до піну A0
pinMode(buzzerPin1, OUTPUT); // Налаштування піну для першого зумера
pinMode(buzzerPin2, OUTPUT); // Налаштування піну для другого зумера
}
void loop() {
char key = getKey();
if (key) {
if (input.length() < 16) {
input += key;
} else {
input = key;
lcd.clear();
}
lcd.setCursor(0, 1);
lcd.print(input);
handleCommand(key); // Обробка команди
}
}
char getKey() {
for (int row = 0; row < 4; row++) {
digitalWrite(rowPins[row], LOW);
for (int col = 0; col < 4; col++) {
if (digitalRead(colPins[col]) == LOW) {
delay(50);
while (digitalRead(colPins[col]) == LOW);
digitalWrite(rowPins[row], HIGH);
return keys[row][col];
}
}
digitalWrite(rowPins[row], HIGH);
}
return 0;
}
void handleCommand(char key) {
if (key == 'A') {
myServo.write(0); // Встановлюємо положення серво на 0 градусів
tone(buzzerPin1, 1000, 500); // Генеруємо звук з частотою 1000 Гц на 500 мс
} else if (key == 'B') {
myServo.write(90); // Встановлюємо положення серво на 90 градусів
tone(buzzerPin2, 1500, 500); // Генеруємо звук з частотою 1500 Гц на 500 мс
} else if (key == 'C') {
myServo.write(180); // Встановлюємо положення серво на 180 градусів
tone(buzzerPin1, 2000, 500); // Генеруємо звук з частотою 2000 Гц на 500 мс
} else if (key == 'D') {
myServo.write(45); // Встановлюємо положення серво на 45 градусів
tone(buzzerPin2, 2500, 500); // Генеруємо звук з частотою 2500 Гц на 500 мс
} else {
noTone(buzzerPin1); // Зупиняємо звук на першому зумері
noTone(buzzerPin2); // Зупиняємо звук на другому зумері
}
}