A partir de este código, el cual enciende progresivamente cada parte del RGB, mediante un pulsador. ¿Se podría a cambiar a que cada vez que pulsemos un pulsador, vaya incrementándose la intensidad pero ño progresivamente?
int Ledrojo = 6;
int Ledverde = 5;
int Ledazul = 4;
int Pulsrojo = 8;
int Pulsverde = 9;
int Pulsazul = 10;
int Puls0 = 11;
int rojo = 0;
int azul = 0;
int verde = 0;
void setup()
{
pinMode(Ledrojo, OUTPUT);
pinMode(Ledverde, OUTPUT);
pinMode(Ledazul, OUTPUT);
pinMode(Pulsrojo, INPUT_PULLUP);
pinMode(Pulsverde, INPUT_PULLUP);
pinMode(Pulsazul, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(Pulsrojo) == LOW)
{
rojo ++;
if (rojo > 255) rojo = 0;
}
if (digitalRead(Pulsverde) == LOW)
{
verde ++;
if (verde > 255) verde = 0;
}
if (digitalRead(Pulsazul) == LOW)
{
azul ++;
if (azul > 255) azul = 0;
}
analogWrite(Ledrojo, rojo);
analogWrite(Ledverde, verde);
analogWrite(Ledazul, azul);
delay(50);
}
No, sería que por ejemplo la primera vez que lo pulses pase de 0 a 25, la segunda de 25 a 50. Así progresivamente hasta que al pasarse de 255, se ponga 0 y vuelvas a empezar.
Solo una cosita,
Si esperas que los valores estén entre 0 y 255 mejor utilizar una variable tipo "byte".
Así además te ahorras los "if" dado que si vale 255 y le sumas uno, vuelve a cero.
int Ledrojo = 6;
int Ledverde = 5;
int Ledazul = 4;
int Pulsrojo = 8;
int Pulsverde = 9;
int Pulsazul = 10;
int Pulsrojo2 = 11;
int Pulsverde2 = 12;
int Pulsazul2 = 13;
int rojo = 0;
int azul = 0;
int verde = 0;
void setup()
{
pinMode(Ledrojo, OUTPUT);
pinMode(Ledverde, OUTPUT);
pinMode(Ledazul, OUTPUT);
pinMode(Pulsrojo, INPUT_PULLUP);
pinMode(Pulsverde, INPUT_PULLUP);
pinMode(Pulsazul, INPUT_PULLUP);
pinMode(Pulsrojo2, INPUT_PULLUP);
pinMode(Pulsverde2, INPUT_PULLUP);
pinMode(Pulsazul2, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(Pulsrojo) == LOW)
{
rojo ++;
if (rojo > 255) rojo = rojo + 50;
}
if (digitalRead(Pulsverde) == LOW)
{
verde ++;
if (verde > 255) verde = verde + 50;
}
if (digitalRead(Pulsazul) == LOW)
{
azul ++;
if (azul > 255) azul = azul + 50;
}
if (digitalRead(Pulsrojo2) == LOW)
{
rojo --;
if (rojo > 255) rojo = rojo + 50;
}
if (digitalRead(Pulsverde2) == LOW)
{
verde --;
if (verde > 255) verde = verde + 50;
}
if (digitalRead(Pulsazul2) == LOW)
{
azul --;
if (azul > 255) azul = azul + 50;
}
analogWrite(Ledrojo, rojo);
analogWrite(Ledverde, verde);
analogWrite(Ledazul, azul);
delay(50);
}
Ahora he intentado, que cada vez que pulse uno de los tres primeros pulsadores se sume 50, pero cada vez que se pulse uno de los tres últimos se reste. Tengo el problema que cada vez que llego a 0 y vuelvo a restar, se pone automáticamente en el máximo y no funciona.
@Pastormald0nad0 es difícil saber exáctamente lo que quieres,
¿Quieres que al pulsar un botón suba la intensidad 25 pero que no suba más hasta que no vuelvas a pulsar el pulsador? es decir ¿obligar a pulsar varias veces para que suba la intensidad?
entonces tienes que hacer esto:
int rojo=0;
const int intensidad=25;
...
if (digitalRead(Pulsrojo) == LOW) //se ha oprimido el pulsador rojo de subir intensidad?
{
rojo=rojo+intensidad; //subir intensidad
if (rojo>255) rojo=255; //que no supere los 255
analogWrite(Ledrojo, rojo); //poner la intensidad del led
while (digitalRead(Pulsrojo)==LOW) ; //esperar a que el pulsador se suelte
}
if (digitalRead(Pulsrojo2) == LOW) //se ha oprimido el pulsador rojo de bajar intensidad?
{
rojo=rojo-intensidad; //bajar intensidad
if (rojo<0) rojo=0; //que no sea menor que cero
analogWrite(Ledrojo, rojo); //poner la intensidad del led
while (digitalRead(Pulsrojo2)==LOW) ; //esperar a que el pulsador se suelte
}
O si quiere no tener que andar pulsando repetidamente tambien podria hacer esto otro.
int rojo;
const int intensidad = 25;
const int velocidad = 250; // velocidad de aumento/descenso automatico si no se suelta el pulsador
while (digitalRead(Pulsrojo) == LOW) { //esperar a que el pulsador se pulse o suelte// mientras esta pulsado aumenta dinamicamente segun velocidad
rojo = rojo + intensidad; //subir intensidad
if (rojo > 255) rojo = 255; //que no supere los 255
analogWrite(Ledrojo, rojo); //poner la intensidad del led
delay (velocidad);
}
while (digitalRead(Pulsrojo2) == LOW) { //esperar a que el pulsador se pulse o suelte// mientras esta pulsado disminulle dinamicamente segun velocidad
rojo = rojo - intensidad; //bajar intensidad
if (rojo < 0) rojo = 0; //que no baje de los 0
analogWrite(Ledrojo, rojo); //poner la intensidad del led
delay (velocidad);
}