#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servoMotor;
#define MQ2_ANA A1
#define MQ2_DIG 2
#define Threshold 400
#define buttonPin 7
#define servoPin 9
int buzzerPin = 13;
int redLedPin = 5;
int greenLedPin = 6;
bool gasOn = true;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("smoke detecting");
lcd.setCursor(4,1);
lcd.print("Project");
delay(4000);
lcd.clear();
Serial.begin(9600);
pinMode(MQ2_ANA, INPUT);
pinMode(MQ2_DIG, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
servoMotor.attach(servoPin);
}
void loop() {
Serial.print("Analog: ");
Serial.println(analogRead(MQ2_ANA));
Serial.print("Digital: ");
Serial.println(digitalRead(MQ2_DIG));
delay(300);
lcd.setCursor(2,0);
lcd.print("Smoke = ");
lcd.setCursor(10,0);
lcd.print(analogRead(MQ2_ANA));
if (analogRead(MQ2_ANA) > Threshold) {
tone(buzzerPin, 200);
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
lcd.setCursor(0, 1);
lcd.print("Gas Warning!");
if (gasOn) {
closeGas();
gasOn = false;
}
servoMotor.write(0);
}
else {
noTone(buzzerPin);
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
lcd.setCursor(0, 1);
lcd.print(" ");
if (!gasOn) {
openGas();
gasOn = true;
}
servoMotor.write(90);
}
if (digitalRead(buttonPin) == LOW) {
if (servoMotor.read() == 0) {
servoMotor.write(90);
} else {
servoMotor.write(0);
}
delay(500);
}
delay(300);
}
void closeGas() {
servoMotor.write(0);
}
void openGas() {
servoMotor.write(90);
}