Untitled
unknown
plain_text
a year ago
7.4 kB
11
Indexable
#include "SoftwareSerial.h"
#include "WiFiEsp.h"
#include "Servo.h"
SoftwareSerial wifiSerial(2, 3);
#define echoPin A2
#define trigPin A1
Servo servo1;
Servo servo2;
Servo servo3;
const int IRPin11 = 9;
const int IRPin12 = 10;
const int IRPin21 = 11;
const int IRPin22 = 12;
const int IRPin31 = 13;
long durasi;
int jarak;
int total;
char* SSID = "Lanang";
char* PASS = "12345678";
String serverIP = "2018072.vwxyzar.my.id";
int serverPort = 5051;
const String endpointUmpan = "/2018072/public/save-data-from-arduino";
const String endpointTikus = "/2018072/public/save-data-tikus-from-arduino";
unsigned long lastSendTime = 0; // Waktu terakhir kali data dikirim
const unsigned long sendInterval = 10000; // Interval pengiriman data dalam milidetik
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(IRPin11, INPUT);
pinMode(IRPin12, INPUT);
pinMode(IRPin21, INPUT);
pinMode(IRPin22, INPUT);
pinMode(IRPin31, INPUT);
servo1.attach(4);
servo2.attach(5);
servo3.attach(6);
servo1.write(180);
delay(200);
servo2.write(0);
delay(200);
servo3.write(10);
delay(200);
// Detach servo sebelum inisialisasi WiFi
servo1.detach();
servo2.detach();
servo3.detach();
setWifi(SSID, PASS);
// Attach kembali servo setelah inisialisasi WiFi
servo1.attach(4);
servo2.attach(5);
servo3.attach(6);
}
void loop() {
digitalWrite(trigPin, LOW); // Trig tidak aktif
delayMicroseconds(5);
digitalWrite(trigPin, HIGH); // Trig aktif
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durasi = pulseIn(echoPin, HIGH);
jarak = durasi * 0.034 / 2;
// Menampilkan jarak setiap saat
if (jarak != 0) {
Serial.print("Jarak : ");
Serial.print(jarak);
Serial.println(" cm");
delay(2000);
// Kirim data jika cukup waktu telah berlalu
if (millis() - lastSendTime >= sendInterval) {
sendData(jarak);
lastSendTime = millis(); // Perbarui waktu terakhir kali data dikirim
}
} else {
Serial.println("Jarak tidak masuk");
}
int irState11 = !digitalRead(IRPin11);
int irState12 = !digitalRead(IRPin12);
int irState21 = !digitalRead(IRPin21);
int irState22 = !digitalRead(IRPin22);
total = !digitalRead(IRPin31);
int pintu1 = 0;
int pintu2 = 0;
int pintuUmpan = 0;
// Menentukan pintu 1 berdasarkan kondisi sensor
if (irState11 == HIGH && irState12 == HIGH) {
pintu1 = 1;
} else if (irState11 == LOW && irState12 == LOW) {
pintu1 = 2;
}
// Menentukan pintu 2 berdasarkan kondisi sensor
if (irState21 == HIGH && irState22 == HIGH) {
pintu2 = 3;
} else if (irState21 == LOW && irState22 == LOW) {
pintu2 = 4;
}
// Menentukan pintu 3 berdasarkan kondisi sensor
if (total == HIGH) {
pintuUmpan = 5;
} else if (total == LOW) {
pintuUmpan = 6;
}
if (pintu1 == 1 && pintu2 != 3 && pintuUmpan != 5) {
Serial.println("Tikus terdeteksi di pintu pertama menuju pintu kedua.");
Serial.println(total);
servo1.write(0); // Pintu tutup
delay(200);
servo2.write(180); // Pintu buka
delay(200);
servo3.write(10); // Pintu tutup
delay(200);
} else if (pintu1 != 1 && pintu2 == 3 && pintuUmpan != 5) {
Serial.println("Tikus terdeteksi di pintu kedua, tetapi belum masuk jebakan.");
servo1.write(180); // Pintu buka
delay(200);
servo2.write(0); // Pintu tutup
delay(200);
servo3.write(10); // Pintu tutup
delay(200);
} else if (pintu1 != 1 && pintu2 != 3 && pintuUmpan == 5 ) {
Serial.println("Tikus sudah masuk jebakan.");
servo1.write(180); // Pintu buka
delay(200);
servo2.write(0); // Pintu tutup
delay(200);
servo3.write(83); // Pintu tutup
Serial.println(total);
sendDataTikus(total);
bool tikusMasihTerdeteksi = true; // variabel untuk menandai apakah tikus masih terdeteksi
// Menunggu sampai tikus keluar dari jebakan
while (tikusMasihTerdeteksi) {
total = !digitalRead(IRPin31); // Perbarui nilai total
if (total == LOW) {
// Jika total == 6, keluar dari loop
tikusMasihTerdeteksi = false; // tandai bahwa tikus sudah tidak terdeteksi lagi
break;
}
delay(100); // Tambahkan delay untuk mengurangi beban pada prosesor
}
delay(1000);
}
}
void setWifi(char* kriot_ssid, char* kriot_pass) {
wifiSerial.begin(9600);
WiFi.init(&wifiSerial);
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("[WIFI]: WiFi module not present");
while (true)
;
}
while (WiFi.status() != WL_CONNECTED) {
Serial.print("[WIFI]: Connecting to ");
Serial.println(SSID);
if (WiFi.begin(SSID, PASS) != WL_CONNECTED) {
Serial.println("[WIFI]: Connection failed");
delay(1000);
}
}
Serial.println("[WIFI]: Connected");
}
void sendData(int jaraks) {
// Detach servo sebelum mengirim data
servo1.detach();
servo2.detach();
servo3.detach();
WiFiEspClient client;
if (client.connect(serverIP.c_str(), serverPort)) {
Serial.println("Connected to server");
String data = "jarak=" + String(jaraks);
client.println("POST " + endpointUmpan + " HTTP/1.1");
client.println("Host: " + serverIP);
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Length: " + String(data.length()));
client.println();
client.println(data);
delay(10); // Tunggu sebentar setelah pengiriman data untuk memastikan data terkirim
client.stop();
Serial.println("Data Jarak sent");
} else {
Serial.println("Connection to server failed");
}
// Attach kembali servo setelah mengirim data
servo1.attach(4);
servo2.attach(5);
servo3.attach(6);
}
void sendDataTikus(int tot) {
// Detach servo sebelum mengirim data
servo1.detach();
servo2.detach();
servo3.detach();
WiFiEspClient client;
if (client.connect(serverIP.c_str(), serverPort)) {
Serial.println("Connected to server");
String datai = "total=" + String(tot);
client.println("POST " + endpointTikus + " HTTP/1.1");
client.println("Host: " + serverIP);
client.println("Content-Type: application/x-www-form-urlencoded");
client.println("Content-Length: " + String(datai.length()));
client.println();
client.println(datai);
Serial.println("Data Tikus sent");
delay(10); // Tunggu sebentar setelah pengiriman data untuk memastikan data terkirim
// Tambahkan penanganan kesalahan
if (!client.connected() || client.available()) {
// Data terkirim, atau ada kesalahan, tunggu sebentar
delay(100);
}
// Tambahkan penanganan kesalahan
if (client.available()) {
// Ada respon dari server, baca dan tampilkan di Serial Monitor
while (client.available()) {
char c = client.read();
Serial.print(c);
}
}
client.stop();
} else {
Serial.println("Failed to connect to server");
}
// Attach kembali servo setelah mengirim data
servo1.attach(4);
servo2.attach(5);
servo3.attach(6);
}
void resetArduino() {
asm volatile(" jmp 0");
}
Editor is loading...
Leave a Comment