Ayuda con el codigo.

Hola, quiero montar un arduino uno para que haga un encendido progresivo, permanezca encendido un tiempo y haga un apagado progresivo mediante 2 interruptores, es para un hospicio.
Explico un poco:
Al cerrar el interruptor1 encienda unos led del techo lentamente durante 3 minutos, estos permanezcan encedidos hasta que se pulse el interruptor2 que hara que se apagen lentamente durante 5 minutos.
En la otra sala que al pulsar el interruptor3 se enciendan de golpe al maximo y al pulsar de nuevo un interruptor4 se apaguen en 5 minutos. He probado infinidad de posibles codigos, pero no consigo nada. los codigos te tengo son.:

******encndido progresivo y parada a la maxima
int ledPin = 3; // LED pwm 3

void setup() { // vacio
}

void loop() {

for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5)
//incremeto de 5
{ analogWrite(ledPin, fadeValue);

delay(30);
}
for(int fadeValue = 255 ; fadeValue = 255; fadeValue +=0)//blokeo encendido maximo
{
analogWrite(ledPin, fadeValue);
}}

************Apagado progresivo y oscuridad total

int ledPin = 3; // LED pwm 3
void setup() { // vacio
}
void loop() {
for(int fadeValue = 255; fadeValue >= 0; fadeValue -=5) { // decremento de 5
analogWrite(ledPin, fadeValue);
delay(30);
}
for(int fadeValue = 0 ; fadeValue = -256; fadeValue -=0) {
analogWrite(ledPin, fadeValue); //oscuridad total
}}


Al montar el codigo para el encendido maximo y apagado progresivo, si hace el arranque progresivo pero se queda clavada en oscuridad total y no hay manera que enciendan de nuevo. este es el codigo:

int buttonPin = 2;// interruptor3
int ledPin = 3;

int estado = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}

void loop(){
estado = digitalRead(buttonPin);

if (estado == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
for(int fadeValue = 255; fadeValue >= 0; fadeValue -=1) {

analogWrite(ledPin, fadeValue);
delay(100);
}}
for(int fadeValue = 0 ; fadeValue = -256; fadeValue -=0) {

analogWrite(ledPin, fadeValue);
}}

int buttonPin = 7;// interruptor1
int ledPin = 6;

int estado = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}

void loop(){
estado = digitalRead(buttonPin);

if (estado == HIGH) {
for(int fadeValue = 0; fadeValue <= 255; fadeValue +=1) {

analogWrite(ledPin, fadeValue);
delay(100);
}}
for(int fadeValue = 255 ; fadeValue = 255; fadeValue +=0) {

analogWrite(ledPin, fadeValue);
}
}
else {
digitalWrite(ledPin, LOW);}}


Esto no tiene ningun fin lucrativo, solo ayudar a un hospicio. Un saludo y gracias

Hola Layco, te recomiendo que, cuando desees agregar información edites el post. En cada uno de tus post un botón de “editar” para agregar y eliminar información.

Además, colocar el código entre las etiquetas de código, valga la redundancia.

Cuanto posteas o editas en “full mode”, es el segundo icono de derecha a izquierda, en la primera linea, y cuando estás en “quick edit” es el segundo de izquierda a derecha en la segunda linea

También recuerda siempre tabular tu código, así conseguirás ver si falta alguna llave o algo por el estilo, el último código que posteaste está erroneo.

con respecto a tu pregunta, a pesar que me costó mucho saber cual de los 3 o 4 código que posteaste era el que usas, el problema está en que cuando dejas el led “oscuro”
lo dejas en un loop infinito y no le dices cuando salir de allí, es por eso que en ves de usar un for, debes usar un while, con la cantidad de tiempo que quieras que se mantenga apagado

int ledPin = 3;    // LED pwm 3
int fadeValue;
uint32_t last = 0;

void setup()  {
  pinMode(ledPin, OUTPUT);
} 
void loop()  {

 //apaga el led gradualmente
 for(fadeValue = 255; fadeValue >= 0; fadeValue -=5) { // decremento de 5
 	analogWrite(ledPin, fadeValue);         
 	delay(30);                            
 }

 //espera 5 segundos
 while(millis() - last < 5000){ // espera 5 segundos
 	 analogWrite(ledPin, 0);  //oscuridad total
 	 last = millis();
 }

 //enciende el led gradualmente
 for(fadeValue = 0 ; fadeValue <= 255; fadeValue +=5){
	analogWrite(ledPin, fadeValue);
	delay(30);
 }

}

con eso después de 5 segundos debería salir del loop y encenderlo nuevamente.