#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definizione dei pin utilizzati per i relè
int relay1 = 2;
int relay2 = 3;
int relay3 = 4;
int relay4 = 5;
int relay5 = 6;
int relay6 = 7;
int relay7 = 8;
int relay8 = 9;
// Definizione del tastierino numerico
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {10, 11, 12, 13};
byte colPins[COLS] = {A0, A1, A2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Definizione del display
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
// Inizializzazione dei pin dei relè
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
pinMode(relay5, OUTPUT);
pinMode(relay6, OUTPUT);
pinMode(relay7, OUTPUT);
pinMode(relay8, OUTPUT);
// Inizializzazione del display
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
}
void loop()
{
// Lettura del tasto premuto sul tastierino numerico
char key = keypad.getKey();
// Controllo se è stato premuto un tasto
if (key != NO_KEY) {
// Controllo se è stato premuto un numero tra 1 e 8
if (key >= '1' && key <= '8') {
// Calcolo il numero del relè corrispondente
int relayNum = key - '1' + 2;
// Leggo lo stato attuale del relè
int relayState = digitalRead(relayNum);
// Inverto lo stato del relè
digitalWrite(relayNum, !relayState);
}
}
// Aggiornamento del display
lcd.setCursor(0,1);
lcd.print("1:");
lcd.print(digitalRead(relay1));
lcd.setCursor(0,2);
lcd.print("2:");
lcd.print(digitalRead(relay2));
lcd.setCursor(0,3);
lcd.print("3:");
lcd.print(digitalRead(relay3));
lcd.setCursor(8,1);
lcd.print("4:");
lcd.print(digitalRead(relay4));
lcd.setCursor(8,2);
lcd.print("5:");
lcd.print(digitalRead(relay5));
lcd.setCursor(8,3);
lcd.print("6:");
lcd.print(digitalRead(relay6));
lcd.setCursor(16,1);
lcd.print("7:");
lcd.print(digitalRead(relay7));
lcd.setCursor(16,2);
lcd.print("8:");
lcd.print(digitalRead(relay8));
}