Actividad 16 


Implementando memoria en nuestro robot

Una vez se han visto los vectores/arrays, estamos en disposición de ampliar nuestro código principal de la CPU del Escornabot.

En este caso, crearemos un array que vaya almacenando de forma consecutiva cada movimiento que debe hacer nuestro robot.

Para que al presionar el botón central (S5), se ejecuta la secuencia completa, recorriendo cada uno de los elementos del vector.

En este momento, dado que no hemos visto el control de los motores, al presionar el botón central, la secuencia se indicará únicamente mediante un tono en el zumbador y el encendido del led correspondiente. Es muy importante, garantizar que una vez finaliza la secuencia, se borra de la memoria  para así memorizar una nueva. 

Podemos empezar designando un tamaño de array de 20 movimientos y asegurarnos de no introducir más instrucciones que esas 20.

/*
    Ejemplo para comprobar el funcionamiento de arrays en el Escornabot
*/

// Incluimos la libreria con funciones y variables para Escornabot
#include "Escornabot.h"

// Definimos las dos constantes que usaremos
// Maximo numero de movimientos a memorizar por el robot
// Distancia en cm a recorrer en cada avance
#define MAXIMOS_MOVIMIENTOS 20
#define DISTANCIA_AVANCE 10

/*
    Inicializamos la clase en la variable de nombre Escornabot.
    Como en este ejemplo no vamos a utilizar los motores, podemos pasar
    el argumento para el constructor de la clase Escornabot con cualquier valor.
*/
Escornabot Escornabot(DISTANCIA_AVANCE);

// Vector que almacena hasta 20 movimientos
int vector_movimientos[MAXIMOS_MOVIMIENTOS];
// Variable que guarda la posicion a almacenar en el vector
int indice_movimiento = 0;

// Rutina de Setup
void setup() {

    // En el setup no es necesario hacer nada más que inicializar
    // la comunicación Serial
    Serial.begin(9600);

}

void loop() {

    int lectura_pulsador = analogRead(Escornabot.entrada_pulsadores);

    // Comprobamos que el indice de movimientos no supere el máximo permitido
    if (indice_movimiento < MAXIMOS_MOVIMIENTOS) {

        // Comprobamos la lectura dentro del rango del boton S1
        if (
          (Escornabot.S1_valor_minimo < lectura_pulsador) &&
          (lectura_pulsador < Escornabot.S1_valor_maximo)
        ) {
            Serial.println("Se ha pulsado el boton S1.");
            Escornabot.notifica_pulsador (1500500);
            // Almacenamos un 1 en la secuencia de movimientos
            vector_movimientos[indice_movimiento] = 1;
            // Incrementamos la posición del vector (para almacenar
            // siguiente valor de la secuencia)
            indice_movimiento = indice_movimiento + 1;

        }

        // Comprobamos la lectura dentro del rango del boton S2
        else if (
          (Escornabot.S2_valor_minimo < lectura_pulsador) &&
          (lectura_pulsador < Escornabot.S2_valor_maximo)
        ) {
            Serial.println("Se ha pulsado el boton S2.");
            Escornabot.notifica_pulsador (21000500);
            // Almacenamos un 2 en la secuencia de movimientos
            vector_movimientos[indice_movimiento] = 2;
            // Incrementamos la posición del vector (para almacenar
            // siguiente valor de la secuencia)
            indice_movimiento = indice_movimiento + 1;
        }

        // Comprobamos la lectura dentro del rango del boton S3
        else if (
          (Escornabot.S3_valor_minimo < lectura_pulsador) &&
          (lectura_pulsador < Escornabot.S3_valor_maximo)
        ) {
            Serial.println("Se ha pulsado el boton S3.");
            Escornabot.notifica_pulsador (32000500);
            // Almacenamos un 3 en la secuencia de movimientos
            vector_movimientos[indice_movimiento] = 3;
            // Incrementamos la posición del vector (para almacenar
            // siguiente valor de la secuencia)
            indice_movimiento = indice_movimiento + 1;
        }

        // Comprobamos la lectura dentro del rango del boton S4
        else if (
          (Escornabot.S4_valor_minimo < lectura_pulsador) &&
          (lectura_pulsador < Escornabot.S4_valor_maximo)
        ) {
            Serial.println("Se ha pulsado el boton S4.");
            Escornabot.notifica_pulsador (43000500);
            // Almacenamos un 4 en la secuencia de movimientos
            vector_movimientos[indice_movimiento] = 4;
            // Incrementamos la posición del vector (para almacenar
            // siguiente valor de la secuencia)
            indice_movimiento = indice_movimiento + 1;
        }

    }

    // Comprobamos la lectura dentro del rango del boton S5
    if (
      (Escornabot.S5_valor_minimo < lectura_pulsador) &&
      (lectura_pulsador < Escornabot.S5_valor_maximo)
    ) {
        Serial.println("Se ha pulsado el boton S5.");

        for(int i = 0 ; i < indice_movimiento ; i++) {

            switch (vector_movimientos[i]) {

                case 1: // Realizamos secuencia 1

                    Escornabot.notifica_pulsador (1500500);
                    break;

                case 2: // Realizamos secuencia 2

                    Escornabot.notifica_pulsador (21000500);
                    break;

                case 3: // Realizamos secuencia 3

                    Escornabot.notifica_pulsador (32000500);
                    break;

                case 4: // Realizamos secuencia 4

                    Escornabot.notifica_pulsador (43000500);
                    break;

                }

        }

        indice_movimiento = 0;

    }

}
Vistas
29 Número de vistas
29 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.