#include "LiquidCrystal_I2C.h"
#include "Keypad.h"
// keypadsetting
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// display setting
LiquidCrystal_I2C lcd(0x27, 20, 2);
// start of relay settings
const int relayPin1 = 10;
const int relayPin2 = 11;
const int relayPin3 = 12;
String relayNames[] = {"Led 340nm", "Led 350nm", "Led 380nm"}; // Just put name for 8 relays
int k1[] = {0, 0, 0};
int relayState = HIGH;
String uv;// initiation
int a = 0 ;
int b = 0 ;
int number = 0;
bool inputMode = false; // variable to check if we are in input mode
String inputString = ""; // variable to store the input string
void opStartScherm() {
Serial.println("We62 relaymodule Michel Desmet");
lcd.init();
lcd.begin(20, 4);
lcd.backlight();
lcd.print(" We62 ");
delay(500);
String message = " Led reactor";
for (byte i = 0; i < message.length(); i++) {
lcd.print(message[i]);
delay(50);
}
delay(1500);
lcd.setCursor(0, 2);
lcd.print("1/2/3 Timerbased");
lcd.setCursor(0, 3);
lcd.print("7/8/9 Continu");
delay(5000);
}
void layoutScreen() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1/7 Led 340 nm");
lcd.setCursor(0, 1);
lcd.print("2/8 Led 350 nm");
lcd.setCursor(0, 2);
lcd.print("3/9 Led 380 nm");
lcd.setCursor(0, 3);
lcd.print("TI 1/2/3 - Co 7/8/9");
}
void handleRelais(int relayPin, String ledMessage) {
Serial.println("Control relay aangesproken");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enter tijd & (#): ");
String result = "";
while (true) {
char key = keypad.getKey();
if (key >= '0' && key <= '9') {
result += key;
lcd.print(key);
} else if (key == '#') {
break;
}
}
int a = result.toInt();
if (a > 20) {
lcd.clear();
lcd.print(" Max 20 seconden");
delay(2000);
Serial.println("terug naar setup indien > 20");
layoutScreen();
return;
}
Serial.println("Entered value: " + String(a));
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(ledMessage + " aan: ");
Serial.println("Timer loopt");
digitalWrite(relayPin, LOW);
Serial.println("relaypin " + String(relayPin) + " hoog");
for (int i = a ; i >= 0; i--) {
delay(1000);
lcd.setCursor(14, 0);
if (i < 10) {
lcd.print(" ");
}
lcd.print(i);
Serial.println("Remaining time: " + String(i));
lcd.setCursor(17, 0);
lcd.print("sec");
}
Serial.println(" reset relais");
digitalWrite(relayPin1, HIGH);
digitalWrite(relayPin2, HIGH);
digitalWrite(relayPin3, HIGH);
Serial.println(" Timer uit");
lcd.setCursor(10, 0);
lcd.print("Timer Uit ");
delay(3000);
layoutScreen();
}
void relais1() {
handleRelais(relayPin1, "Led 340nm");
}
void relais2() {
handleRelais(relayPin2, "Led 350nm");
}
void relais3() {
handleRelais(relayPin3, "Led 360nm");
}
void setup() {
Serial.begin(9600);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
digitalWrite(relayPin1, HIGH);
digitalWrite(relayPin2, HIGH);
digitalWrite(relayPin3, HIGH);
}
void loop() {
opStartScherm();
layoutScreen();
while (true) {
char key = keypad.getKey();
if (key >= '1' && key <= '9') {
lcd.setCursor(18, 3);
lcd.print(key);
Serial.println(key);
}
handleRelay(key);
}
}
void handleRelay(char key) {
switch (key) {
case '1':
Serial.println("keuze 1-" + String(key));
relais1();
break;
case '2':
Serial.println("keuze 2-" + String(key));
relais2();
break;
case '3':
Serial.println("keuze 3-" + String(key));
relais3();
break;
case '4':
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kies 1,2,3 - 7,8,9");
delay(2000);
layoutScreen();
break;
case '5':
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kies 1,2,3 - 7,8,9");
delay(2000);
layoutScreen();
break;
case '6':
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kies 1,2,3 - 7,8,9");
delay(2000);
layoutScreen();
break;
case '7':
case '8':
case '9':
int relayPin;
switch (key) {
case '7':
relayPin = relayPin1;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Led 340 nm aan");
break;
case '8':
relayPin = relayPin2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Led 350 nm aan");
break;
case '9':
relayPin = relayPin3;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Led 380 nm aan");
break;
}
relayState = !relayState;
digitalWrite(relayPin, relayState);
if (relayState == LOW) {
Serial.println("relaypin hoog ");
} else {
digitalWrite(relayPin1, HIGH);
digitalWrite(relayPin2, HIGH);
digitalWrite(relayPin3, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Led uit");
Serial.println("relaypin laag ");
delay(2000);
layoutScreen();
}
break;
}
}