Paso 6: El código
La codificación fue un reto, ya que el DTMF puede generar código para solamente un dígito a la vez.
El problema era de la codificación para el modo manual donde tuve que definir una tecla para cambiar a modo manual. Voy a explicar con un ejemplo:-
void loop()
{
int z = digitalRead(d0);
int y = digitalRead(d1);
int x = digitalRead(d2);
int w = digitalRead(d3);
Si ((w == LOW) & &(x == LOW) & &(y == LOW) & &(z == HIGH)) es decir, el dígito 1
Si ((w == LOW) & &(x == LOW) & &(y == HIGH) & &(z == LOW)) es decir, el dígito 2
El código debería funcionar así:-si se presiona el 1, el robot entra en modo manual y pulsando 2 en el teclado el robot se mueve hacia adelante. Pero lo que realmente sucede es que mientras que la 2 el robot ya no es en modo manual. ¿POR QUÉ???
La respuesta es que, el estado en los pines de Arduino conectado a lo DTMF han cambiado ahora, es decir, ya no son 1, porque la información de estado no se almacena en cualquier lugar (ya que el estado tiene que cambiar cuando el robot esté en modo autónomo y el DTMF también puede generar sólo el código de la última tecla presionada y no puede almacenar el código sí mismo).
LA solución:-la solución era simple, en vez de poner una condición para un número, para cambiar el modo, había colocado para un dígito:-
Ejemplo:-
if(w == Low)
{
Si ((w == LOW) & &(x == LOW) & &(y == HIGH) & &(z == LOW))
{
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, bajo);
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, bajo);
}
Si ((w == LOW) & &(x == HIGH) & &(y == LOW) & &(z == HIGH))
{
digitalWrite (motorL1, bajo);
digitalWrite (motorL2, HIGH);
digitalWrite (motorR1, bajo);
digitalWrite (motorR2, HIGH);
}
Si ((w == LOW) & &(x == HIGH) & &(y == LOW) & &(z == LOW))
{
digitalWrite (motorL1, bajo);
digitalWrite (motorL2, HIGH);
digitalWrite (motorR1, HIGH);
digitalWrite (motorR2, bajo);
}
Si ((w == LOW) & &(x == HIGH) & &(y == HIGH) & &(z == LOW))
{
digitalWrite (motorL1, HIGH);
digitalWrite (motorL2, bajo);
digitalWrite (motorR1, bajo);
digitalWrite (motorR2, HIGH);
}
Si ((w == LOW) & &(x == HIGH) & &(y == HIGH) & &(z == HIGH))
{
digitalWrite (motorL1, bajo);
digitalWrite (motorL2, bajo);
digitalWrite (motorR1, bajo);
digitalWrite (motorR2, bajo);
}
}
'W' SIEMPRE PERMANECE BAJO LOS DÍGITOS ANTERIORES, W = 0 CONDICIÓN SERÁ VERDADERA EN TODO.