Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
7.4 kB
4
Indexable
Never
#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");
}
Leave a Comment