// ตัวแปรสำหรับ LCD 16x2 I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int StateMetals = 0;
int StatePlastic = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ตัวแปรสำหรับ Servo Motor
#include <Servo.h>
Servo myservo;
// ตัวแปรสำหรับขาพิน Ultrasonic
const int trigPin = 2;
const int echoPin = 3;
// ตัวแปรสำหรับเก็บค่าระยะทาง
long duration;
long speedofSound = 343;
long distanceCM;
// ตัวแปรสำหรับเซนเซอร์
int Senser = A0;
int Senser2 = A1;
int StateSenser = 0;
int StateSenser2 = 0;
// ตัวแปรสำหรับ Relay ไฟแดง, ไฟเขียว
int relay_green = 11;
int relay_red = 10;
void setup() {
Serial.begin(9600);
// ตัวแปรสำหรับ Ultrasonic
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// ตัวแปรสำหรับ Relay ไฟสถานะ
pinMode(relay_green, OUTPUT);
pinMode(relay_red, OUTPUT);
// ตัวแปรสำหรับ Servo motor
myservo.attach(9);
// ตัวแปรสำหรับ LCD 16x2 I2C
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Metals : ");
lcd.println(" - ");
lcd.setCursor(1, 1);
lcd.print("Plastic : ");
lcd.println(" - ");
}
void loop() {
//Ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// อ่านระยะทางจากเซ็นเซอร์ Ultrasonic
duration = pulseIn(echoPin, HIGH, 10000);
// คำนวณระยะทางในหน่วยเซนติเมตร
distanceCM = (speedofSound * duration) / 20000;
Serial.print(distanceCM);
Serial.println(" cm");
StateSenser = digitalRead(A0);
StateSenser2 = digitalRead(A1);
if( StateSenser == HIGH ){ //ของตัวเอง LOW นะ
delay(500);
digitalWrite(relay_green, HIGH); //ของตัวเอง LOW นะ
digitalWrite(relay_red, LOW); //ของตัวเอง HIGH นะ
Serial.println(" Metals");
delay(500);
myservo.write(90);
delay(1000);
myservo.write(0);
delay(1000);
myservo.write(90);
delay(1000);
digitalWrite(relay_green, LOW); //ของตัวเอง LOW นะ
delay(600);
StateMetals++;
lcd.setCursor(11, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print(StateMetals);
if (StateMetals == 10) {
lcd.setCursor(10, 1);
lcd.print("Full");
}
}else{
digitalWrite(relay_green, LOW); //ของตัวเอง HIGH นะ
digitalWrite(relay_red, LOW); //ของตัวเอง HIGH นะ
delay(1000);
}
if(distanceCM > 3 && distanceCM < 50 ){
delay(500);
digitalWrite(relay_red, HIGH); //ของตัวเอง LOW นะ
digitalWrite(relay_green, LOW); //ของตัวเอง HIGH นะ
delay(500);
Serial.println(" Plastic");
delay(1000);
myservo.write(90);
delay(500);
myservo.write(180);
delay(500);
myservo.write(90);
delay(500);
digitalWrite(relay_red, LOW); //ของตัวเอง HIGH นะ
delay(600);
StatePlastic++;
lcd.setCursor(12, 0);
lcd.print(" ");
lcd.setCursor(12, 0);
lcd.print(StatePlastic);
if (StatePlastic == 10) {
lcd.setCursor(10, 0);
lcd.print("Full");
}
}else{
digitalWrite(relay_green, LOW); //ของตัวเอง HIGH นะ
digitalWrite(relay_red, LOW); //ของตัวเอง HIGH นะ
delay(1000);
}
}