Para el arranque del robot se utiliza un pulsador y en la competencia de los robot modalidad carrera es con señal de largada (semáforo).
Se debe tener el pulsador accionado hasta que se de la señal de largada y en ese momento soltar el pulsador así el robot arranque la competencia.
Si se produce una falsa largada se pierde esa carrera, por lo que es importante no soltar antes el pulsador y contar con un código que nos permita arrancar el robot de ese manera.
Para esto tomaremos como ejemplo el robot MECHA 19 que cuenta con un pulsador para el arranque.
El pulsador esta conectado con una resistencia PULL UP, así que mientras no esta accionado la lectura en el microcontrolador de la entrada será HIGH y si lo pulsamos será LOW.
MECHA 19
En la imagen podemos ver el circuito esquemático del pulsador del robot MECHA 19.
Vamos a tener que programar una pausa mientras el pulsador este accionado y que al soltarlo entre en un bucle donde tengamos programado el código que utilizamos para que el robot siga la linea a la mayor velocidad posible.
Circuito de pulsador
☼ Uso de función WHILE (ver referencias ARDUINO).
Realizaremos un ejemplo de código para poder entender el uso de esta función con el objetivo de usarla en nuestro robot para el arranque.
► Circuito de test:
En el circuito que armamos para el test colocamos:
ARDUINO UNO
Protoboard
LED Verde - conectado a GPIO 11
LED Rojo - conectado a GPIO 10
LED Azul - conectado a GPIO 9
Pulsador - conectado a GPIO 2 - Pull UP
Circuito TEST WHILE
► Código para el test:
/* CODIGO PULSADOR DE ARRANQUE */
#define pul 2
#define led_verde 11
#define led_rojo 10
#define led_azul 9
void setup() {
pinMode(pul, INPUT);
pinMode(led_verde,OUTPUT);
pinMode(led_rojo,OUTPUT);
pinMode(led_azul,OUTPUT);
}
void loop() {
digitalWrite(led_azul,HIGH); // 1
digitalWrite(led_rojo,LOW);
while (digitalRead(pul)); // 2
digitalWrite(led_azul,LOW); // 3
digitalWrite(led_rojo,HIGH);
delay(3000); // 4
while (digitalRead(pul)==0){// 5
digitalWrite(led_verde,HIGH);
digitalWrite(led_rojo,LOW);
}
digitalWrite(led_verde,LOW); // 6
}
☼ Funcionamiento del Código
► Declaramos las etiquetas de los puertos.
#define pul 2 // pulsador en D2
► Configuramos los modos de pin.
pinMode(pul,INPUT); // pulsador como entrada
► En el void loop (bucle) es donde veremos el comportamiento de la función WHILE (mientras).
En la parte 1 encendemos el led azul y apagamos el led rojo.
En esta linea 2 donde hay un while, no se colocaron las llaves que delimitan el código que debe ejecutarse mientras la condición sea verdadera, por esto mientras el pulsador no este accionado el código se detendrá en esa linea.
El led azul permanecerá encendido.
Al pulsar el pulsador se pierde la condición del while de la parte 2, por lo que se ejecutan las líneas de código parte 3 (led azul apagado y led rojo encendido)
En este punto (parte 4) nos encontramos con un retardo de 3 segundos (pausa en el código), si soltamos el pulsador antes de ese tiempo la condición del while de la parte 5 será falsa cuando termine el tiempo del delay y no se ejecutará.
Pasara de la parte 4 a la parte 6, donde se apaga el led verde.
La condición del while de la parte 5 es que el pulsador este accionado, como se colocaron las llaves que delimitan el código de este while estará en bucle mientas la condición sea verdadera, si lo soltamos saldrá del bucle y se ejecutará la parte 6.
En esta parte se apaga el led verde y se comienza otra ver con la lectura del código parte 1.
► Test de funcionamiento con simulador TINKERCAD.
Pulsando menos de 3 segundos
Pulsando mas de 3 segundos
☼ Código para arranque con pulsador, ejemplo.
/* CODIGO PULSADOR DE ARRANQUE OARA ROBOT SL*/
#define pul 2
#define led_verde 11
#define led_rojo 10
#define led_azul 9
void setup() {
pinMode(pul, INPUT);
pinMode(led_verde,OUTPUT);
pinMode(led_rojo,OUTPUT);
pinMode(led_azul,OUTPUT);
}
void loop() {
digitalWrite(led_azul,HIGH); // código antes de pulsar ajustes del robot
while (digitalRead(pul)); // pulsador sin pulsar, la lectura de código se detiene aquí
digitalWrite(led_azul,LOW);
while (digitalRead(pul)==0){ // pulsador pulsado, esperando para largar, lectura detenida aquí
digitalWrite(led_rojo,HIGH);
}
digitalWrite(led_rojo,LOW);
while (true) { // bucle infinito inicio
digitalWrite(led_verde,HIGH); // colocamos aquí entre las llaves
delay(500); // el código
digitalWrite(led_verde,LOW); // para la
delay(500); // marcha del robot
} // fin del while de marcha
} // fin del void loop
☼ Test código para arranque con pulsador ejemplo.