Ayuda para un novato

Hola quiero encender 3 o mas led de manera alternada sin usar el delay(). Estoy usando la función millis(), y con dos Led me funciona pero cuando quiero encender el tercero lo hace en distinto tiempo que los dos anteriores. acá va el código.

int ledT1 = 13; // Led testigo (led Rojo)
int ledT2 = 12; // Led testigo (led verde)
int ledOpc1 = 8; // led amarillo
int ledOpc2 = 9; // led rojo bis
int boton = 2; // pin donde se encuentra el pulsador
int LedT1State = LOW;
int LedT2State = LOW;
int LedT3State = LOW;
boolean estadoP1;

long previousMillis = 0;
long verdetime = 0;
long amatime = 0;

long intRojo = 4000; // intervalo del parpadeo (en milisegundos)
long intVerde = 4000; //segundo intervalo
long intAma = 4000;
void setup()
{

pinMode(ledT1, OUTPUT);
pinMode(ledT2, OUTPUT);
pinMode(ledOpc1, OUTPUT);
pinMode(ledOpc2, OUTPUT);
pinMode(boton, INPUT);
previousMillis = millis();
verdetime = (millis()+1000);
amatime = (millis()+1000);
}

void loop()
{
unsigned long currentMillis = millis(); // Se toma el tiempo actual

estadoP1 = digitalRead(boton);
if ((estadoP1 == true) & (LedT1State==HIGH))
{
digitalWrite( ledOpc1, LOW);
}

if (millis() - previousMillis > intRojo){
previousMillis = currentMillis;

if (LedT1State == LOW)
{
LedT1State = HIGH;
}
else
{
LedT1State = LOW;
}

digitalWrite(ledT1, LedT1State);

}
//------------------------------fin Led Testigo rojo -----------------------------------

//------------------------------Comienzo luz verd ------------------------------
estadoP1 = digitalRead(boton);
if ((estadoP1 == true) & (LedT2State==HIGH))
{
digitalWrite( ledOpc1, HIGH);
}

if (millis() - verdetime > intVerde){

verdetime = currentMillis;

if (LedT2State == LOW)
{
LedT2State = HIGH;
}
else
{
LedT2State = LOW;
}

digitalWrite(ledT2, LedT2State);

}
////---------------------- Fin Led Testigo verde ----------------------------

if (millis() - amatime >= intAma){
amatime = currentMillis;

if (LedT3State == LOW)
{
LedT3State = HIGH;
}
else
{
LedT3State = LOW;
}

digitalWrite(ledOpc1, LedT3State);
}

}

La idea es que vayan encendiéndose de manera alternada y que al presionar un pulsador haga algo x.
por ejemplo enciende led1 espera 3 seg se apaga y se enciende el led2 se apaga y se enciende el led3 y se apaga.

Si me pueden ayudar les agradezco (porque me bloquee :D)

Intenta simplificar, veo mucho código para hacer algo muy simple, contra más código más posibilidades de error tienes.

Este código es una secuencia de 4 LED utilizando la funcion millis()

int ledT1 = 13; // Led testigo (led Rojo)
int ledT2 = 12; // Led testigo (led verde)
int ledOpc1 = 11; // led amarillo
int ledOpc2 = 10; // led azul

unsigned long time = 0;
unsigned long tRojo = 4000;
unsigned long tVerde = 4000;
unsigned long tAmar = 4000;
unsigned long tAzul = 4000;

void setup() {
pinMode(ledT1, OUTPUT);
pinMode(ledT2, OUTPUT);
pinMode(ledOpc1, OUTPUT);
pinMode(ledOpc2, OUTPUT);
}

void loop() {

if ( time + tRojo > millis() ) {
digitalWrite(ledOpc2, LOW);
digitalWrite(ledT1, HIGH);
} else if ( time + tRojo + tVerde > millis() ) {
digitalWrite(ledT1, LOW);
digitalWrite(ledT2, HIGH);
} else if ( time + tRojo + tVerde + tAmar > millis() ) {
digitalWrite(ledT2, LOW);
digitalWrite(ledOpc1, HIGH);
} else if ( time + tRojo + tVerde + tAmar + tAzul > millis() ) {
digitalWrite(ledOpc1, LOW);
digitalWrite(ledOpc2, HIGH);
} else {
time = millis();
}

}

PD: Revisa esto Arduino Playground - Consejos para un futuro :slight_smile:

Un saludo!

Muchas gracias !!!! ahora otra pregunta si yo quiero detectar un pulsador por ejemplo cuando esta encendida el led amarillo como tendría que hacer ?. Muchas gracias de nuevo.

Gracias JRodrigo por tu respuesta, me aclaraste el panorama :smiley: y con respecto a detectar el boton lo solucione con un switch() así que cierro el post.

Saludos....