ROBOT SOCKER WITH NodeMCU / Wmos D1 Mini
ROBOT SOCKER WITH NodeMCU / Wmos D1 Mini
// Arduino IDE versi 2.2.1
// BOARD : LOLIN(WEMOS) D1 mini Lite (esp8266:esp8266:d1_mini_lite)
// ROBOT SOCKER NODEMCU BY ASUN86 10 FEB 2025
// OUT A = GEAR kiri
// OUT B = GEAR kanan
/******* WiFi Robot Remote Control Mode ********/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
// connections for drive Motors
int PWM_A = D6; // tidak digunakan
int PWM_B = D7; // tidak digunakan
int DIR_A = D1;
int DIR_B = D2;
int DIR_C = D3;
int DIR_D = D4;
const int buzPin = D5; // set digital pin D5 as buzzer pin (use active buzzer)
const int ledPin = D8; // set digital pin D8 as LED pin (use super bright LED)
const int wifiLedPin = D0; // set digital pin D0 as indication, the LED turn on if NodeMCU connected to WiFi as STA mode
String command; // String to store app command state.
int SPEED = 1023; // 330 - 1023.
int speed_Coeff = 3;
ESP8266WebServer server(80); // Create a webserver object that listens for HTTP request on port 80
unsigned long previousMillis = 0;
String sta_ssid = ""; // set Wifi networks you want to connect to
String sta_password = ""; // set password for Wifi networks
void setup(){
Serial.begin(115200); // bisa diganti 9600 supara bisa berkomunikasi dg hc05
Serial.println();
Serial.println("WiFi Robot Remote Control Mode");
Serial.println("--------------------------------------");
pinMode(buzPin, OUTPUT); // sets the buzzer pin as an Output
pinMode(ledPin, OUTPUT); // sets the LED pin as an Output
pinMode(wifiLedPin, OUTPUT); // sets the Wifi LED pin as an Output
digitalWrite(buzPin, LOW);
digitalWrite(ledPin, LOW);
digitalWrite(wifiLedPin, HIGH);
// Set all the motor control pins to outputs
pinMode(PWM_A, OUTPUT);
pinMode(PWM_B, OUTPUT);
pinMode(DIR_A, OUTPUT);
pinMode(DIR_B, OUTPUT);
pinMode(DIR_C, OUTPUT);
pinMode(DIR_D, OUTPUT);
// Turn off motors - Initial state
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
digitalWrite(DIR_C, LOW);
digitalWrite(DIR_D, LOW);
analogWrite(PWM_A, 0);
analogWrite(PWM_B, 0);
// set NodeMCU Wifi hostname based on chip mac address
String chip_id = String(ESP.getChipId(), HEX);
int i = chip_id.length()-4;
chip_id = chip_id.substring(i);
chip_id = "wificar-" + chip_id; // nama robot contor wificar-RFI01
String hostname(chip_id);
Serial.println();
Serial.println("Hostname: "+hostname);
// first, set NodeMCU as STA mode to connect with a Wifi network
WiFi.mode(WIFI_STA);
WiFi.begin(sta_ssid.c_str(), sta_password.c_str());
Serial.println("");
Serial.print("Connecting to: ");
Serial.println(sta_ssid);
Serial.print("Password: ");
Serial.println(sta_password);
// try to connect with Wifi network about 10 seconds
unsigned long currentMillis = millis();
previousMillis = currentMillis;
while (WiFi.status() != WL_CONNECTED && currentMillis - previousMillis <= 10000) {
delay(500);
Serial.print(".");
currentMillis = millis();
}
// if failed to connect with Wifi network set NodeMCU as AP mode
if (WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("WiFi-STA-Mode");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
digitalWrite(wifiLedPin, LOW); // Wifi LED on when connected to Wifi as STA mode
delay(3000);
} else {
WiFi.mode(WIFI_AP);
WiFi.softAP(hostname.c_str());
IPAddress myIP = WiFi.softAPIP();
Serial.println("");
Serial.println("WiFi failed connected to " + sta_ssid);
Serial.println("");
Serial.println("WiFi-AP-Mode");
Serial.print("AP IP address: ");
Serial.println(myIP);
digitalWrite(wifiLedPin, HIGH); // Wifi LED off when status as AP mode
delay(3000);
}
server.on ( "/", HTTP_handleRoot ); // call the 'handleRoot' function when a client requests URI "/"
server.onNotFound ( HTTP_handleRoot ); // when a client requests an unknown URI (i.e. something other than "/"), call function "handleNotFound"
server.begin(); // actually start the server
ArduinoOTA.begin(); // enable to receive update/uploade firmware via Wifi OTA
}
void loop() {
ArduinoOTA.handle(); // listen for update OTA request from clients
server.handleClient(); // listen for HTTP requests from clients
command = server.arg("State"); // check HTPP request, if has arguments "State" then saved the value
if (command == "F") Forward(); // check string then call a function or set a value
else if (command == "B") Backward();
else if (command == "R") TurnRight();
else if (command == "L") TurnLeft();
else if (command == "G") ForwardLeft();
else if (command == "H") BackwardLeft();
else if (command == "I") ForwardRight();
else if (command == "J") BackwardRight();
else if (command == "S") Stop();
else if (command == "V") BeepHorn();
else if (command == "W") TurnLightOn();
else if (command == "w") TurnLightOff();
else if (command == "0") SPEED = 330;
else if (command == "1") SPEED = 400;
else if (command == "2") SPEED = 470;
else if (command == "3") SPEED = 540;
else if (command == "4") SPEED = 610;
else if (command == "5") SPEED = 680;
else if (command == "6") SPEED = 750;
else if (command == "7") SPEED = 820;
else if (command == "8") SPEED = 890;
else if (command == "9") SPEED = 960;
else if (command == "q") SPEED = 1023;
}
// function prototypes for HTTP handlers
void HTTP_handleRoot(void){
server.send ( 200, "text/html", "" ); // Send HTTP status 200 (Ok) and send some text to the browser/client
if( server.hasArg("State") ){
Serial.println(server.arg("State"));
}
}
void handleNotFound(){
server.send(404, "text/plain", "404: Not found"); // Send HTTP status 404 (Not Found) when there's no handler for the URI in the request
}
// function to move forward
void Forward(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
digitalWrite(DIR_C, HIGH);
digitalWrite(DIR_D, LOW);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to move backward
void Backward(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
digitalWrite(DIR_C, LOW);
digitalWrite(DIR_D, HIGH);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to turn right
void TurnRight(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
digitalWrite(DIR_C, HIGH);
digitalWrite(DIR_D, LOW);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to turn left
void TurnLeft(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
digitalWrite(DIR_C, LOW);
digitalWrite(DIR_D, LOW);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to move forward left
void ForwardLeft(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
digitalWrite(DIR_C, LOW);
digitalWrite(DIR_D, HIGH);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to move backward left
void BackwardLeft(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
digitalWrite(DIR_C, HIGH);
digitalWrite(DIR_D, LOW);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to move forward right
void ForwardRight(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, HIGH);
digitalWrite(DIR_C, HIGH);
digitalWrite(DIR_D, LOW);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to move backward left
void BackwardRight(){
digitalWrite(DIR_A, HIGH);
digitalWrite(DIR_B, LOW);
digitalWrite(DIR_C, LOW);
digitalWrite(DIR_D, HIGH);
//analogWrite(PWM_A, SPEED);
//analogWrite(PWM_B, SPEED);
}
// function to stop motors
void Stop(){
digitalWrite(DIR_A, LOW);
digitalWrite(DIR_B, LOW);
digitalWrite(DIR_C, LOW);
digitalWrite(DIR_D, LOW);
//analogWrite(PWM_A, 0);
//analogWrite(PWM_B, 0);
}
// function to beep a buzzer
void BeepHorn(){
digitalWrite(buzPin, HIGH);
delay(150);
digitalWrite(buzPin, LOW);
delay(80);
}
// function to turn on LED
void TurnLightOn(){
digitalWrite(ledPin, HIGH);
}
// function to turn off LED
void TurnLightOff(){
digitalWrite(ledPin, LOW);
}
hasil edit, coding lebih simple, tanpa PWM
// Arduino IDE versi 2.2.1
// BOARD : LOLIN(WEMOS) D1 mini Lite (esp8266:esp8266:d1_mini_lite)
// ROBOT SOCKER NODEMCU BY ASUN86 10 FEB 2025
// OUT A = GEAR kiri
// OUT B = GEAR kanan
/******* WiFi Robot Remote Control Mode ********/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
// connections for drive Motors (hanya menggunakan pin direction)
int GEAR_KIRI_MAJU = D1;
int GEAR_KIRI_MUNDUR = D2;
int GEAR_KANAN_MAJU = D3;
int GEAR_KANAN_MUNDUR = D4;
const int buzPin = D5; // pin buzzer (active buzzer)
const int ledPin = D8; // pin LED
const int wifiLedPin = D0; // indikator WiFi STA mode
String command; // String untuk menyimpan perintah
ESP8266WebServer server(80); // Webserver pada port 80
unsigned long previousMillis = 0;
String sta_ssid = ""; // SSID WiFi
String sta_password = ""; // Password WiFi
// Deklarasi fungsi
void HTTP_handleRoot(void);
void stopMotor();
void maju();
void mundur();
void putarKanan();
void putarKiri();
void majuKiri();
void mundurKiri();
void majuKanan();
void mundurKanan();
void bunyiBuzzer();
void nyalaLampu();
void matiLampu();
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("WiFi Robot Remote Control Mode - SIMPLE");
Serial.println("--------------------------------------");
// Setup pin mode
pinMode(buzPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(wifiLedPin, OUTPUT);
digitalWrite(buzPin, LOW);
digitalWrite(ledPin, LOW);
digitalWrite(wifiLedPin, HIGH);
// Setup pin motor
pinMode(GEAR_KIRI_MAJU, OUTPUT);
pinMode(GEAR_KIRI_MUNDUR, OUTPUT);
pinMode(GEAR_KANAN_MAJU, OUTPUT);
pinMode(GEAR_KANAN_MUNDUR, OUTPUT);
// Matikan semua motor - State awal
stopMotor();
// Setup hostname berdasarkan chip ID
String chip_id = String(ESP.getChipId(), HEX);
int i = chip_id.length()-4;
chip_id = chip_id.substring(i);
String hostname = "wificar-" + chip_id;
Serial.println("Hostname: " + hostname);
// Koneksi WiFi STA mode
WiFi.mode(WIFI_STA);
WiFi.begin(sta_ssid.c_str(), sta_password.c_str());
Serial.println("");
Serial.print("Connecting to: ");
Serial.println(sta_ssid);
// Tunggu koneksi WiFi 10 detik
unsigned long currentMillis = millis();
previousMillis = currentMillis;
while (WiFi.status() != WL_CONNECTED && currentMillis - previousMillis <= 10000) {
delay(500);
Serial.print(".");
currentMillis = millis();
}
// Jika gagal konek, mode AP
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi-STA-Mode");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
digitalWrite(wifiLedPin, LOW); // LED nyala saat STA mode
} else {
WiFi.mode(WIFI_AP);
WiFi.softAP(hostname.c_str());
Serial.println("\nWiFi failed to: " + sta_ssid);
Serial.println("WiFi-AP-Mode");
Serial.print("AP IP: ");
Serial.println(WiFi.softAPIP());
digitalWrite(wifiLedPin, HIGH); // LED mati saat AP mode
}
server.on("/", HTTP_handleRoot);
server.onNotFound(HTTP_handleRoot);
server.begin();
ArduinoOTA.begin();
}
void loop() {
ArduinoOTA.handle();
server.handleClient();
command = server.arg("State");
if (command == "F") maju();
else if (command == "B") mundur();
else if (command == "L") putarKanan();
else if (command == "R") putarKiri();
else if (command == "G") majuKiri();
else if (command == "H") mundurKiri();
else if (command == "I") majuKanan();
else if (command == "J") mundurKanan();
else if (command == "S") stopMotor();
else if (command == "V") bunyiBuzzer();
else if (command == "W") nyalaLampu();
else if (command == "w") matiLampu();
delay(10);
}
void HTTP_handleRoot(void) {
server.send(200, "text/html", "");
if(server.hasArg("State")) {
Serial.println(server.arg("State"));
}
}
// Fungsi kontrol motor yang disederhanakan
void stopMotor() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void maju() {
digitalWrite(GEAR_KIRI_MAJU, HIGH);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, HIGH);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void mundur() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, HIGH);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, HIGH);
}
void putarKanan() {
digitalWrite(GEAR_KIRI_MAJU, HIGH);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, HIGH);
}
void putarKiri() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, HIGH);
digitalWrite(GEAR_KANAN_MAJU, HIGH);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void majuKiri() {
digitalWrite(GEAR_KIRI_MAJU, HIGH);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void mundurKiri() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, HIGH);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void majuKanan() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, HIGH);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void mundurKanan() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, HIGH);
}
void bunyiBuzzer() {
digitalWrite(buzPin, HIGH);
delay(150);
digitalWrite(buzPin, LOW);
}
void nyalaLampu() {
digitalWrite(ledPin, HIGH);
}
void matiLampu() {
digitalWrite(ledPin, LOW);
}
HASIL MODIFIKASI DENGAN ULTRASONIC versi 1
// Arduino IDE versi 2.2.1
// BOARD : LOLIN(WEMOS) D1 mini Lite (esp8266:esp8266:d1_mini_lite)
// ROBOT SOCKER NODEMCU BY ASUN86 10 FEB 2025
// OUT A = GEAR kiri
// OUT B = GEAR kanan
/******* WiFi Robot Remote Control Mode ********/
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
// connections for drive Motors (hanya menggunakan pin direction)
int GEAR_KIRI_MAJU = D1;
int GEAR_KIRI_MUNDUR = D2;
int GEAR_KANAN_MAJU = D3;
int GEAR_KANAN_MUNDUR = D4;
// Sensor HC-SR04
const int trigPin = D6; // Pin Trigger HC-SR04
const int echoPin = D7; // Pin Echo HC-SR04
const int buzPin = D5; // pin buzzer (active buzzer)
const int ledPin = D8; // pin LED
const int wifiLedPin = D0; // indikator WiFi STA mode
String command; // String untuk menyimpan perintah
String lastCommand = ""; // Menyimpan perintah terakhir dari remote
ESP8266WebServer server(80); // Webserver pada port 80
unsigned long previousMillis = 0;
unsigned long lastRemoteTime = 0; // Waktu terakhir menerima perintah remote
bool autoMode = false; // Mode automatic ultrasonic
const unsigned long AUTO_MODE_DELAY = 5000; // 5 detik delay sebelum auto mode
const int OBSTACLE_DISTANCE = 10; // Jarak obstacle 10 cm
// WiFi Credentials - ISI DENGAN SSID DAN PASSWORD ANDA
const char* sta_ssid = "NAMA_WIFI_ANDA"; // Ganti dengan SSID WiFi Anda
const char* sta_password = "PASSWORD_WIFI_ANDA"; // Ganti dengan password WiFi Anda
// Deklarasi fungsi
void HTTP_handleRoot(void);
void stopMotor();
void maju();
void mundur();
void putarKanan();
void putarKiri();
void majuKiri();
void mundurKiri();
void majuKanan();
void mundurKanan();
void bunyiBuzzer();
void nyalaLampu();
void matiLampu();
long bacaJarakUltrasonic();
void handleAutoMode();
void setup() {
Serial.begin(115200);
Serial.println();
Serial.println("WiFi Robot Remote Control Mode - WITH ULTRASONIC");
Serial.println("--------------------------------------");
// Setup pin mode
pinMode(buzPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(wifiLedPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
digitalWrite(buzPin, LOW);
digitalWrite(ledPin, LOW);
digitalWrite(wifiLedPin, HIGH);
// Setup pin motor
pinMode(GEAR_KIRI_MAJU, OUTPUT);
pinMode(GEAR_KIRI_MUNDUR, OUTPUT);
pinMode(GEAR_KANAN_MAJU, OUTPUT);
pinMode(GEAR_KANAN_MUNDUR, OUTPUT);
// Matikan semua motor - State awal
stopMotor();
// Setup hostname berdasarkan chip ID
String chip_id = String(ESP.getChipId(), HEX);
int i = chip_id.length()-4;
chip_id = chip_id.substring(i);
String hostname = "wificar-" + chip_id;
Serial.println("Hostname: " + hostname);
// Koneksi WiFi STA mode
WiFi.mode(WIFI_STA);
WiFi.begin(sta_ssid, sta_password);
Serial.println("");
Serial.print("Connecting to: ");
Serial.println(sta_ssid);
Serial.print("Password: ");
Serial.println(sta_password);
// Tunggu koneksi WiFi 10 detik
unsigned long currentMillis = millis();
previousMillis = currentMillis;
while (WiFi.status() != WL_CONNECTED && currentMillis - previousMillis <= 10000) {
delay(500);
Serial.print(".");
currentMillis = millis();
}
// Jika gagal konek, mode AP
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi-STA-Mode");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
digitalWrite(wifiLedPin, LOW); // LED nyala saat STA mode
} else {
WiFi.mode(WIFI_AP);
WiFi.softAP(hostname.c_str());
Serial.println("\nWiFi failed to: " + String(sta_ssid));
Serial.println("WiFi-AP-Mode");
Serial.print("AP IP: ");
Serial.println(WiFi.softAPIP());
digitalWrite(wifiLedPin, HIGH); // LED mati saat AP mode
}
server.on("/", HTTP_handleRoot);
server.onNotFound(HTTP_handleRoot);
server.begin();
ArduinoOTA.begin();
// Inisialisasi waktu terakhir remote
lastRemoteTime = millis();
bunyiBuzzer(); // Indikator startup
}
void loop() {
ArduinoOTA.handle();
server.handleClient();
command = server.arg("State");
if (command != "") {
lastCommand = command;
lastRemoteTime = millis(); // Reset timer auto mode
autoMode = false; // Keluar dari auto mode
if (command == "F") maju();
else if (command == "B") mundur();
else if (command == "L") putarKanan();
else if (command == "R") putarKiri();
else if (command == "G") majuKiri();
else if (command == "H") mundurKiri();
else if (command == "I") majuKanan();
else if (command == "J") mundurKanan();
else if (command == "S") stopMotor();
else if (command == "V") bunyiBuzzer();
else if (command == "W") nyalaLampu();
else if (command == "w") matiLampu();
} else {
// Jika tidak ada perintah remote, cek apakah sudah waktunya auto mode
if (!autoMode && (millis() - lastRemoteTime > AUTO_MODE_DELAY)) {
autoMode = true;
Serial.println("Auto Mode Activated - Ultrasonic");
bunyiBuzzer(); // Indikator masuk auto mode
}
// Jika dalam auto mode, handle pergerakan ultrasonic
if (autoMode) {
handleAutoMode();
}
}
delay(50); // Delay sedikit lebih lama untuk stabilitas
}
void HTTP_handleRoot(void) {
server.send(200, "text/html", "");
if(server.hasArg("State")) {
Serial.println(server.arg("State"));
}
}
// Fungsi membaca jarak dari HC-SR04
long bacaJarakUltrasonic() {
long duration, distance;
// Clear trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Set trigPin HIGH untuk 10 microsecond
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Baca echoPin, mengembalikan waktu tempuh suara dalam microsecond
duration = pulseIn(echoPin, HIGH, 30000); // Timeout 30ms
// Hitung jarak (dalam cm)
distance = duration * 0.034 / 2;
// Jika timeout atau jarak tidak valid, return -1
if (duration == 0 || distance > 400) {
return -1;
}
return distance;
}
// Fungsi handle auto mode dengan ultrasonic
void handleAutoMode() {
long jarak = bacaJarakUltrasonic();
if (jarak != -1) {
Serial.print("Jarak: ");
Serial.print(jarak);
Serial.println(" cm");
// Jika ada obstacle dalam jarak 10 cm atau kurang
if (jarak <= OBSTACLE_DISTANCE && jarak > 0) {
Serial.println("Obstacle detected! Moving...");
maju(); // Bergerak maju menghindari obstacle
} else {
Serial.println("No obstacle, stopping...");
stopMotor(); // Berhenti jika tidak ada obstacle
}
} else {
Serial.println("Error reading ultrasonic sensor");
stopMotor();
}
delay(100); // Delay antara pembacaan ultrasonic
}
// Fungsi kontrol motor yang disederhanakan
void stopMotor() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void maju() {
digitalWrite(GEAR_KIRI_MAJU, HIGH);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, HIGH);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void mundur() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, HIGH);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, HIGH);
}
void putarKanan() {
digitalWrite(GEAR_KIRI_MAJU, HIGH);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, HIGH);
}
void putarKiri() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, HIGH);
digitalWrite(GEAR_KANAN_MAJU, HIGH);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void majuKiri() {
digitalWrite(GEAR_KIRI_MAJU, HIGH);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void mundurKiri() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, HIGH);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void majuKanan() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, HIGH);
digitalWrite(GEAR_KANAN_MUNDUR, LOW);
}
void mundurKanan() {
digitalWrite(GEAR_KIRI_MAJU, LOW);
digitalWrite(GEAR_KIRI_MUNDUR, LOW);
digitalWrite(GEAR_KANAN_MAJU, LOW);
digitalWrite(GEAR_KANAN_MUNDUR, HIGH);
}
void bunyiBuzzer() {
digitalWrite(buzPin, HIGH);
delay(150);
digitalWrite(buzPin, LOW);
delay(80);
}
void nyalaLampu() {
digitalWrite(ledPin, HIGH);
}
void matiLampu() {
digitalWrite(ledPin, LOW);
}