Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Explicación
El contador es controlado por dos interruptores (ascendente y
descendente), y el resultado se visualiza en un display de 7 segmentos de
cátodo común. El pulsador ascendente añade una unidad a la cuenta
mientras que el pulsador descendente disminuye una unidad al conteo,
cabe recalcar que el contador no sobrepasa el valor de 9 y nunca es menor
a 0.
// Peripheral Constructors
CPU &cpu = Cpu;
Yun::Server &server = VFP;
Yun::FileStore &storage = FS;
void peripheral_setup () {
server.begin (8080);
storage.begin ();
}
void peripheral_loop() {
server.poll ();
}
//---CONFIG_END---
const int pulsadorIncremento = 6; // Pin digital para el pulsador de
incremento
const int pulsadorDecremento = 5; // Pin digital para el pulsador de
decremento
const int tiempoAntirrebote = 10; // Variable para almacenar el tiempo
antirrebote
// Variables necesarias para los cálculos internos
int cuenta = 0;
int estadoPulsadorIncremento;
int estadoPulsadorAnteriorIncremento;
int estadoPulsadorDecremento;
int estadoPulsadorAnteriorDecremento;
// Función antirrebote
boolean antirrebote(int pin)
{
int contador = 0;
boolean estado;
boolean estadoAnterior;
do
{
estado = digitalRead(pin);
if(estado != estadoAnterior)
{
contador = 0;
estadoAnterior = estado;
}
else
{
contador = contador+ 1;
}
delay(1);
} while(contador < tiempoAntirrebote);
return estado;
}
void display (int a, int b, int c, int d, int e, int f, int g) // Función del
display: Se reciben 7 variables y se asignan a cada una de las salidas
{
digitalWrite (7,a);
digitalWrite (8,b);
digitalWrite (9,c);
digitalWrite (10,d);
digitalWrite (11,e);
digitalWrite (12,f);
digitalWrite (13,g);
}
void actualizarNumero() // Función que actualiza el número que aparece
en el display de 7 segmentos
{
switch(cuenta){
case 0:
display (1,1,1,1,1,1,0); // Número "0"
break;
case 1:
display (0,1,1,0,0,0,0); // Número "1"
break;
case 2:
display (1,1,0,1,1,0,1); // Número "2"
break;
case 3:
display (1,1,1,1,0,0,1); // Número "3"
break;
case 4:
display (0,1,1,0,0,1,1); // Número "4"
break;
case 5:
display (1,0,1,1,0,1,1); // Número "5"
break;
case 6:
display (1,0,1,1,1,1,1); // Número "6"
break;
case 7:
display (1,1,1,0,0,0,0); // Número "7"
break;
case 8:
display (1,1,1,1,1,1,1); // Número "8"
break;
case 9:
display (1,1,1,0,0,1,1); // Número "9"
break;
}
}
void setup () {
peripheral_setup(); // TODO: put your setup code here, to run once:
pinMode(7, OUTPUT); // Asignación de los pines digitales para el
display de 7 segmentos como salidas
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(pulsadorIncremento, INPUT); // Asignación de los pines
digitales para los pulsadores como entradas
pinMode(pulsadorDecremento, INPUT);
}
void loop() {
peripheral_loop(); // TODO: put your main code here, to run repeatedly:
estadoPulsadorIncremento = digitalRead(pulsadorIncremento); //
Leemos el estado del pulsador de incremento
if(estadoPulsadorIncremento !=
estadoPulsadorAnteriorIncremento) // Si hay un cambio en el estado
del pulsador de incremento
{
if(antirrebote(pulsadorIncremento))
{
cuenta++; // Se incrementa la cuenta en una unidad
if(cuenta > 9) // Si la cuenta es mayor que 9, permanece en 9.
{
cuenta = 9;
}
}
}
estadoPulsadorAnteriorIncremento = estadoPulsadorIncremento; //
Actualizamos el estado anterior del pulsador de incremento
estadoPulsadorDecremento = digitalRead(pulsadorDecremento); //
Leemos el estado del pulsador de decremento
if(estadoPulsadorDecremento !=
estadoPulsadorAnteriorDecremento) // Si hay un cambio en el estado del
pulsador de decremento
{
if(antirrebote(pulsadorDecremento))
{
cuenta--; // Se decrementa la cuenta en una unidad
if(cuenta < 0) // Si la cuenta es menor que 0, permanece en 0.
{
cuenta = 0;
}
}
}
estadoPulsadorAnteriorDecremento = estadoPulsadorDecremento; //
Actualizamos el estado anterior del pulsador de decremento
actualizarNumero(); // Actualizamos el número que aparece en el
display de 7 segmentos
RESULTADOS
Pulsador ascendente
Prueba descendente
DIAGRAMA DE FLUJO
INICIO
estado = digitalRead(pin)
contador = 0; Si if(estado No
estadoAnterior = != contador = contador+ 1;
estado; estadoAn
terior)
while(contador <
tiempoAntirrebote)
return estado
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(pulsadorIncremento, INPUT);
pinMode(pulsadorDecremento, INPUT);
estadoPulsadorIncremento =
digitalRead(pulsadorIncremento);
if(estadoPulsadorInc
Si No
remento !=
estadoPulsadorAnte
riorIncremento)
Si if(antirrebote(pulsadorInc
remento))
cuenta++
No
if(cuenta > No
Si 9)
cuenta = 9
estadoPulsadorAnteriorIncrement
o = estadoPulsadorIncremento;
actualizarNumero();
FIN