En la página Detectar líneas, básico Hemos aprendido lo necesario para programar un sistema basado en Arduino que responda ante líneas blancas o negras marcadas en el suelo usando el sensor CNY70.
Ahora vamos a mejorar el programa que enciende el LED de la salida 13 cuando se detecta una línea negra. Lo que vamos a hacer es hacer el programa más fácil de entender y modificar, así como de reutilizar, para ello vamos a usar dos técnicas; uso de constantes y encapsulamiénto.
Constantes
En un programa, una constante es un parámetro (normalmente un número) que nunca cambia, en el programa final de la página: Detectar líneas, básico, vemos los siguientes datos.
En la medida de lo posible, en un programa se debe evitar escribir los parámetros dentro del código, para que si fuera necesario cambiarlos, se pueda hacer sin mofificar el programa (con todos los riesgos que modificar un programa conlleva.
Por ejemplo, en el programa final de la página Detectar líneas, básico puede ser necesario modificar la entrada a la que se conecta el sensor, o debido a un cambio en la iluminación hay que ajustar el valor umbral de negro, para aislar estos parámetros del resto del programa los definimos como constantes al principio del programa usando:
#define nombre_de_la_constante valor
El programa ahora quedaría así:
#define ENTRADA_SENSOR 0
#define SALIDA_LED 13
#define UMBRAL_NEGRO 520
int reflectividad = 0;
void setup() {
// configuramos el pin 13 como salida
pinMode(SALIDA_LED,OUTPUT);
// Iniciamos la comunicacion con el ordenador a traves del puerto USB
Serial.begin(9600);
}
void loop() {
// Leemos el voltaje la entrada Analógica
reflectividad = analogRead(ENTRADA_SENSOR);
// mandamos el valor leido al ordenador a traves del puerto USB
Serial.print("Reflectividad: ");
Serial.println(reflectividad);
// si el valor de reflectividad es inferior al umbral => negro => enciende el LED
// si no, apagalo
if(reflectividad < UMBRAL_NEGRO) {
digitalWrite(SALIDA_LED,HIGH);
} else {
digitalWrite(SALIDA_LED,LOW);
}
// esperamos un poco, para no atascar el puerto USB de datos
delay(300);
}