// --- Declaración de constantes, nº de puertos
const int boton = 8;
const int led1 = 9;
const int led2 = 10;
const int led3 = 11;
const int led4 = 12;
// --- Variables de trabajo
bool estadoboton = true ;
// --- Configuración general
void setup() {
// --- Activacion de los estados de los puertos
pinMode(boton, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
// --- Apago los led
digitalWrite(led1 , false);
digitalWrite(led2 , false);
digitalWrite(led3 , false);
digitalWrite(led4 , false);
}
// --- Ciclo
void loop() {
// --- Pregunto el estado del boton
estadoboton = digitalRead(boton);
// ---Si pulso boton enciende led 1 y apaga (led 2, 3 y 4)
if (estadoboton == false) {
// --- Elimino rebote
delay(50);
// --- Si pulso boton enciende led 1 y apaga (led 2, 3 y 4)
if (estadoboton == false) {
digitalWrite(9, true);
digitalWrite(10, false);
digitalWrite(11, false);
digitalWrite(12, false);
// --- Pregunto el estado del boton
estadoboton = digitalRead(boton);
// --- Si dejo de pulsar boton apaga (led 1, 3 y 4) y enciende led 2
if (estadoboton == true) {
// --- Elimino rebote
delay(50);
// --- Si dejo de pulsar boton apaga (led 1, 3 y 4) y enciende led 2
if (estadoboton == true) {
digitalWrite(9, false);
digitalWrite(10, true);
digitalWrite(11, false);
digitalWrite(12, false);
}
}
}
}
}Hola, en lo personal yo utilizaría una variable y luego aplico rotación de bits. Una vez rotado, ya sea a izq. o derecha, enviar esa variable al puerto dónde están conectados los LEDs.
#define BOTON (PINB&1)
// --- Variables de trabajo
uint8_t seq = 1;
void setup() {
DDRB = 0b00011110 ;
PORTB = 0 ;
}
void loop() {
if( BOTON == 0) {
if((seq<<=1) == 0x20) seq=2 ; // Rota el led
PORTB = seq ;
while( BOTON == 0) delay(50); // --- Elimino rebote
}
}