Hola,
tengo montado un prototipo para encender y apagar leds; con un botón enciendo o apago conjuntamente dos leds, otro botón para otros dos y un ultimo botón que hace lo mismo para un ultimo led, cada grupo de leds hace una cosa, el primer grupo se queda fijo o se apaga, el segundo parpadean o se apagan y el ultimo led hace un fade in-fade out continuo o se apaga.
Hasta aquí todo funciona, pero quiero cambiar los botones por interruptores de estos que tienen una palanquita (toggle switch).
Dejo una foto de uno parecido a los que tengo:
Los leds están con configurados con resistencias pull-down.
He probado a conectarlos como tengo los pulsadores, pero para encender o apagar tengo que subir la palanca y luego bajarla por lo que queda siempre en la misma posición, la idea es que con la palanca hacia abajo este apagado y hacia arriba encendido cada grupo de leds.
Soy nuevo en este mundo...
No se si es cuestión de hardware solamente o también de software, por lo que pego el código.
byte pinBotonNav = 3;
byte pinLedNavG = 4;
byte pinLedNavR = 5;
byte pinBotonStb = 8;
byte pinLedStbIzq = 9;
byte pinLedStbDch = 10;
byte pinBotonBcn = 12;
byte pinLedBcn = 11;
void setup(){
pinMode(pinBotonNav, INPUT);
pinMode(pinLedNavG, OUTPUT);
pinMode(pinLedNavR, OUTPUT);
pinMode(pinBotonStb, INPUT);
pinMode(pinLedStbIzq, OUTPUT);
pinMode(pinLedStbDch, OUTPUT);
pinMode(pinBotonBcn, INPUT);
Serial.begin(9600);
}
void loop(){
monitor_estado_pulsador_nav();
monitor_estado_pulsador_stb();
monitor_estado_pulsador_bcn();
}
void monitor_estado_pulsador_nav(){
boolean pulEnav = pulsacionEncendidoNav(pinBotonNav);
delay(10); //Para evitar el efecto rebote.
if (pulEnav == true){
digitalWrite(pinLedNavG, HIGH);
digitalWrite(pinLedNavR, HIGH);
}else{
digitalWrite(pinLedNavG, LOW);
digitalWrite(pinLedNavR, LOW);
}
}
void monitor_estado_pulsador_stb(){
boolean pulEstb = pulsacionEncendidoStb(pinBotonStb);
delay(10); //Para evitar el efecto rebote.
if (pulEstb == true){
parpadear();
}else{
digitalWrite(pinLedStbIzq, LOW);
digitalWrite(pinLedStbDch, LOW);
}
}
void monitor_estado_pulsador_bcn(){
boolean pulEstb = pulsacionEncendidoBcn(pinBotonBcn);
delay(10); //Para evitar el efecto rebote.
if (pulEstb == true){
beacon();
}else{
digitalWrite(pinLedBcn, LOW);
}
}
boolean pulsacionEncendidoNav(byte pinBotonNav){
static boolean estadoUltimo = 0;
static int contador = 0;
boolean estadoActual;
estadoActual = digitalRead(pinBotonNav);
if(estadoActual != estadoUltimo){
if(estadoActual == HIGH){
if(contador % 2 == 0){
Serial.print('1');
}else{
Serial.print('0');
}
contador++;
}
}
estadoUltimo = estadoActual;
if(contador % 2 == 0){
return false;
}else{
return true;
}
}
boolean pulsacionEncendidoStb(byte pinBotonStb){
static boolean estadoUltimo = 0;
static int contador = 0;
boolean estadoActual;
estadoActual = digitalRead(pinBotonStb);
if(estadoActual != estadoUltimo){
if(estadoActual == HIGH){
if(contador % 2 == 0){
Serial.print('1');
}else{
Serial.print('0');
}
contador++;
}
}
estadoUltimo = estadoActual;
if(contador % 2 == 0){
return false;
}else{
return true;
}
}
boolean pulsacionEncendidoBcn(byte pinBotonBcn){
static boolean estadoUltimo = 0;
static int contador = 0;
boolean estadoActual;
estadoActual = digitalRead(pinBotonBcn);
if(estadoActual != estadoUltimo){
if(estadoActual == HIGH){
if(contador % 2 == 0){
Serial.print('1');
}else{
Serial.print('0');
}
contador++;
}
}
estadoUltimo = estadoActual;
if(contador % 2 == 0){
return false;
}else{
return true;
}
}
void parpadear(){
static boolean estadoLed = LOW;
static unsigned long tUCambioLed = 0;
unsigned long intervalo = 50;
unsigned long tActual = millis();
if(tActual - tUCambioLed >= intervalo){
tUCambioLed = tActual;
if(estadoLed == LOW){
estadoLed = HIGH;
} else {
estadoLed = LOW;
}
digitalWrite(pinLedStbIzq, estadoLed);
digitalWrite(pinLedStbDch, estadoLed);
}
}
void beacon(){
int value;
int periode = 2000;
int displace = 500;
long time=0;
time = millis();
value = 128+127*cos(2*PI/periode*time);
analogWrite(pinLedBcn, value); // sets the value (range from 0 to 255)
}
Gracias por vuestro tiempo!
Un saludo, Jose.