/*
Creado: Edilberto Carlos Vivas Gonzalez ([email protected])
*/
#include <Ticker.h> // biblioteca que permite configurar tareas para que se ejecuten cada cierto tiempo
#define pinBoton 2 // Pin de conexion Pulsador 1
#define pinBoton1 3 // Pin de conexion Pulsador 2
byte PORTV[4] = {10, 11, 12, 13}; //agrupar varios pines en un puerto = {bit0 bit1 bit2 bit3}
byte conteo=0; // variable para guardar el conteo
boolean btn_ant[]={true}; // variable para guardar el estado anterior del pulsador
boolean btn_ant1[]={true}; // variable para guardar el estado anterior del pulsador 1
boolean pres=false; // variable para guardar si el boton fue presionado
int S1; // valor leido en el pin analógico que va de 0 a 1023
float Va; // variable que guarda la conversión a voltaje
int Vai; // variable que guarda la conversion en entero
int tbot=100; // Periodo de lectura de pulsadores
void tarea1(); // definir la funcion
Ticker ticTarea1(tarea1,tbot); // asignar al ticker la tarea1
int tpot=200; // periodo de lectura analogica
void tarea2(); // definir la funcion
Ticker ticTarea2(tarea2,tpot); // asignar al ticker la tarea2
int tcom=1000; // periodo de comunicacion serial
void tarea3(); // definir la funcion
Ticker ticTarea3(tarea3,tcom); // asignar al ticker la tarea3
void setup() {
// put your setup code here, to run once:
pinMode(pinBoton,INPUT_PULLUP);
pinMode(pinBoton1,INPUT_PULLUP);
for (byte i = 0; i <4 ; i++) {
pinMode(PORTV[i], OUTPUT);}
Serial.begin(9600); // inicializar comunicacion serial a 9600 baudios
ticTarea1.start(); // inicializar tarea
ticTarea2.start();
ticTarea3.start();
}
void loop() {
ticTarea1.update(); //verificar si ya se cumplió el tiempo para ejecutar la tarea
ticTarea2.update();
ticTarea3.update();
delay(10);
}
void tarea1()
{
// Escribir cada bit en el pin respectivo:
for (byte i = 0; i <4 ; i++) {
digitalWrite(PORTV[i],bitRead(conteo,i));}
pres=pulso(btn_ant,pinBoton); //a la funcion se le entrga el estado anterior del boton y el pin donde está conectado el boton
if (pres) {
if (conteo == 15) {
conteo=0; }
else {
conteo=conteo+1; } }
pres=pulso(btn_ant1,pinBoton1); //a la funcion se le entrga el estado anterior del boton y el pin donde está conectado el boton
if (pres) {
if (conteo == 0) {
conteo=15; }
else {
conteo=conteo-1; } }
}
void tarea2()
{
S1 = analogRead(A0); // leer la señal en el pin analógico
Va = S1*(5.0/1023.0); // Convert to a voltage (0 - 5V):
Vai = round(Va); // convertir el valor a entero
}
void tarea3()
{
// print out the value you read:
Serial.print("Va="); // enviar caracteres
Serial.println(Va); // enviar valor numérico
}
// Esta subrutina es para determinar si cualquier boton fue pulsado
boolean pulso(boolean* eAnt,int pin_Button){
boolean presi=false; //variable para guardar si el boton se presiona
boolean eActual = digitalRead(pin_Button);
if (eAnt[0]==true and eActual==false){ // detectar flanco de bajada
presi=true;}
eAnt[0]=eActual; //el estado actual del boton se vuelve el estado anterior en el siguiente instante de muestreo
return presi;
}