#include <Wire.h>
#include <SparkFun_APDS9960.h>
#include <BluetoothSerial.h>
BluetoothSerial BT;
SparkFun_APDS9960 apds;
int Motor1A = 25;
int Motor1B = 26;
int Motor2A = 27;
int Motor2B = 14;
bool moving = false;
unsigned long tiempoInicio;
const char* nombreBT = "ESP32_CAR";
void derecha() {
digitalWrite(Motor1A, HIGH);
digitalWrite(Motor2B, HIGH);
tiempoInicio = millis();
moving = true;
}
void izquierda() {
digitalWrite(Motor1B, HIGH);
digitalWrite(Motor2A, HIGH);
tiempoInicio = millis();
moving = true;
}
void adelante() {
digitalWrite(Motor1A, HIGH);
digitalWrite(Motor2A, HIGH);
tiempoInicio = millis();
moving = true;
}
void atras(){
digitalWrite(Motor1B, HIGH);
digitalWrite(Motor2B, HIGH);
tiempoInicio = millis();
moving = true;
}
void apagarMotores() {
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, LOW);
digitalWrite(Motor2A, LOW);
digitalWrite(Motor2B, LOW);
}
void setup () {
BT.begin(nombreBT);
Serial.begin(115200);
if (apds.init()) {
Serial.println("APDS9960 inicializado correctamente.");
}
else {
Serial.println("No se pudo inicializar el APDS9960. Comprueba la conexión.");
}
if (apds.enableGestureSensor(true)) {
Serial.println("Sensor de gestos habilitado.");
}
else {
Serial.println("No se pudo habilitar el sensor de gestos.");
}
pinMode (Motor1A, OUTPUT) ;
pinMode(Motor1B, OUTPUT);
pinMode (Motor2A, OUTPUT) ;
pinMode (Motor2B, OUTPUT);
apagarMotores();
}
void loop() {
if (BT.available()) {
int data = BT.read();
if (data == 8 && !moving) {
adelante();
}
else if (data == 2 && !moving) {
atras();
}
else if (data == 6 && !moving) {
derecha ();
}
else if (data == 4 && !moving) {
izquierda();
}
else {
apagarMotores ();
}
}
if (moving && millis() - tiempoInicio >= 500) {
apagarMotores ();
moving = false;
}
if (apds. isGestureAvailable()) {
int gesture = apds.readGesture();
switch (gesture) {
case DIR_UP:
Serial.println("Gesto hacia arriba detectado.");
break;
case DIR_DOWN:
Serial.println ("Gesto hacia abajo detectado.");
break;
case DIR_LEFT:
Serial.println("Gesto hacia la izquierda detectado.");
break;
case DIR_RIGHT:
Serial.println ("Gesto hacia la derecha detectado.") ;
break;
default:
Serial.println("Gesto no reconocido.");
}
}
delay (100); // Pequeña pausa antes de la próxima lectural
}