sorry if my english is bad
please help complete my project
please show the error so that you can read text from esp32 bluetooth to android,
If you use the Arduino serial monitor, it can be read
#include <BluetoothSerial.h>
#include <EEPROM.h>
// Inisialisasi Bluetooth Serial
BluetoothSerial SerialBT;
// EEPROM Addresses
#define MODE_ADDR 0
#define SPEED_ADDR 4
// Daftar mode LED pattern
const char* modeNames[] = {"Pattern 1", "Pattern 2", "Pattern 3", "Pattern 4"};
const int maxMode = sizeof(modeNames) / sizeof(modeNames[0]) - 1;
// Variabel global
int currentMode = 0; // Mode awal
bool isRunning = false; // Status aktif/tidak
int speed = 500; // Kecepatan awal dalam ms (500 ms)
const int maxSpeed = 1000; // Kecepatan maksimum
const int minSpeed = 100; // Kecepatan minimum
unsigned long previousMillis = 0;
// Pin LED (sesuaikan dengan board ESP32 Anda)
const int ledPins[] = {2, 4, 5, 18}; // GPIO untuk LED
const int numLeds = sizeof(ledPins) / sizeof(ledPins[0]);
int currentLed = 0; // LED aktif saat ini
void setup() {
// Inisialisasi Serial, Bluetooth, dan EEPROM
Serial.begin(115200);
SerialBT.begin("ESP32_BT");
EEPROM.begin(8); // Alokasi 8 byte EEPROM
Serial.println("Bluetooth Started. Waiting for connection...");
// Load data dari EEPROM
currentMode = EEPROM.read(MODE_ADDR);
speed = EEPROM.read(SPEED_ADDR) * 10; // Scale dari EEPROM
if (speed < minSpeed || speed > maxSpeed) speed = 500; // Validasi
// Inisialisasi pin LED
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
printStatus();
}
void loop() {
if (SerialBT.available()) {
char received = SerialBT.read();
Serial.print("Received: ");
Serial.println(received);
switch (received) {
case 'U': // Button Up
currentMode = (currentMode + 1) % (maxMode + 1);
saveSettings();
printStatus();
break;
case 'D': // Button Down
currentMode = (currentMode - 1 + (maxMode + 1)) % (maxMode + 1);
saveSettings();
printStatus();
break;
case 'P': // Button Play
isRunning = !isRunning;
printStatus();
break;
case '+': // Button Plus
if (speed > minSpeed) {
speed -= 100;
saveSettings();
}
printStatus();
break;
case '-': // Button Minus
if (speed < maxSpeed) {
speed += 100;
saveSettings();
}
printStatus();
break;
default:
SerialBT.println("Invalid Input");
Serial.println("Invalid Input");
break;
}
}
// Jalankan pattern LED sesuai mode
if (isRunning) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= speed) {
previousMillis = currentMillis;
switch (currentMode) {
case 0: // Pattern 1: LED berjalan maju
runPattern1();
break;
case 1: // Pattern 2: LED berjalan mundur
runPattern2();
break;
case 2: // Pattern 3: LED bergantian
runPattern3();
break;
case 3: // Pattern 4: Semua LED nyala/mati bergantian
runPattern4();
break;
default:
break;
}
}
} else {
// Matikan semua LED
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
}
}
// Fungsi pattern LED
void runPattern1() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
digitalWrite(ledPins[currentLed], HIGH);
currentLed = (currentLed + 1) % numLeds;
}
void runPattern2() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
digitalWrite(ledPins[currentLed], HIGH);
currentLed = (currentLed - 1 + numLeds) % numLeds;
}
void runPattern3() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], (i % 2 == currentLed % 2) ? HIGH : LOW);
}
currentLed = (currentLed + 1) % numLeds;
}
void runPattern4() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], currentLed % 2 ? HIGH : LOW);
}
currentLed = (currentLed + 1) % 2;
}
// Fungsi untuk mencetak status
void printStatus() {
Serial.print("Mode Number: ");
Serial.println(currentMode + 1);
Serial.print("Mode Name: ");
Serial.println(modeNames[currentMode]);
Serial.print("Status: ");
Serial.println(isRunning ? "Running" : "Stopped");
Serial.print("Speed: ");
Serial.println(speed);
SerialBT.print("Mode Number: ");
SerialBT.println(currentMode + 1);
SerialBT.print("Mode Name: ");
SerialBT.println(modeNames[currentMode]);
SerialBT.print("Status: ");
SerialBT.println(isRunning ? "Running" : "Stopped");
SerialBT.print("Speed: ");
SerialBT.println(speed);
}
// Fungsi untuk menyimpan pengaturan ke EEPROM
void saveSettings() {
EEPROM.write(MODE_ADDR, currentMode);
EEPROM.write(SPEED_ADDR, speed / 10); // Scale untuk penyimpanan
EEPROM.commit();
}