Retardo de Encendido (Solucionado)

Hola lo que quiero es que la salida "led=8" dure 20 segundo para prender luego que la salida 13 encienda y que apague de junto con la salida osea que para el encendido de la salida "led=8" espere 20 segundos pero que el apagado sea junto con la salida 13. sin usar "delay" porque luego tengo problemas con el push botton

Saludos

int led=8;
int buttonPin = 2;   
int ledPin = 13;     
int ledState = HIGH;       
int buttonState;   
int lastButtonState = LOW;   
unsigned long lastDebounceTime = 0; 
unsigned long debounceDelay = 50;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT); 
pinMode(led,OUTPUT);
}
void loop() {

int reading = digitalRead(buttonPin);                                         
if (reading != lastButtonState) {
  lastDebounceTime = millis();
 
}
if ((unsigned long)(millis() - lastDebounceTime) > debounceDelay) {
      if (reading != buttonState) {
           buttonState = reading;   
                if (buttonState == HIGH) {
                     ledState = !ledState;
    }
  }
}
digitalWrite(ledPin, ledState);
lastButtonState = reading;

if (ledState==1)
{                                     //aqui es que debo agregar el tiempo pero no se como usar millis(). el millis() de arriva
                                        es un ejemplo de arduino en realidad no se como usarlo
  digitalWrite(led,1);
}
if (ledState==0)
{
  digitalWrite(led,0);
}

}

Lo que tienes que hacer es :
Leer las Normas del foro.
Luego ve a More (abajo a la derecha), click, luego Modify y estas en modo EDICION.
**Selecciona todo el código y click en </> arriba del emoticon **

Cuando lo hagas yo respondo.
También para la próxima no uses el foro Proyectos para una consulta como la que has hecho.
Esto se moverá a Software

Que confuso!!

A ver si te interpreto parcialmente. LED1 (pin 8) debe apagase 20 seg luego que le das la orden de hacerlo
Pero no se cuando se enciende LED2 (pin13)

const byte LED1Pin              = 8;
const byte LED2Pin              = 13;     
const byte buttonPin            = 2;   

bool ledState                   = HIGH;       
bool lastButtonState            = LOW; 
bool buttonState;   

unsigned long debounceDelay     = 50;
unsigned long lastDebounceTime; 
unsigned long startDelay;
unsigned long retardoApagado    = 20000;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(LED1Pin, OUTPUT); 
  pinMode(LED2Pin, OUTPUT);
}
void loop() {

  int reading = digitalRead(buttonPin);                                         
  
  if (reading != lastButtonState) {
    lastDebounceTime = millis() + debounceDelay;
   
  }

  if (millis() > lastDebounceTime) {
      if (reading != buttonState) {
          buttonState = reading;   
          if (buttonState == HIGH) {
              ledState = !ledState;
              if (ledstate)
                  startDelay = millis() + retardoApagado; // 
          }
      }
  }
  digitalWrite(LED2Pin, ledState);

  lastButtonState = reading;

  if (ledState) {                      // aqui es que debo agregar el tiempo pero no se como usar millis() el millis() de arriba
     digitalWrite(LED1Pin,  HIGH);     // es un ejemplo de arduino en realidad no se como usarlo
  }
  if (!ledstate && millis()>startDelay) { // si ledstate = 0 y pasaron 20 seg apago LED1
     digitalWrite(LED1Pin, LOW);
  }
}

Hola gracias por responder.

Aclaro:
1- el pin 13 prendera con un push_button y 20 segundos despues prende el pin 8.

2- el pin 13 apagara con el mismo push_button y el pin 8 apagara de inmediato, y asi se repite todo el siclo.

Es un retardo de encendido condicional pero el apagado es inmediato.

Saludos.

#define led1 13
#define led2 8
#define button 3
#define OFF    HIGH
#define ON     LOW

bool pulsado  = false;
bool iniciado  = false;
unsigned long tiempo = 0;

void setup(){
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(button, INPUT_PULLUP);
}

void loop(){
    if(!digitalRead(button)){
        delay(100);
        if(!digitalRead(button))pulsado = ~pulsado;
        while(!digitalRead(button)){}
    }

    if(pulsada){
        digitalWrite(led1,ON);
        if(!iniciado)tiempo = millis();
        iniciado = true;
    }else{
        digitalWrite(led1,OFF);
        digitalWrite(led2,OFF);
        iniciado = false;
    }
   if(iniciado && (millis()-tiempo>20000))digitalWrite(led2,ON);
}

Hola Max_Saeta gracias por ayudar, cargue el codigo y no funciona asi que le hice algunas modificaciones y funciona pero amedias.

Saludos

int led1= 13;
int led2= 8;
int button= 2;
int OFF=    HIGH;
int ON  =   LOW;

bool pulsado  = false;
bool iniciado  = false;
unsigned long tiempo = 0;

void setup(){
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(button, INPUT);
}

void loop(){
    if(!digitalRead(button)){
        delay(100);
        if(!digitalRead(button))pulsado = ~pulsado;
        while(!digitalRead(button)){}
    }

    if(pulsado){
        digitalWrite(led1,HIGH);
        if(!iniciado)tiempo = millis();
        iniciado = true;
    }else{
        digitalWrite(led1,LOW);
        digitalWrite(led2,LOW);
        iniciado = false;
    }
   if(iniciado && (millis()-tiempo>2000))digitalWrite(led2,HIGH);
}

Había muy poco para modificar en mi sugerencia

const byte LED1Pin              = 8;
const byte LED2Pin              = 13;     
const byte buttonPin            = 2;   

bool ledState                   = HIGH;       
bool lastButtonState            = LOW; 
bool buttonState;   
bool reading;

unsigned long debounceDelay     = 50;
unsigned long lastDebounceTime; 
unsigned long startDelay;
unsigned long retardoApagado    = 20000;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(LED1Pin, OUTPUT); 
  pinMode(LED2Pin, OUTPUT);
}
void loop() {

  reading = digitalRead(buttonPin);                                         
  
  if (reading != lastButtonState) {
      lastDebounceTime = millis() + debounceDelay;
   
  }

  if (millis() > lastDebounceTime) {
      if (reading != buttonState) {
          buttonState = reading;   
          if (buttonState == HIGH) {
              ledState = !ledState;
              if (ledstate)
                  startDelay = millis() + retardoApagado; // 
          }
      }
  }
  

  lastButtonState = reading;

  if (ledState) {                      // aqui es que debo agregar el tiempo pero no se como usar millis() el millis() de arriba
     digitalWrite(LED2Pin,  HIGH);     // es un ejemplo de arduino en realidad no se como usarlo
     if (millis()>startDelay)
         digitalWrite(LED1Pin, HIGH);  // Activo pin 8 20 segundos despues
  }
  else {
     digitalWrite(LED2Pin, LOW);
     digitalWrite(LED1Pin, LOW);
  }
}

Perfecto gracias.

Cordiales Saludos

alguien que me ayude con una programacion necesito que al presionar un boton normalmente abierto pasen 5 segundos y se encienda el led y que cuando vuelva a presionar el boton se apague

Alguien que te ayude con las normas del foro.
No revivas hilos viejos, crea el propio haciendo debidamente tu consulta.
Hilo cerrado.
Este es un hilo del 2017 y ya pasaron 2 años.