Buenas, estoy realizando el control de encendido y apagado de 3 líneas de led distintas mediante un botón cada una, y luego aparte también debe de cambiar la intensidad en 2 de las líneas de led.
el problema esta en que estando programado de la misma manera las tres opciones por separado funcionan correctamente, es decir, el encendido apagado de la línea de led rojos, el encendido, apagado y control luminoso de la línea de led Azules y lo mismo con la amarilla. pero al juntarlo y que funcione todo junto, la lineal de Led amarilla no realiza ninguna función.
> //LAMPARA DE FOTOTERAPIA
>
> //Pulsadores.
>
> const int ronoff=4; //Indica el encendido y apagado de LED rojo.
> const int aonoff=5; //Indica el encendido y apagado de LED Amarillo.
> const int bonoff=6; //Indica el encendido y apagado de LED Azul.
> const int amas=7; //Aumenta intensidad luminica LED Amarillo.
> const int amenos=8; //Disminulle intensidad liminica LED Amarillo.
> const int bmas=9; //Aumenta intensidad luminica LED Azul.
> const int bmenos =10; //Disminulle intensidad luminica LED Azul.
>
> //Salidas de iluminación.
>
> const int centrar=11; //Salida de señal para control de LED Rojos.
> const int iluminar=12; //Salida de señal para control de LED Amarillos.
> const int terapia=13; //Salida de señal para control de LED Azules.
>
> //Variables encendido/apagado de los LED.
>
> int bval=0; //Estado actual del botón.
> int prebval=0; //Estado anterior del botón.
> int stateb=0; //Almacenado de estado control Azul.
>
> int aval=0; //Estado actual del botón.
> int preaval=0; //Estado anterior del botón.
> int statea=0; //Almacenado de estado control Amarillo.
>
> int rval=0; //Estado actual del botón.
> int prerval=0; //Estado anterior del botón.
> int stater=0; //Almacenado de estado control Rojo.
>
> //Variables de aumento de intensidad.
>
> int bup=0; //Guarda estado boton de aumento de intensidad en Azul.
> int aup=0; //Guarda estado boton de aumento de intensidad en Amarillo.
>
> //Variables de decremento de intensidad.
>
> int bdown=0; //Guarda estado boton de decremento de intensidad en Azul.
> int adown=0; //Guarda estado boton de decremento de intensidad en Azul.
>
> //intensidades a variar.
>
> int blue; //Variable para calcular la disminución de intensidad.
> int yellow; //Variable para calcular la disminución de intensidad.
>
> void setup() {
>
> //Salidas de senal PWM y digitales.
>
> pinMode(terapia,OUTPUT);
> pinMode(iluminar,OUTPUT);
> pinMode(centrar,OUTPUT);
>
> //Entradas de señal digital.
>
> pinMode(bmenos,INPUT);
> pinMode(bmas,INPUT);
> pinMode(amenos,INPUT);
> pinMode(amas,INPUT);
> pinMode(ronoff,INPUT);
> pinMode(aonoff,INPUT);
> pinMode(bonoff,INPUT);
>
> }
>
> void loop() {
>
> //Lectura inicial de los botones de encendido y apagado.
> rval=digitalRead(ronoff);
> delay(10);
> aval=digitalRead(aonoff);
> delay(10);
> bval=digitalRead(bonoff);
> delay(10);
>
> //Condicionado del estado de los LED.
>
> if((rval==1)&&(prerval==0)){ //Guardado de estado de Rojo.
> stater=1-stater;
> delay(10);
> }
> prerval=rval; //Se iguala valor previo y valor de boton on/off.
> delay(10);
>
> if((aval==1)&&(preaval==0)){ //Guardado de estado Amarillo.
> statea=1-statea;
> delay(10);
> }
> preaval=aval; //Se iguala valor previo y valor de botón on/off.
> delay(10);
>
> if((bval==1)&&(prebval==0)){ //Guardado de estado Azul.
> stateb=1-stateb;
> delay(10);
> }
> prebval=bval; //Se iguala valor previo y valor de botón on/off.
> delay(10);
>
> //encendido y apagado de LED Rojo.
>
> if((stater==1)&&(stateb==0)){
> digitalWrite(centrar,HIGH);
> delay(10);
> }
>
> else{
> digitalWrite(centrar,LOW);
> delay(10);
> }
>
> //Control intensidad LED´s Azules
> if(stateb==1){
> bup=digitalRead(bmas); //Lectura de entrada y almacenado de valor.
> bdown=digitalRead(bmenos); //Lectura de entrada y almacenado de valor.
>
> //Aumento intensidad luminica.
> if((bup==1)&&(blue<=255)){
> blue=255;
> if(blue>=255){
> blue=255;
> }
> }
> if((bdown==1)&&(blue>=90)){
> blue=90;
> if(blue<=90){
> blue=90;
> }
> }
> analogWrite(terapia,blue);
>
> }
> else{
> analogWrite(terapia,LOW);
> }
>
> //Control intendidad LED´s amarillos.
>
> if(statea==1){
> aup=digitalRead(amas);
> adown=digitalRead(amenos);
>
>
> if((aup==1)&&(yellow<=255)){
> yellow=yellow+5;
> if(yellow>=255){
> yellow=255;
> }
> }
> if((adown==1)&&(yellow>=0)){
> yellow=yellow-5;
> if(yellow<=0){
> yellow=0;
> }
> }
> analogWrite(iluminar,yellow);
> }
> else{
> analogWrite(iluminar,LOW);
> }
>
> if(stateb==1){
> stater=0;
> }
> }
porque LOW equivale a 0 por definición.
No es importante, siempre que tengas presente que pones la salida PWM al valor 0, pero por un tema de claridad, no tiene sentido usar LOW para una salida analógica, lo lógico y esperable es poner 0.
Tu código tiene muchos errores
Muchas comparaciones las haces contra = y deben ser ==
Revisa, te paso uno corregido aunque hay mas cosas que no estan bien.
#include <Arduino.h>
//LAMPARA DE FOTOTERAPIA
//Pulsadores.
const int ronoff=4; //Indica el encendido y apagado de LED rojo.
const int aonoff=5; //Indica el encendido y apagado de LED Amarillo.
const int bonoff=6; //Indica el encendido y apagado de LED Azul.
const int amas=7; //Aumenta intensidad luminica LED Amarillo.
const int amenos=8; //Disminulle intensidad liminica LED Amarillo.
const int bmas=9; //Aumenta intensidad luminica LED Azul.
const int bmenos =10; //Disminulle intensidad luminica LED Azul.
//Salidas de iluminación.
const int centrar=11; //Salida de señal para control de LED Rojos.
const int iluminar=12; //Salida de señal para control de LED Amarillos.
const int terapia=13; //Salida de señal para control de LED Azules.
//Variables encendido/apagado de los LED.
int bval=0; //Estado actual del botón.
int prebval=0; //Estado anterior del botón.
int stateb=0; //Almacenado de estado control Azul.
int aval=0; //Estado actual del botón.
int preaval=0; //Estado anterior del botón.
int statea=0; //Almacenado de estado control Amarillo.
int rval=0; //Estado actual del botón.
int prerval=0; //Estado anterior del botón.
int stater=0; //Almacenado de estado control Rojo.
//Variables de aumento de intensidad.
int bup=0; //Guarda estado boton de aumento de intensidad en Azul.
int aup=0; //Guarda estado boton de aumento de intensidad en Amarillo.
//Variables de decremento de intensidad.
int bdown=0; //Guarda estado boton de decremento de intensidad en Azul.
int adown=0; //Guarda estado boton de decremento de intensidad en Azul.
//intensidades a variar.
int blue; //Variable para calcular la disminución de intensidad.
int yellow; //Variable para calcular la disminución de intensidad.
void setup() {
//Salidas de senal PWM y digitales.
pinMode(terapia,OUTPUT);
pinMode(iluminar,OUTPUT);
pinMode(centrar,OUTPUT);
//Entradas de señal digital.
pinMode(bmenos,INPUT);
pinMode(bmas,INPUT);
pinMode(amenos,INPUT);
pinMode(amas,INPUT);
pinMode(ronoff,INPUT);
pinMode(aonoff,INPUT);
pinMode(bonoff,INPUT);
}
void loop() {
//Lectura inicial de los botones de encendido y apagado.
rval = digitalRead(ronoff);
aval = digitalRead(aonoff);
bval = digitalRead(bonoff);
//Condicionado del estado de los LED.
if (rval==1 && !prerval){ //Guardado de estado de Rojo.
stater=1-stater;
delay(10);
}
prerval = rval; //Se iguala valor previo y valor de boton on/off.
delay(10);
if (aval && !preaval) //Guardado de estado Amarillo.
statea = !statea;
preaval = aval; //Se iguala valor previo y valor de botón on/off.
delay(10);
if (bval&& !prebval){ //Guardado de estado Azul.
stateb = !stateb;
}
prebval = bval; //Se iguala valor previo y valor de botón on/off.
//encendido y apagado de LED Rojo.
if (stater&& !stateb)
digitalWrite(centrar,HIGH);
else
digitalWrite(centrar,LOW);
//Control intensidad LED´s Azules
if (stateb){
bup = digitalRead(bmas); //Lectura de entrada y almacenado de valor.
bdown = digitalRead(bmenos); //Lectura de entrada y almacenado de valor.
//Aumento intensidad luminica.
if (bup && blue<=255){
blue = 255;
if (blue == 255){
blue = 255;
}
}
if (bdown && blue>=90){
blue=90;
if (blue<=90){
blue=90;
}
}
analogWrite(terapia,blue);
}
else{
analogWrite(terapia,0);
}
//Control intendidad LED´s amarillos.
if (statea) {
aup = digitalRead(amas);
adown = digitalRead(amenos);
if (aup && yellow<=255){
yellow += 5;
if (yellow ==255){
yellow = 255;
}
}
if (adown && yellow>=0){
yellow -= 5;
if (yellow <=0){
yellow = 0;
}
}
analogWrite(iluminar,yellow);
}
else
analogWrite(iluminar,LOW);
if (stateb){
stater=0;
}
}
Estas porciones debes revisarlas.
if (bup && blue<=255){
blue = 255;
if (blue == 255){
blue = 255;
}
Aca le dies que si blue >= 255 poner blue en 255 y luego preguntas si es 255 cosa que ya hiciste ylo vuelves a asignar. O sea derroche de tiempo.
Aca lo mismo
if (bdown && blue>=90){
blue=90;
if (blue<=90){
blue=90;
}
Aca preguntas si es mayor a 90 y sino lo iguales a 90 y si es menor tmb lo iguales a 90 pero no tiene sentido. Coloca blue = 90 en una linea sin comparaciones y tendras lo mismo.
Revisa estas porciones de código.