//********* Pas de musiaque, ni boutons, ni door() *********
#include <Servo.h>
Servo servo_9;
Servo servo_10;
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C mylcd (0x27,16,2);
Adafruit_SSD1306 display;
volatile int btn1_num;
volatile int btn2_num;
volatile int button1;
volatile int button2;
String fans_char;
volatile int fans_val;
volatile int flag;
volatile int flag2;
volatile int flag3;
volatile int gas;
volatile int infrar;
String led2;
volatile int light;
String pass;
String passwd;
String servo1;
volatile int servo1_angle;
String servo2;
volatile int servo2_angle;
volatile int soil;
volatile int val;
volatile int value_led2;
volatile int water;
void auto_sensor() {
gas = analogRead(A0);
if (gas > 1000) {
flag = 1;
while (flag == 1) {
mylcd.setCursor (0, 1);
mylcd.print ("Danger"); // LCD screen print dry soil
delay (300); // Delay 0.3S
tone(3,440);
delay(125);
delay(100);
noTone(3);
delay(100);
tone(3,440);
delay(125);
delay(100);
noTone(3);
delay(300);
gas = analogRead(A0);
if (gas < 10) {
flag = 0;
break;
}
}
} else {
noTone(3);
}
light = analogRead(A1);
if (light < 300) {
infrar = digitalRead(2);
Serial.println(infrar);
if (infrar == 1) {
digitalWrite(13,HIGH);
} else {
digitalWrite(13,LOW);
}
}
water = analogRead(A3);
if (water > 800) {
flag2 = 1;
while (flag2 == 1) {
mylcd.setCursor (0, 1);
mylcd.print ("It's raining"); // LCD screen print dry soil
delay (1000); // Delay 0.3S
servo_10.write(180);
delay(300);
water = analogRead(A3);
if (water < 30) {
flag2 = 0;
break;
}
}
} else {
if (val != 'u' && val != 'n') {
servo_10.write(0);
delay(10);
}
}
soil = analogRead (A2); // Read the value of the soil sensor
if (soil <300) // If the value is less than 300
{
mylcd.clear (); // clear screen
mylcd.setCursor (0, 0);
mylcd.print ("soil:"); //
mylcd.setCursor (6, 0);
mylcd.print (soil);
mylcd.setCursor (0, 1);
mylcd.print ("dry soil"); // LCD screen print dry soil
delay (300); // Delay 0.3S
}
else if ((soil>=300) && (soil <= 700)) // If the value is greater than 300 and less than 700
{
mylcd.clear (); //clear screen
mylcd.setCursor (0, 0);
mylcd.print ("soil:");
mylcd.setCursor (6, 0);
mylcd.print (soil);
mylcd.setCursor (0, 1);
mylcd.print ("humid soil"); // LCD screen printing humid soil
delay (300); // Delay 0.3S
} else if (soil> 700) // If the value is greater than 700
{
mylcd.clear ();//clear screen
mylcd.setCursor (0, 0);
mylcd.print ("soil:");
mylcd.setCursor (6, 0);
mylcd.print (soil);
mylcd.setCursor (0, 1);
mylcd.print ("in water"); /// LCD screen printing in water
delay (300); // Delay 0.3S
}
// Send sensors data in Json format ****************
Serial.print("{\"Light\":");
Serial.print(light);
Serial.print(",\"Gas\":");
Serial.print(gas);
Serial.print(",\"Soil\":");
Serial.print(soil);
Serial.print(",\"Water\":");
Serial.print(water);
Serial.println("}");
delay(50);
}
void pwm_control() {
switch (val) {
case 't':
servo1 = Serial.readStringUntil('#');
servo1_angle = String(servo1).toInt();
servo_9.write(servo1_angle);
delay(300);
break;
case 'u':
servo2 = Serial.readStringUntil('#');
servo2_angle = String(servo2).toInt();
servo_10.write(servo2_angle);
delay(300);
break;
case 'v':
led2 = Serial.readStringUntil('#');
value_led2 = String(led2).toInt();
analogWrite(5,value_led2);
break;
case 'w':
fans_char = Serial.readStringUntil('#');
fans_val = String(fans_char).toInt();
digitalWrite(7,LOW);
analogWrite(6,fans_val);
break;
}
}
void setup(){
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// initialize with the I2C addr 0x3C (for the 128x32)(initializing the display)
Serial.begin(9600);
mylcd.init ();
mylcd.backlight (); // Light up the backlight
mylcd.clear (); // Clear the screen
pinMode(3, OUTPUT);
servo_9.attach(9);
servo_9.write(0);
delay(300);
servo_10.attach(10);
servo_10.write(0);
delay(300);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
digitalWrite(7,HIGH);
digitalWrite(6,HIGH);
pinMode(4, INPUT);
pinMode(8, INPUT);
//Serial.begin(9600);
pinMode(2, INPUT);
pinMode(3, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(13, OUTPUT);
pinMode(A3, INPUT);
pinMode(A2, INPUT);
val = 0;
gas = 0;
flag = 0;
light = 0;
infrar = 0;
water = 0;
flag2 = 0;
int soil = 0;
flag3 = 0;
servo1 = "";
servo1_angle = 0;
servo2 = "";
servo2_angle = 0;
led2 = "";
value_led2 = 0;
fans_char = "";
fans_val = 0;
pinMode(12, OUTPUT);
pinMode(5, OUTPUT);
pinMode(3, OUTPUT);
display.clearDisplay(); // clearing the display
display.setTextColor(WHITE); //setting the color
display.setTextSize(1); //set the font size
display.setCursor(5,0); //set the cursor coordinates
display.print("Hello");
display.display();
}
void loop()
{
auto_sensor();
if (Serial.available() > 0) {
val = Serial.read();
Serial.println(val);
pwm_control();
}
switch (val) {
case 'a':
digitalWrite(13,HIGH);
break;
case 'b':
digitalWrite(13,LOW);
break;
case 'c':
digitalWrite(12,HIGH);
break;
case 'd':
digitalWrite(12,LOW);
break;
case 'e':
break;
case 'f':
break;
case 'g':
noTone(3);
break;
case 'h':
Serial.println(light);
delay(100);
break;
case 'i':
Serial.println(gas);
delay(100);
break;
case 'j':
Serial.println(0);
delay(100);
break;
case 'k':
Serial.println(water);
delay(100);
break;
case 'l':
servo_9.write(180);
delay(500);
break;
case 'm':
servo_9.write(0);
delay(500);
break;
case 'n':
servo_10.write(180);
delay(500);
break;
case 'o':
servo_10.write(0);
delay(500);
break;
case 'p':
digitalWrite(5,HIGH);
break;
case 'q':
digitalWrite(5,LOW);
break;
case 'r':
digitalWrite(7,LOW);
digitalWrite(6,HIGH);
break;
case 's':
digitalWrite(7,LOW);
digitalWrite(6,LOW);
break;
}
}