Novato en apuros

hola a tod@s...!!!

Es la primera vez que entro en un forum como este asique espero que siga bien las indicaciones de las normas del foro para que no nos volvamos loco. De antemano pido perdon por si las moscas y agradezco cualquier pequeña ayuda que me podais dar. Dicho esto, al lio:

Hace poco que estoy trasteando en el mundo Arduino y ya estoy en un callejon sin salida.

Estoy con el tipico proyecto del semaforo para coches/peatones y mi intencion es que mediante la pulsacion de un boton se interrumpa la secuencia principal del semaforo coche, para dar paso a la secuencia del semaforo peaton. Hasta ahi todo normal, funciona tal y como lo tengo programado pero no como quiero. Y es que la secuencia del semaforo peaton solo se activa cuando el programa detecta al final de la secuencia del semaforo coche (Led Rojo) si esta HIGH para lo cual el boton tiene que estar pulsado. Pero no es real no? Lo normal seria que dando una pulsacion, la secuencia "principal" se detuviera y se iniciara la "secundaria". Bien pues, ese es el problema que no se me ocurre que comando, orden, o secuencia usar.

// Defino los pines a utilizar

const int LdVerdeSmf = 5;
const int LdAmarilloSmf = 6;
const int LdRojoSmf = 7;
const int BotonSelect = 12;
const int LdVerdePton = 10;
const int LdRojoPton = 11;

// Defino tiempo de encendido

int time = 6000;
int time2 =2500;

// Defino variable que cambia

int EstadoBoton = 0;

void setup()
{
Serial.begin (9600);
pinMode (LdVerdeSmf, OUTPUT);
pinMode (LdAmarilloSmf, OUTPUT);
pinMode (LdRojoSmf, OUTPUT);
pinMode (BotonSelect, INPUT);
pinMode (LdRojoPton, OUTPUT);
pinMode (LdVerdePton, OUTPUT);
}

void loop()
{

EstadoBoton = digitalRead (BotonSelect); // como conseguir que este buscando todo el rato el estadoboton?

if (EstadoBoton == LOW) {
{
digitalWrite(LdRojoPton, HIGH);
}
for (int LdVerdeSmf = 5; LdVerdeSmf < 6; LdVerdeSmf++); { // Comienza la secuencia.
{
digitalWrite(LdVerdeSmf, HIGH);
delay(time);
digitalWrite(LdVerdeSmf, LOW);
}
for (int LdAmarilloSmf = 6; LdAmarilloSmf < 7; LdAmarilloSmf++);
{
digitalWrite(LdAmarilloSmf, HIGH);
delay(time2);
digitalWrite(LdAmarilloSmf, LOW);
}
for (int LdRojoSmf = 7; LdRojoSmf < 8; LdRojoSmf++);
{
digitalWrite(LdRojoSmf, HIGH);
delay(time);
digitalWrite(LdRojoSmf, LOW);
}
}
}

else {
digitalWrite(LdAmarilloSmf, HIGH);
delay (300);
digitalWrite (LdAmarilloSmf, LOW);
delay (300);
digitalWrite(LdAmarilloSmf, HIGH);
delay (300);
digitalWrite (LdAmarilloSmf, LOW);
delay (300);
digitalWrite (LdAmarilloSmf, HIGH);
delay (time2);
digitalWrite (LdAmarilloSmf, LOW);

digitalWrite(LdRojoSmf, HIGH);
delay(time2);
digitalWrite(LdRojoPton, LOW);

digitalWrite (LdVerdePton, HIGH);
delay (time);
digitalWrite(LdVerdePton,LOW);
delay (300);
digitalWrite (LdVerdePton, HIGH);
delay (300);
digitalWrite(LdVerdePton,LOW);
delay (300);
digitalWrite (LdVerdePton, HIGH);
delay (300);
digitalWrite(LdVerdePton,LOW);
delay (300);
digitalWrite(LdRojoSmf, HIGH);
digitalWrite(LdRojoPton, HIGH);
delay (time2);
digitalWrite(LdRojoSmf, LOW);
}
}
Os reporto el programa a ver que os parece y alguien es capaz de aportarme un rayito de luz.

Como ya os he dicho arriba, gracias de antemano. Nos veremos.

El problema está en el uso de delays. Mira el ejemplo "BlinkWithoutDelay" del IDE, para ver cómo quitar esos delays. Por otro lado, para la pulsación del botón, te sugiero usar interrupciones.

Pues no has seguido ninguna de las indicaciones de las normas del foro,el titulo del post debe ser descriptivo de tu problema ,cualquiera que lea "novato en apuros" no va a tener idea de que va el post ,y por lo tanto ,si lo que se dice en el puede interesarle o no....en cuanto al codigo ,tiene que ir con los tags adecuados(repasa las normas del foro si no sabes como).
No entiendo que uses bucles for para ejecutar un grupo de comandos una sola vez,ademas de usar para el for una variable que has definido anteriormente como constante,(compila bien y supongo que funciona) pero no es muy correcto y confunde:

for (int LdVerdeSmf = 5; LdVerdeSmf < 6; LdVerdeSmf++); {  // Comienza la secuencia.

todo lo que hay dentro del for solo se ejecuta una vez ,cuando LdVerdeSmf vale 5 y cumple que es menor que 6,luego al incrementar LdVerdeSmf ya no es menor que 6 y no se cumple la condicion,no tiene sentido un bucle asi.