// ========================================
// SMART WHEELCHAIR - JOYSTICK + BLUETOOTH 
// ========================================
#include <SoftwareSerial.h>
SoftwareSerial BT(2, 3); // RX, TX for Bluetooth

// ------------------ MOTOR PINS ------------------
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11

// ------------------ JOYSTICK & BUZZER ------------------
#define JOY_X A0
#define JOY_Y A1
#define JOY_SW 7
#define BUZZER 6

// ------------------ VARIABLES ------------------
char command;
bool horn = false;
bool btMode = false;  // true when Bluetooth active
unsigned long lastBT = 0;

// ============================================================
// ⚙️ SETUP
// ============================================================
void setup() {
  Serial.begin(9600);
  BT.begin(9600);

  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(JOY_SW, INPUT_PULLUP);
  pinMode(BUZZER, OUTPUT);

  digitalWrite(BUZZER, LOW);
  Stop();

  Serial.println("SMART WHEELCHAIR READY");
}

// ========================================
// 🚗 MOTOR CONTROL FUNCTIONS
// ========================================
void forward() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void backward() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void left() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void right() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void Stop() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

// ==============================
// 🔁 MAIN LOOP
// ==============================
void loop() {
  if (BT.available() > 0) {
    command = BT.read();
    btMode = true;
    lastBT = millis();
    Serial.print("BT CMD: ");
    Serial.println(command);

    switch (command) {
      case 'F': forward(); break;
      case 'B': backward(); break;
      case 'L': left(); break;
      case 'R': right(); break;
      case 'S': Stop(); break;
      case 'V': horn = true; break;
      case 'v': horn = false; break;
      default: Stop(); break;
    }
  }

  // If no Bluetooth signal for 3 seconds → return to joystick
  if (millis() - lastBT > 3000) btMode = false;
  if (!btMode) {
    int x = analogRead(JOY_X);
    int y = analogRead(JOY_Y);

    if (x > 700) right();
    else if (x < 300) left();
    else if (y > 700) forward();
    else if (y < 300) backward();
    else Stop();
  }
  
  // ================== BUZZER CONTROL ============
  int sw = digitalRead(JOY_SW);
  if (horn || sw == LOW)
    digitalWrite(BUZZER, HIGH);
  else
    digitalWrite(BUZZER, LOW);
}