//Librerie #include #include #include LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 dichiarazione display //dichiarazione variabili int rainPin = A0; int whiteLED = 7; int greenLED = 6; int yellowLED = 5; int redLED = 4; int Buzzer = 3; int flag=0; int flag2=0; byte p100[8] = { //tabella cella del display tutta accesa B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; byte p0[8] = { //tabella cella del display tutta spenta B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000, }; void setup(){ //dichiarazione Pin pinMode(rainPin, INPUT); pinMode(greenLED, OUTPUT); pinMode(Buzzer, OUTPUT); pinMode(redLED, OUTPUT); pinMode(whiteLED, OUTPUT); pinMode(yellowLED, OUTPUT); digitalWrite(greenLED, LOW); digitalWrite(redLED, LOW); Serial.begin(9600); // Attivazione modulo LCD lcd.begin (16,2); // 16 x 2 lcd.setBacklightPin(3,POSITIVE); lcd.setBacklight(HIGH); lcd.createChar(0, p100); //creazione funzione riempimento cella display lcd.createChar(1, p0); //creazione funzione svuotamento cella display } void loop() { //Inizio programma int sensorValue = analogRead(rainPin); //Cattura segnale analogico in una variabile Serial.print(sensorValue); //Stampa del segnale anologico sul monitor seriale Serial.println(""); if(sensorValue>805) { //condizione quando il sensore รจ "asciutto" //Spegnimento di tutti i led e del buzzer digitalWrite(whiteLED, LOW); digitalWrite(greenLED, LOW); digitalWrite(yellowLED, LOW); digitalWrite(redLED, LOW); digitalWrite(Buzzer, LOW); //Stampa della scritta sul Display lcd.home (); lcd.print("INSERISCI ACQUA "); lcd.setCursor (0,1); lcd.print(" "); } //fine condizione sensore "asciutto" if(sensorValue>=775 && sensorValue<=795) { //Primo Livello //Accensione LED ROSSO e spegnimento del resto digitalWrite(redLED, HIGH); digitalWrite(yellowLED, LOW); digitalWrite(greenLED, LOW); digitalWrite(whiteLED, LOW); digitalWrite(Buzzer, LOW); lcd.home (); lcd.print("Livello: Basso "); //Stampa lcd.setCursor (0,1); // spostamento cursore lcd.write(byte (0)); //richiamo funzione per scrivere la tacca lcd.setCursor (1,1); lcd.write(byte (0)); lcd.setCursor (2,1); lcd.print(" "); //svuotamento altre celle } //FINE PRIMO LIVELLO if(sensorValue>=630 && sensorValue<=735) { //SECONDO LIVELLO //Accensione LED Rosso-Giallo e spegnimento resto digitalWrite(redLED, HIGH); digitalWrite(yellowLED, HIGH); digitalWrite(Buzzer, LOW); digitalWrite(greenLED, LOW); digitalWrite(whiteLED, LOW); lcd.home (); lcd.print("Livello: Medio "); //Stampa lcd.setCursor (0,1); //spostamento cursore lcd.write(byte (0)); lcd.setCursor (1,1); lcd.write(byte (0)); lcd.setCursor (2,1); lcd.write(byte (0)); lcd.setCursor (3,1); lcd.write(byte (0)); lcd.setCursor (4,1); lcd.print(" "); } if(sensorValue>=530 && sensorValue<=570) { //595 digitalWrite(greenLED, HIGH); digitalWrite(redLED, HIGH); digitalWrite(yellowLED, HIGH); digitalWrite(whiteLED, LOW); digitalWrite(Buzzer, LOW); lcd.home (); // set cursor to 0,0 lcd.print("Livello: Alto "); lcd.setCursor (0,1); // go to start of 2nd line lcd.write(byte (0)); lcd.setCursor (1,1); lcd.write(byte (0)); lcd.setCursor (2,1); lcd.write(byte (0)); lcd.setCursor (3,1); lcd.write(byte (0)); lcd.setCursor (4,1); lcd.write(byte (0)); lcd.setCursor (5,1); lcd.write(byte (0)); lcd.setCursor (6,1); lcd.print(" "); } if(sensorValue>=471 && sensorValue<=505) { if(flag==0) { digitalWrite(whiteLED, HIGH); flag=1; digitalWrite(Buzzer, HIGH); } else { digitalWrite(whiteLED, LOW); digitalWrite(Buzzer, LOW); flag=0; } digitalWrite(greenLED, HIGH); digitalWrite(redLED, HIGH); digitalWrite(yellowLED, HIGH); lcd.home (); // set cursor to 0,0 lcd.print("TROPPA ACQUA! "); lcd.setCursor (0,1); // go to start of 2nd line lcd.write(byte (0)); lcd.setCursor (1,1); lcd.write(byte (0)); lcd.setCursor (2,1); lcd.write(byte (0)); lcd.setCursor (3,1); lcd.write(byte (0)); lcd.setCursor (4,1); lcd.write(byte (0)); lcd.setCursor (5,1); lcd.write(byte (0)); lcd.setCursor (6,1); lcd.write(byte (0)); if(flag2==0) { lcd.setCursor (7,1); lcd.write(byte (0)); flag2=1; } else { lcd.setCursor (7,1); lcd.write(byte (1)); flag2=0; } delay(140); } if(sensorValue<=470) { if(flag==0) { digitalWrite(greenLED, HIGH); digitalWrite(redLED, HIGH); digitalWrite(yellowLED, HIGH); digitalWrite(whiteLED, HIGH); digitalWrite(Buzzer, HIGH); flag=1; } else { digitalWrite(whiteLED, LOW); digitalWrite(greenLED, LOW); digitalWrite(redLED, LOW); digitalWrite(yellowLED, LOW); digitalWrite(Buzzer, LOW); flag=0; } delay(140); } }