Cambio de estado en un pin analógico

En otra página os mostré como detectar el cambio de estado en un pin digital de una Arduino y así poder disparar una función o realizar una acción sólo una vez, lo cual es muy útil para cuando queremos pulsar un botón y que la acción a realizar no se realice quizá cientos de veces mientras el pulsador sigue accionado.

Esta vez vamos incluir una pequeña modificación en el mismo código para que el cambio de estado se de en una entrada analógica. El resto del algoritmo será el mismo y su funcionamiento idéntico, la acción solo se ejecutará una vez. Se trata de una modificación muy sencilla, así que vamos a ello:

Primero necesitamos una variable más a la que llamaremos “umbral”, que será el nivel a partir del cual se dará el cambio de estado. Y otra variable de tipo booleano que será nuestra conversión de analógico a digital.

1
2
int umbral = 800;
boolean cambio = false;

En este ejemplo el valor de “umbral” es 800 pero dependerá en cada caso de vuestro proyecto y la lectura que os de el sensor analógico, recordad que será un valor de entre 0 y 1023.

Añadiremos un par de líneas según las cuales si el valor medido es mayor o igual “cambio” será verdad y si el valor medido está por debajo “cambio” será falso. Así:

1
2
if (cambio >= umbral) cambio == true;
else cambio == false;

Fijaros que el “if” es tan sencillo que no le ponemos corchetes ni nada.

Ahora el código completo queda así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int estadoAnterior = 0;
int estadoActual;
int contador = 0;
int umbral = 800;
boolean cambio = false;

void setup()
{
pinMode(pin, INPUT);
}

void loop()
{
// vamos a leer el pin analógico
estadoActual = analogRead(pin);
if (estadoActual >= umbral) cambio == true;
  else cambio == false;
if (estadoAnterior != estadoActual) // ha habido un cambio de estado
{
contador++; // cuenta los cambios de estado
int validarPar = contador % 2; // solo queremos los cambios pares
if (validarPar != 1) // si el cambio es par
{
//ponga aqui su codigo
}
estadoAnterior = estadoActual;
}
}

Yo he utilizado este código para hacer encoders con imanes pegados a una rueda y detectarlos con un sensor de efecto Hall como sensor, como barrera de luz (con una LDR como sensor) y seguro que a vosotros se os ocurren muchos más usos.

Un saludo a todos y que lo disfrutéis.


Si este tutorial te ha sido de utilidad puedes considerar hacerme un donativo, por pequeño que sea estarás contribuyendo a que siga con esta labor.


Deja un comentario

Campos requeridos marcados con *.


Una estúpida ley me obliga a molestarte con algo obvio: este sitio utiliza cookies. Aquí tienes el ladrillo en cuestión por si quieres leerlo