Скетч для кнопочного пульта управления стрелок и семафоров на макете.
---------- Сообщение добавлено в 01:52 ---------- Предыдущие сообщение было в 01:44 ----------
Помогите пожалуйста заменить матричную клавиатуру на обычные кнопки. Проблема в большом количестве кнопок
(более 30). Далее кнопки останутся на мастере, еще останутся 6 реле. Остальные реле будут подключаться на слейвах.
Arduino код:
// Подключаем библиотеки:
#include <Wire.h> // подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h> // подключаем библиотеку для работы с LCD_Rus дисплеем
#include <Keypad.h> // подключаем библиотеку для работы с матричной клавиатурой
// Объявляем переменные и константы:
LiquidCrystal_I2C lcd(0x27, 20, 4); // объявляем переменную для работы с LCD дисплеем, указывая параметры дисплея (адрес I2C = 0x3F, количество столбцов = 20, количество строк = 4)
const byte ROWS = 4; // 4 строки
const byte COLS = 5; // 5 столбца
char keys[ROWS][COLS] = {
{'1', '3', '9', 'A', 'G'},
{'2', '4', '0', 'B', 'I'},
{'5', '7', 'C', 'E', 'K'},
{'6', '8', 'D', 'F', 'L'},
};
byte rowPins[ROWS] = { 10, 9, 8, 7};
byte colPins[COLS] = { 6, 5, 4, 3, 2};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
Serial.begin(9600);
lcd.init(); // инициируем LCD дисплей
lcd.backlight(); // включаем подсветку LCD дисплея
// выводим общие данные на дисплей
lcd.setCursor(0, 0); // устанавливаем курсор в позицию: столбец 0, строка 0
lcd.print("Stancia"); // выводим текст "Stancia"
// назначаем цифровые выходы
for (int i = 22; i <= 37; i++) pinMode(i, OUTPUT); // устанавливает режим работы порта - выход
}
void loop() {
char key = keypad.getKey();
if (key) {
lcd.setCursor(5, 1); // устанавливаем курсор в позицию: столбец 5, строка 1
switch (key) {
case '1':
lcd.print("1"); // выводим -- на LCD дисплей
digitalWrite(22, HIGH); // "включаем" реле
delay(500) ; // ждем 500 mс
digitalWrite(22, LOW); // "выключаем" реле
break;
case '2':
lcd.print("2"); // выводим -- на LCD дисплей
digitalWrite(23, HIGH); // "включаем" реле
delay(500) ; // ждем 500 mс
digitalWrite(23, LOW); // "выключаем" реле
break;
case '3':
lcd.print(" "); // выводим -- на LCD дисплей
digitalWrite(24, HIGH); // "включаем" реле
delay(500) ; // ждем 500 mс
digitalWrite(24, LOW); // "выключаем" реле
break;
case '4':
lcd.print(" "); // выводим -- на LCD дисплей
digitalWrite(24, HIGH); // "включаем" реле
digitalWrite(22, HIGH); // "включаем" реле
delay(500) ; // ждем 500 mс
digitalWrite(24, LOW); // "выключаем" реле
digitalWrite(22, HIGH); // "включаем" реле
break;
}
}
}