Error funcionamiento código

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.

No consigo ver el error, adjunto el programa:

> //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;
> }
> }

Los pines 12 y 13 no son PWM, cambia a otros.

  analogWrite(terapia,LOW);

Es lo mismo que

  analogWrite(terapia,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.

Saludos

Estoy usando Arduino Micro, en las especificaciones indica que si lo son.

Gracias por la respuesta!!

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.

Efectivamente la 13 si lo es, pero la 12 no. Justo la del amarillo

En las especificaciones dice 3, 5, 6, 9, 10, 11 y 13 (son los pines marcados con ~ )

Saludos

Muchas gracias, es muy de ayuda para alguien que se esta iniciando en esto, probare las modificaciones!!

Lo reviso!!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.