#include <CoreX.h>
#include "Connection.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <NewPing.h>
// Ubah nilai auth_token dan device Anda
const char* AUTH_TOKEN = "jjywGMybMtXRNbt";
const char* DEVICE_ID = "coYYiXF8a";
CoreXTimer timer; // Gunakan timer agar dapat mengeksekusi perintah setiap sekian milidetik tanpa blocking.
// Ubah nilai berikut sesuai jaringan Anda
//const char ssid[] = "DESKTOP-0LIHB6P 5113";
//const char password[] = "F41-688x";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define TRIGGER_PIN 33 // Pin Triger Ke Pin Digital 3 Arduino
#define ECHO_PIN 32 // Pin Cho Ke Pin Digital 4 Arduino
#define MAX_DISTANCE 200 // Jarak Maksimum Sensor dibuat 200cm
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); //Setup Sensor Utra sonic dengan parameter di atas
LiquidCrystal_I2C lcd(0x27, 16, 2); //Alamat i2c LCD
int jarak = 0; //deklarasi jarak
int distance; // Deklarasi Distance
const int Buzzer = 15; //Pin Buzzer di Digital 8 Arduino
const int ledR = 16; //Led Merah di digital 5 Arduino
const int ledY = 4; ////Led Kuning di digital 6 Arduino
const int ledG = 2; //Led Hijau di digital 7 Arduino
int BuzzerState = LOW;
unsigned long previousMillis = 0;
const long interval = 100; //Menentukan Delay untuk Buzzer dekat
const long interval2 = 500;//Menentukan Delay untuk Buzzer seddang
//==================================================================================================
//==================================================================================================
void send() {
int Distance = analogRead(jarak);
corex.send("sensor", Distance);
}
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, pass);
corex.begin(net);
timer.setInterval(1000, send); // Lakukan send setiap 1000 milidetik.
setupCoreX();
//lcd.begin(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
pinMode(ledR, OUTPUT); //Seting LedR sebagai Output
pinMode(ledY, OUTPUT);//Seting Ledy sebagai Output
pinMode(ledG, OUTPUT);//Seting Ledg sebagai Output
pinMode(Buzzer, OUTPUT);//Seting Buzzer sebagai Output
}
//==================================================================================================
//==================================================================================================
void loop()
{
timer.run(); // Jalankan timer.
//delay(10); // Hapus komentar untuk memberikan delay 10 milidetik jika terjadi kendala pada stabilitas WiFi.
// Periksa apakah perangkat masih terhubung.
if (!corex.connected()) {
setupCoreX();
}
distance = (sonar.ping_cm()); //Menyatakan bahwa isi distace adalah Hasil dari pengukuran sensor
jarak=distance; //Menyatakan bahwa jarak adalah isi dari distace
Serial.println(jarak);
if (jarak <= 0) //jika jarak kurang dari sama dengan 0
{
jarak=0; //maka jarak hasilnya 0
digitalWrite(Buzzer, LOW);
digitalWrite(ledR, LOW); //matikan Led Merah
digitalWrite(ledY, LOW); //matikan Led kuning
digitalWrite(ledG, LOW);//matikan Led hijau
lcd.setCursor(8,1);
lcd.print("Aman ");
}
else if (jarak >= 2 && jarak <= 10) //menyatakan jika jarak antara 5-10cm maka eksekusi perintah di bawah
{
digitalWrite(ledR, HIGH); //nyalakan Led Merah
digitalWrite(ledY, LOW); //matikan Led kuning
digitalWrite(ledG, LOW);//matikan Led hijau
lcd.setCursor(8,1); //Seting Kursor LCD di kolom 8 baris satu
lcd.print("BAHAYA "); //Tulis di LCD bahaya
buzzerDekat(); //eksekusi program buzzer Dekat
}
else if (jarak >= 11 && jarak <= 30)//menyatakan jika jarak antara 11-30cm maka eksekusi perintah di bawah
{
digitalWrite(ledR, LOW);//Led Merah Mati
digitalWrite(ledY, HIGH);//Led Kuning Menyala
digitalWrite(ledG, LOW);//Led Hijau Mati
lcd.setCursor(8,1);
lcd.print("HATI2 ");//Status di LCD Hati-Hati
buzzerSedang();
}
else if (jarak >= 30)
{
digitalWrite(ledR, LOW);//Led Merah mati
digitalWrite(ledY, LOW);//Led Kuning Mati
digitalWrite(ledG, HIGH);//Led Hijau Nyala
lcd.setCursor(8,1);
lcd.print("Aman ");//Status di LCD Aman
digitalWrite(Buzzer, LOW);
}
delay(100); // Tampilkan pengukuran jarak setiap 100mS
lcd.setCursor(0,0); //set kursor di kolom 0 dan baris 0
lcd.print("Jarak : "); //Prin tulisan jarak di lcd pada kursor di atas
lcd.print(sonar.ping_cm()); // tampilkan hasil pengukuran
lcd.print(" cm "); //Tampilkan tulisan CM (otomatis tampil setelah nilai jarak)
lcd.setCursor(0,1); // Set Kursor di kolom 0 baris 1
lcd.print("Status: "); //MenampilkanStatus pada LCD
}
//==================================================================================================
//==================================================================================================
void buzzerDekat() //ini merupakan program nyala buzzer tanpa menggunakan delay dimana nilai delaynya adalah bilangan pada besaran interval
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (BuzzerState == LOW)
{
BuzzerState = HIGH;
}
else
{
BuzzerState = LOW;
}
digitalWrite(Buzzer, BuzzerState);
}
}
//==================================================================================================
void buzzerSedang() //ini merupakan program nyala buzzer tanpa menggunakan delay dimana nilai delaynya adalah bilangan pada besaran interval
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval2)
{
previousMillis = currentMillis;
if (BuzzerState == LOW)
{
BuzzerState = HIGH;
}
else
{
BuzzerState = LOW;
}
digitalWrite(Buzzer, BuzzerState);
}
}