Semana 7
Ejemplos de código
A continuación vemos la manera como podemos leer la información que genera un sensor, como reconocer sus datos, definir la escala en que se abstraen los datos y convertir esta escala a otra. Se pueden imaginar el uso del sensor como el siguiente proceso:
- Un fenómeno físico es capturado por el sensor. Por ejemplo, presionar un switch, nivel de temperatura, distancia al sensor, etc.
- Convertimos ese fenómeno en numeros, ejemplo un switch nos da 0 en apagado y 1 en prendido. Un potenciómetro nos da valores de resistencia entre 0 y 1023.
- A modo de alquimia digital, convertimos esos valores en salidas, por ejemplo, con un switch convertimos el 0 en LED apagado y 1 LED prendido.
- Completamos el ciclo al interpretar las entradas del sensor en otra cosa, ya sea en una representación digital (pintar pixels en la pantalla) o con otro componente fisico (un LED, motor, etc).
Leer sensor, entrada análoga
/*
La estructura básica para recibir los datos generados por un sensor.
*/
// El siguiente ejemplo asume que el sensor está conectado al pin análogo 0 (A0)
// Vamos a imprimir el valor del sensor en el monitor serial Tools -> Serial Monitor
void setup() {
Serial.begin(9600); // Configuramos la salida serial para ver los valores.
pinMode(A0, INPUT); // Definimos que por el pin A0 va a entrar información
}
void loop() {
int valorEntrada = analogRead(A0); // Creamos una variable donde guardamos el estado del sensor
Serial.println(valorEntrada); // Imprimimos en el monitor el valor del sensor.
// Por lo general necesitamos una pequeña pausa antes de reiniciar la lectura del sensor.
// Pueden probar diferentes tiempos para obtener una lectura limpia.
delay(2);
}
Convertir escalas, map() y salida análoga
/*
Por ejemplo, si queremos convertir la resistencia de un potenciómetro en intensidad de luz de un LED
*/
// Definimos los pins de entrada y salida
int entradaAnaloga = A0;
int salidaAnaloga = 9;
// Creamos unas variables que cambiaran en cada paso del loop.
int valorEntrada = 0; // Que valor me da el sensor.
int valorSalida = 0; // Valor convertido a otra escala para salida.
void setup() {
pinMode(entradaAnaloga, INPUT);
pinMode(salidaAnaloga, OUTPUT);
}
void loop() {
// Sacamos el valor del sensor y lo guardamos en la variable valorEntrada
valorEntrada = analogRead(entradaAnaloga);
// Usamos la función map(param1, param1, param3, param4, param5) que acepta 5 parámetros:
// param1: el valor a convertir
// param2: valor mínimo de la escala que ofrece el sensor.
// param3: valor máximo de la escala que ofrece el sensor.
// param4: valor mínimo de la escala a la que quiero convertir.
// param5: valor máximo de la escala a la que quiero convertir.
// La siguiente conversión de escalas hace lo siguiente:
// Un potenciómetro que da valores entre 0 y 1023,
// lo convertimos a la escala de intensidad del LED que va de 0 a 255.
valorSalida = map(valorEntrada, 0, 1023, 0, 255);
// Prendemos el LED ya no con la función que utilizabamos antes digitalWrite().
// Con analogWrite usamos un número como segundo parámetro.
analogWrite(salidaAnaloga, valorSalida);
// Esperamos 2 milisegundos antes de hacer una nueva lectura del sensor.
delay(2);
}