#define THINGER_SERIAL_DEBUG
#include <ThingerESP32.h>
#define USERNAME "bryanpratama"
#define DEVICE_ID "cloud_computing"
#define DEVICE_CREDENTIAL "4Q18QO3UysvHT6ld"
#define SSID "Wokwi-GUEST"
#define SSID_PASSWORD ""
ThingerESP32 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
Servo myservo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define PIN_TRIG 23
#define PIN_ECHO 22
#define PIN_TRIG2 21
#define PIN_ECHO2 19
#define trigPin1 23
#define echoPin1 22
#define trigPin2 21
#define echoPin2 19
long echotime;
float distance;
long echotimee;
float distancee;
long duration,cm;
long duration2,cm2;
unsigned long waktu = 0;
double jarak = 0;
unsigned long waktu2 = 0;
double jarak2 = 0;
const int BUTTON = 15;
const int LED = 2;
int button_state;
int BUTTONstate = 0;
int last_button_state;
int led_state = LOW;
int buts;
int angle;
void setup() {
Serial.begin(115200);
thing.add_wifi(SSID,SSID_PASSWORD);
thing["LED"] << digitalPin(LED);
thing["servo_statement"]>>[](pson &out){
if(angle==1){
out="Terbuka";
}else if(angle==0){
out="Tertutup";
}else{
out="?";
}
};
thing["PALANG up"] << [](pson& in){
// delay(3000);
// myservo.write(in?90:0);
// if(angle==0){
// out="OPEN";
// }else if(angel==90){
// out="CLOSE";
// }else{
// out="?";
// }
angle = 1;
servoup();
digitalWrite(LED, HIGH);
// int count = 1;
// if (count == 1 ){
// myservo.write(90);
// delay(1000);
// for (int i=90; i>=0; i--)
// {
// myservo.write(i);
// delay(15);
// }
// count++;
// }
// delay(3000);
// myservo.write(in?180:0);
// if(in.is_empty()){
// in = servoup;
// }else{
// servodown = in;
// servoup= (int)servodown;
// }
};
thing["PALANG down"] << [](pson& in){
// delay(3000);
// myservo.write(in?0:0);
angle = 0;
servodown();
digitalWrite(LED, LOW);
// for (int i=0; i<= 90; i++)
// {
// myservo.write(i);
// delay(15);
// }
// delay(3000);
// myservo.write(in?180:0);
// if(in.is_empty()){
// in = servoup;
// }else{
// servodown = in;
// servoup= (int)servodown;
// }
};
// thing["LED"] << digitalPin(LED);
thing["sensorGerak"] >> [](pson& out){
sensorUltra3();
jarak = waktu / 58;
out["hitung"] = jarak;
};
thing["sensorGerak2"] >> [](pson& out){
sensorUltra4();
jarak2 = waktu2 / 58;
out["hitung"] = jarak2;
};
Wire.begin(13, 12);
lcd.init();
lcd.backlight();
Serial.println("hello");
pinMode(BUTTON, INPUT);
pinMode(LED, OUTPUT);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_TRIG2, OUTPUT);
pinMode(PIN_ECHO2, INPUT);
pinMode(trigPin1,OUTPUT);
pinMode(echoPin1,INPUT);
pinMode(trigPin2,OUTPUT);
pinMode(echoPin2,INPUT);
myservo.attach(4);
button_state = digitalRead(BUTTON);
}
void loop() {
thing.handle();
sensorUltra();
sensorUltra2();
delay(2000);
// last_button_state = button_state; // save the last state
// button_state = digitalRead(BUTTON); // read new state
// if (last_button_state == HIGH && button_state == LOW) {
// Serial.println("The button is pressed");
// myservo.write(90);
// delay(1000);
// for (int i=90; i>=0; i--)
// {
// myservo.write(i);
// delay(15);
// }
// // digitalWrite(pinBuzzer, HIGH);
// delay(3000);
// // digitalWrite(pinBuzzer, LOW);
// delay(2000);
// for (int i=0; i<= 90; i++)
// {
// myservo.write(i);
// delay(15);
// }
// // toggle state of LED
// led_state = !led_state;
// // control LED arccoding to the toggled state
// digitalWrite(LED, led_state);
// }
lcd.setCursor(0,0);
lcd.print("Silahkan");
lcd.setCursor(0,1);
lcd.print("Scan Kartu");
BUTTONstate = digitalRead(BUTTON);
if (BUTTONstate == HIGH){
buts = 1;
Serial.println("high");
lcd.setCursor(0,0);
lcd.print("Kartu Terdeteksi");
lcd.setCursor(0,1);
lcd.print("Tidak Ada Benda");
delay(2000);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
}else{
buts = 0;
Serial.println("low");
}
if (cm < 100 && BUTTONstate == HIGH)
{
digitalWrite(LED, HIGH);
lcd.setCursor(0,0);
lcd.print("Kartu Terdeteksi");
lcd.setCursor(0,1);
lcd.print("Ada Benda");
//delay(1000);
myservo.write(90);
delay(1000);
for (int i=90; i>=0; i--)
{
myservo.write(i);
delay(15);
}
angle = 1;
// int i = 1;
// while (cm2 < 100 && i <= 1){
// printf("Hello World \n");
// delay(1000);
// i++;
// // if (cm2 < 100){
// for (int i=0; i<= 90; i++)
// {
// myservo.write(i);
// delay(15);
// }
// // }
// }
int i = 1;
do {
// printf("Hello World \n");
// i++;
angle = 1;
kondision();
delay(1000);
digitalWrite(trigPin2,LOW);
delayMicroseconds(2);
digitalWrite(trigPin2,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2,LOW);
duration2 = pulseIn(echoPin2,HIGH);
cm2 = microsecondsToCentimeters(duration2); // calling method
Serial.print("Jarak Ultrasonik 2:");
Serial.print(cm2);
Serial.print(" cm");
Serial.println("");
//delay(2000);
i = cm2;
}
while (i > 100);
for (int i=0; i<= 90; i++)
{
myservo.write(i);
delay(15);
}
angle = 0;
kondisioff();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
// downn();
// digitalWrite(pinBuzzer, HIGH);
// delay(3000);
// digitalWrite(pinBuzzer, LOW);
// delay(2000);
}
else{
digitalWrite(LED, LOW);
}
}
void kondisioff(){
angle = 0;
}
void kondision(){
angle = 1;
}
void downn(){
if (cm2 < 100){
for (int i=0; i<= 90; i++)
{
myservo.write(i);
delay(15);
}
}else{
downn();
}
}
void servoup(){
digitalWrite(LED, HIGH);
myservo.write(90);
delay(1000);
for (int i=90; i>=0; i--)
{
myservo.write(i);
delay(15);
}
}
void servodown(){
digitalWrite(LED, LOW);
for (int i=0; i<= 90; i++)
{
myservo.write(i);
delay(15);
}
}
void sensorUltra(){
digitalWrite(trigPin1,LOW);
delayMicroseconds(2);
digitalWrite(trigPin1,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1,LOW);
duration = pulseIn(echoPin1,HIGH);
cm = microsecondsToCentimeters(duration); // calling method
Serial.print("Jarak Ultrasonik 1:");
Serial.print(cm);
Serial.print(" cm");
Serial.println("");
}
void sensorUltra2(){
digitalWrite(trigPin2,LOW);
delayMicroseconds(2);
digitalWrite(trigPin2,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2,LOW);
duration2 = pulseIn(echoPin2,HIGH);
cm2 = microsecondsToCentimeters(duration2); // calling method
Serial.print("Jarak Ultrasonik 2:");
Serial.print(cm2);
Serial.print(" cm");
Serial.println("");
}
void sensorUltra3(){
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(100);
digitalWrite(PIN_TRIG, LOW);
// hitung waktu data
waktu = pulseIn(PIN_ECHO, HIGH);
Serial.println(waktu/58);
}
void sensorUltra4(){
digitalWrite(PIN_TRIG2, HIGH);
delayMicroseconds(100);
digitalWrite(PIN_TRIG2, LOW);
// hitung waktu data
waktu2 = pulseIn(PIN_ECHO2, HIGH);
Serial.println(waktu2/58);
}
long microsecondsToCentimeters(long microseconds) // method to covert microsec to centimeters
{
return microseconds / 29 / 2;
}