#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define trig 18
#define echo 5
#define redL 23
#define greenL 4
#define buzz 25
#define scl 22
#define sda 21
#define pir 2
bool redL_full = HIGH;
const int bottomHopper = 65;
const int depthHopper =60;
int depthCoal;
int percentCoal;
Servo myServo;
void setup() {
pinMode(2, INPUT);
pinMode(15, OUTPUT);
myServo.attach(15);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
pinMode(greenL, OUTPUT);
pinMode(redL, OUTPUT);
pinMode(buzz, OUTPUT);
pinMode(scl, INPUT);
pinMode(sda, INPUT);
Serial.begin(9600);
lcd.init();
lcd.clear();
lcd.backlight();
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
void loop() {
myServo.write(20);
int redLValue = digitalRead(redL);
int greenLValue = digitalRead(greenL);
int val = digitalRead(2);
if(val == 1 && redLValue == LOW && greenLValue == HIGH){
myServo.write(20);
delay(500);
myServo.write(180);
delay(2000);
myServo.write(20);
delay(2000);
}
else if(val == 0 && redLValue == HIGH && greenLValue == LOW){
myServo.write(20);
delay(1000);
}
digitalWrite (trig, LOW);
delayMicroseconds (2);
digitalWrite (trig, HIGH);
delayMicroseconds (10);
digitalWrite (trig, LOW);
long t = pulseIn(echo,HIGH);
long inches = t / 74 /2 ;
long cm = t / 29 / 2 ;
Serial.print(inches);
Serial.print(" in \t ");
Serial.print(cm);
Serial.println(" cm");
delay(2000);
if (cm>5 ){
digitalWrite(redL, LOW);
digitalWrite(greenL, HIGH);
}
else {
digitalWrite(redL, HIGH);
digitalWrite(greenL, LOW);
}
if (val == HIGH && redL == HIGH){
tone(buzz, 1000);
delay(100);
}
else if ( val == LOW && redL == HIGH){
noTone(buzz);
}
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
int duration = pulseIn(echo, HIGH);
Serial.print("Distance in CM: ");
Serial.println(duration / 58);
Serial.print("Distance in inches: ");
Serial.println(duration / 148);
depthCoal = bottomHopper - (duration / 58);
Serial.print("Depth of Coal (cm):");
Serial.println(depthCoal);
lcd.setCursor(0, 0);
lcd.print("Depth coal:");
lcd.print(depthCoal);
lcd.print("cm ");
percentCoal = map(depthCoal,0,depthHopper,0,100);
Serial.print("Fill level: ");
Serial.println(percentCoal);
lcd.setCursor(0,1);
lcd.print("Fill level: ");
lcd.print(percentCoal);
lcd.print("% ");
delay(1000);
}
int ultrasonic();
void trash_full_indicte() {
int DISTANCE = 0;
DISTANCE = ultrasonic();
if (DISTANCE <= 5) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.println("Trash bin full !");
lcd.setCursor(0, 1);
lcd.println("CLEAN THE BIN");
}
while (DISTANCE <= 5) {
digitalWrite(redL, HIGH);
tone(buzz, 1000);
delay(1000);
digitalWrite(redL, LOW);
tone(buzz, 500);
delay(1000);
DISTANCE = ultrasonic();
}
noTone(buzz);
}