#define SCL_PIN 5
#define SDO_PIN 6
byte Key;
void setup() {
Serial.begin(9600);
pinMode(SCL_PIN, OUTPUT);
pinMode(SDO_PIN, INPUT);
}
void loop() {
Key = Read_Keypad();
if (Key) Serial.println(Key);
delay(100);
}
byte Read_Keypad(void) {
byte Count;
byte Key_State = 0;
for (Count = 1; Count <= 16; Count++) {
digitalWrite(SCL_PIN, LOW);
if (!digitalRead(SDO_PIN)) Key_State = Count;
digitalWrite(SCL_PIN, HIGH);
}
return Key_State;
}
#define SCL_PIN 5
#define SDO_PIN 6
byte Key; // Переменная для хранения внутреннего номера кнопки
char keyboardMap[17] = {
'?', // Индекс 0 - не используется (защита от ошибки)
'1', // Кнопка 1 -> 1
'2', // Кнопка 2 -> 2
'3', // Кнопка 3 -> 3
'A', // Кнопка 4 -> A
'4', // Кнопка 5 -> 4
'5', // Кнопка 6 -> 5
'6', // Кнопка 7 -> 6
'B', // Кнопка 8 -> B
'7', // Кнопка 9 -> 7
'8', // Кнопка 10 -> 8
'9', // Кнопка 11 -> 9
'C', // Кнопка 12 -> C
'*', // Кнопка 13 -> *
'0', // Кнопка 14 -> 0
'#', // Кнопка 15 -> #
'D' // Кнопка 16 -> D
};
void setup() {
Serial.begin(9600);
pinMode(SCL_PIN, OUTPUT);
pinMode(SDO_PIN, INPUT);
Serial.println("Сенсорная клавиатура запущена. Нажимайте кнопки...");
}
void loop() {
Key = Read_Keypad(); // Считываем внутренний номер кнопки (1-16)
if (Key) { // Если кнопка нажата (Key не равен 0)
Serial.print("Нажата кнопка: ");
Serial.println(keyboardMap[Key]);
}
delay(1000); // Небольшая задержка для защиты от дребезга
}
byte Read_Keypad(void) {
byte Count;
byte Key_State = 0;
for (Count = 1; Count <= 16; Count++) {
digitalWrite(SCL_PIN, LOW); // Тактовый сигнал LOW - читаем данные
if (!digitalRead(SDO_PIN)) { // Если линия данных LOW (активный уровень), значит кнопка нажата
Key_State = Count; // Запоминаем номер нажатой кнопки
}
digitalWrite(SCL_PIN, HIGH); // Тактовый сигнал HIGH - переход к следующей кнопке
delayMicroseconds(1000); // Маленькая задержка для стабильности
}
return Key_State; // Возвращаем номер нажатой кнопки
}