Untitled
unknown
plain_text
a year ago
7.4 kB
7
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