/* * doblecontador.pde * * Contador de dos dígitos de 00 a 99 y a 00. * * En el monitor, muestra los pulsos de cada pulsador y tambien * muestra el total de pulsaciones entre ambos pulsadores. * * Cada vez que presionamos un pulsador, el pin de salida correspondiente * bascula de ALTO a BAJO o de BAJO a ALTO. Hay un retardo * máximo entre pulsos para evitar los rebotes del circuito. * * Fecha: 31/08/10 * Autor: V. Garcia * * Consume 2984 bytes compilado con version 0013Alpha. */ int switchPin = 8; // switch se conecta al pin 8 int switchPin2 = 9; // switch se conecta al pin 9 int switchPin3 = 10; // pin de reset int ledPin = 2; // el LED se conecta al pin 2 int ledPin2 = 3; // el LED se conecta al pin 2 int val = 0; // variable para lectura del estado del pin int val2 = 0; // variable para leer el estado delayed/debounced int vval = 0; // variable para lectura del estado del pin int vval2 = 0; // variable para leer el estado delayed/debounced int pac = 0; // puesta a cero o reset. int botonStado; // variable para mantener el estado del bot�n int botonStado2; // variable para mantener el estado del bot�n int buttonCounter =0 ; // contador para el n�mero de pulsos de bot�n int buttonCounter2 =0 ; // contador para el n�mero de pulsos de bot�n int lightMode = 0; // Esta la luz EN o AP int lightMode2 = 0; // Esta la luz EN o AP void setup() { pinMode(switchPin, INPUT); // pone el pin switch como entrada pinMode(switchPin2, INPUT); // pone el pin switch como entrada pinMode(switchPin3, INPUT); // pone el pin switch como entrada pinMode(ledPin, OUTPUT); pinMode(ledPin2, OUTPUT); Serial.begin(9600); // Comunicaci�n serie puesta a 9600bps botonStado = digitalRead(switchPin); // lee el estado inicial botonStado2 = digitalRead(switchPin2); // lee el estado inicial // buttonCounter = 92; // lo uso para saltarme los 91 primeros. Despu�s se quita } void loop(){ pac = digitalRead(switchPin3); // lee el valor de entrada y almacena en pac val = digitalRead(switchPin); // lee el valor de entrada y almacena en val delay(10); // 80 milisegundos son una cantidad de tiempo buena val2 = digitalRead(switchPin); // lee la entrada otra vez para comprobar saltos if (val == val2) { // asegurar que conseguimos 2 lecturas constantes if (val != botonStado) { // el estado de bot�n ha cambiado! if (val == LOW) { // compruebe si el bot�n es presionado if (lightMode == 0) { // esta la luz AP? lightMode = 1; // conecta la luz! digitalWrite(ledPin, HIGH); } else { lightMode = 0; // apaga la luz! digitalWrite(ledPin, LOW); } buttonCounter ++ ; anota(); } if (buttonCounter >= 99){ buttonCounter = 0; } } botonStado = val; // guardar el nuevo estado en la variable } // --- // vval = digitalRead(switchPin2); // lee el valor de entrada y almacena en val delay(10); // 10 milisegundos son una cantidad de tiempo buena vval2 = digitalRead(switchPin2); // lee la entrada otra vez para comprobar saltos if (vval == vval2) { // asegurar que conseguimos 2 lecturas constantes if (vval != botonStado2) { // el estado de bot�n ha cambiado! if (vval == LOW) { // compruebe si el bot�n es presionado if (lightMode2 == 0) { // esta la luz AP? lightMode2 = 1; // conecta la luz! digitalWrite(ledPin2, HIGH); } else { lightMode2 = 0; // apaga la luz! digitalWrite(ledPin2, LOW); } buttonCounter2 -- ; anota(); } if (buttonCounter2 <= -99){ buttonCounter2 = 0; } } botonStado2 = vval; // guardar el nuevo estado en la variable } if (pac == 1) { buttonCounter = 0 ; buttonCounter2 = 0 ; anota(); } } void anota() { Serial.print("Pulsaciones Incremento: "); // muestro las if (buttonCounter <10) Serial.print("0"); // pulsaciones Serial.print(buttonCounter, DEC); // habidas // Serial.print(" Decremento: "); // muestro las Serial.println(buttonCounter2, DEC); // habidas Serial.print(" Total pulsaciones: "); Serial.println(buttonCounter - buttonCounter2, DEC); }