Buenas,
Necesito ayuda, estoy atascado, estoy haciendo un sketch para controlar un rover 4x4, he incluido un servo con un sensor ultrasonidos HC SR04, un buzzer, luces.
Todo esta conectado a una Mega y los motores los maneja una Motor Shield v1
lo controlo mediante la app "Bluetooh RC Controller".
el problema viene al tratar de hacer sonar una alarma (pitidos intermitentes) al detectar un obstáculo a una distancia concreta. al subir el Sketch el buzzer hace pequeños pitidos y si detecta un bostaculo suena la alarma, a veces, y de una forma muy breve.
he usado la funcion Millis para evitar paradas del codigo pero aun asi...
Si ejecuto el codigo por partes, sensor y alarma por separado funciona correctamente pero al unir al programa general no funciona.
Tambien observo que sin conectar la app el servo funciona bien pero al conectar el Bluetooh es un poco a "trompicones"
¿podéis ayudarme? os lo agradezco.
Os dejo el código en el fichero ino
BT_CAR_V2.2.ino (8.2 KB)
puedes utilizar una interrupción por desbordamiento de timer para tener un control más en "tiempo real" o multitareas como algunos le llaman.
es básicamente como entiendo tu programa debe hacer 3 cosas simultáneamente.
interrupción por timer es la solución.
A ver de este modo.. remplaza desde if (BT.available())
comando = 0;
if (BT.available()) {
comando = BT.read();
Serial.write(comando);
}
switch (comando) {//Pasamos valores de BT para acciones
case 'F': Avance(); break;// Forward F
case 'B': Retroceso(); break;// Back B
case 'R': GiroDerecha(); break;// Right R
case 'L': GiroIzquierda(); break;// Left L
case 'S': Paro(); break;// Stop S
case 'G': AvanzaIzquierda(); break;// Forward Left G
case 'I': AvanzaDerecha(); break;// Forward Right I
case 'H': RetrocesoIzquierda(); break;// Back Left H
case 'J': RetrocesoDerecha(); break;// Back Right J
case 'W': luzDelante = true; break; // Luces delanteras ON W
case 'w': luzDelante = false; break; // Luces delanteras OFF w
case 'U': luzAtras = true; break; // Luces Traseras ON U
case 'u': luzAtras = false; break; // Luces Traseras OFF u
case 'V': bocina = true; break; // Horn on V
case 'v': bocina = false; break; // Horn off v
// case 'X':Extra = true;break; // EXTRA on X
// case 'x':Extra = false;break; // EXTRA on x
case '0': Vel = 100; break; // Speed 0 0
case '1': Vel = 115; break; // Speed 10 1
case '2': Vel = 130; break; // Speed 20 2
case '3': Vel = 145; break; // Speed 30 3
case '4': Vel = 160; break; // Speed 40 4
case '5': Vel = 175; break; // Speed 50 5
case '6': Vel = 190; break; // Speed 60 6
case '7': Vel = 205; break; // Speed 70 7
case '8': Vel = 220; break; // Speed 80 8
case '9': Vel = 235; break; // Speed 90 9
case 'q': Vel = 255; break; // Speed 100 q
case 'D': TodoOFF(); break; //Everything OFF D
}
}
Gracias a los dos, me pongo con ello, probare primero con la solución de surbyte, veo que es definir una variable para llevar el valor que recibe el BT.
Lo de "interrupción por desbordamiento de timer" lo veo mas complicado... vamos que ni idea de como hacerlo, a estudiar toca...
repito, gracias a los dos
Un saludo