#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
//---------------------------------------------------------------------------------------------------
LiquidCrystal_I2C lcd(0x27, 16, 2); // Indirizzo I2C del display LCD
//---------------------------------------------------------------------------------------------------
// LDR Characteristics
const int lucePin = A1; // Pin analogico per il sensore di luce
const float GAMMA = 0.7;
const float RL10 = 50;
//---------------------------------------------------------------------------------------------------
const int temperaturaPin = A0; // Pin analogico per il sensore di temperatura
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
//---------------------------------------------------------------------------------------------------
const int ledPin1 = 12; // Pin digitale per il LED 1
const int ledPin2 = 11; // Pin digitale per il LED 2
const int potenziometroPin = A2; // Pin analogico per il potenziometro
const int potenziometroPin2 = A3; // Pin analogico per il potenziometro
//---------------------------------------------------------------------------------------------------
const byte ROWS = 4; // Quattro righe del tastierino
const byte COLS = 4; // Quattro colonne del tastierino
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Collega le righe del tastierino ai pin 9, 8, 7, 6
byte colPins[COLS] = {5, 4, 3, 2}; // Collega le colonne del tastierino ai pin 5, 4, 3, 2
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//---------------------------------------------------------------------------------------------------
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("INSERT THRESHOLD");
lcd.setCursor(2 ,1);
lcd.print("USING KEYPAD");
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(lucePin, INPUT);
Serial.begin(9600);
}
//---------------------------------------------------------------------------------------------------
void loop() {
char key = keypad.getKey(); // Leggi il tasto premuto sul tastierino
if(key==-6){
lcd.print("Suca");
}
if (key) {
// Imposta la soglia di temperatura e luce in base al tasto premuto
int soglia = (int)key - 48; // Converte il carattere numerico nel corrispondente valore intero
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("THRESHOLD ");
lcd.print(soglia);
delay(2500);
lcd.clear();
Serial.println(key);
if (soglia >= 0 && soglia <= 9) {
// Imposta la soglia di temperatura e luce
int sogliaPotenziometro = map(soglia, 0, 9, 0, 100);
int sogliaPotenziometro2 = map(soglia, 0, 9, 0, 10000);
lcd.setCursor(2, 0);
lcd.print("MAX T: ");
lcd.print(sogliaPotenziometro);
lcd.print(" C");
lcd.setCursor(1, 1);
lcd.print("MAX L: ");
lcd.print(sogliaPotenziometro2);
lcd.print(" lux");
delay(2500);
lcd.clear();
// Leggi i valori dai sensori
//int potenziometroValore = analogRead(potenziometroPin);
//int sogliaPotenziometro = map(potenziometroValore, 0, 1023, 0, 1000);
Serial.println(sogliaPotenziometro);
Serial.println(sogliaPotenziometro2);
int temperatura = analogRead(temperaturaPin);
float analogValue = analogRead(lucePin);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float luce=pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
// Calcola temperatura in gradi Celsius
float temperaturaCelsius = 1 / (log(1 / (1023. / temperatura - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Visualizza i valori sul display LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperaturaCelsius);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Luce: ");
lcd.print(luce);
lcd.print(" lux");
// Accendi o spegni i LED in base alle soglie impostate
if (temperaturaCelsius > sogliaPotenziometro) {
digitalWrite(ledPin1, HIGH);
} else {
digitalWrite(ledPin1, LOW);
}
if (luce > sogliaPotenziometro2) {
digitalWrite(ledPin2, HIGH);
} else {
digitalWrite(ledPin2, LOW);
}
}
}
delay(100); // Aggiorna il tastierino ogni 100 millisecondi
}
//---------------------------------------------------------------------------------------------------