// Radio Buttons!
const int led1Pin = 2; // LED pin number
const int button1 = A0;
const int led2Pin = 3;
const int button2 = A1;
const int led3Pin = 4;
const int button3 = A2;
const int led4Pin = 5;
const int button4 = A3;
char bstate1 = 0;
char bstate2 = 0;
char bstate3 = 0;
char bstate4 = 0;
unsigned long bcount1 = 0; // button debounce timer. Replicate as necessary.
unsigned long bcount2 = 0;
unsigned long bcount3 = 0;
unsigned long bcount4 = 0;
// Have we completed the specified interval since last confirmed event?
// "marker" chooses which counter to check
// Routines by Paul__B of Arduino Forum
boolean timeout(unsigned long *marker, unsigned long interval) {
if (millis() - *marker >= interval) {
*marker += interval; // move on ready for next interval
return true;
}
else return false;
}
// Deal with a button read; true if button pressed and debounced is a new event
// Uses reading of button input, debounce store, state store and debounce interval.
// Routines by Paul__B of Arduino Forum
boolean butndown(char button, unsigned long *marker, char *butnstate, unsigned long interval) {
switch (*butnstate) { // Odd states if was pressed, >= 2 if debounce in progress
case 0: // Button up so far,
if (button == HIGH) return false; // Nothing happening!
else {
*butnstate = 2; // record that is now pressed
*marker = millis(); // note when was pressed
return false; // and move on
}
case 1: // Button down so far,
if (button == LOW) return false; // Nothing happening!
else {
*butnstate = 3; // record that is now released
*marker = millis(); // note when was released
return false; // and move on
}
case 2: // Button was up, now down.
if (button == HIGH) {
*butnstate = 0; // no, not debounced; revert the state
return false; // False alarm!
}
else {
if (millis() - *marker >= interval) {
*butnstate = 1; // jackpot! update the state
return true; // because we have the desired event!
}
else
return false; // not done yet; just move on
}
case 3: // Button was down, now up.
if (button == LOW) {
*butnstate = 1; // no, not debounced; revert the state
return false; // False alarm!
}
else {
if (millis() - *marker >= interval) {
*butnstate = 0; // Debounced; update the state
return false; // but it is not the event we want
}
else
return false; // not done yet; just move on
}
default: // Error; recover anyway
{
*butnstate = 0;
return false; // Definitely false!
}
}
}
// button 5
int LED5 = 6;
int Tbutton5 = 12;
bool toggle1=false;
// button 6
int LED6 = 7;
int Tbutton6 = 13;
bool toggle2=false;
void setup()
{
pinMode(led1Pin, OUTPUT);
pinMode(button1, INPUT);
pinMode(led2Pin, OUTPUT);
pinMode(button2, INPUT);
pinMode(led3Pin, OUTPUT);
pinMode(button3, INPUT);
pinMode(led4Pin, OUTPUT);
pinMode(button4, INPUT);
digitalWrite (led1Pin, LOW);
digitalWrite (led2Pin, LOW);
digitalWrite (led3Pin, LOW);
digitalWrite (led4Pin, LOW);
pinMode(Tbutton5, INPUT);
pinMode(LED5, OUTPUT);
pinMode(Tbutton6, INPUT);
pinMode(LED6, OUTPUT);
}
void loop(){
Serial.begin(9600);
// Select LED if button debounced
if (butndown(digitalRead(button4), &bcount4, &bstate4, 2UL )) {
digitalWrite (led1Pin, LOW);
digitalWrite (led2Pin, LOW);
digitalWrite (led3Pin, LOW);
digitalWrite (led4Pin, HIGH);
}
// Select LED if button debounced
if (butndown(digitalRead(button3), &bcount3, &bstate3, 2UL )) {
digitalWrite (led1Pin, LOW);
digitalWrite (led2Pin, LOW);
digitalWrite (led3Pin, HIGH);
digitalWrite (led4Pin, LOW);
}
// Select LED if button debounced
if (butndown(digitalRead(button2), &bcount2, &bstate2, 2UL )) {
digitalWrite (led1Pin, LOW);
digitalWrite (led2Pin, HIGH);
digitalWrite (led3Pin, LOW);
digitalWrite (led4Pin, LOW);
}
// Select LED if button debounced
if (butndown(digitalRead(button1), &bcount1, &bstate1, 2UL )) {
digitalWrite (led1Pin, HIGH);
digitalWrite (led2Pin, LOW);
digitalWrite (led3Pin, LOW);
digitalWrite (led4Pin, LOW);
}
// Button 5 Toggle
if(digitalRead(Tbutton5)){//Cuando el boon se preciona
if(toggle1)
toggle1=false;//Si estaba encendido se apaga
else
toggle1=true;//Si estaba apagado se enciende
}
while(digitalRead(Tbutton5)){}//Se espera hasta que el boton se deje de presionar
//Se cambia el estado de los leds
digitalWrite(LED5,toggle1);
// Button 6 Toggle
if(digitalRead(Tbutton6)){//Cuando el boon se preciona
if(toggle2)
toggle2=false;//Si estaba encendido se apaga
else
toggle2=true;//Si estaba apagado se enciende
}
while(digitalRead(Tbutton6)){}//Se espera hasta que el boton se deje de presionar
//Se cambia el estado de los leds
digitalWrite(LED6,toggle2);
}