problemas al usar estructura for.

buenas!! soy nuevo por aquí. un placer.
Tengo casi todo terminado pero me faltaría que al encenderlo, fuera yo quién lo active con el pulsador pero no es así. se me enciende solo los led. el orden y el bucle lo respeta. Es solo eso, no se como hacer para iniciar yo el bucle.
Perdonad si hago algo mal o incumplo algún tipo de norma.
Esto es lo que he hecho yo.

bool seHaPulsadoMarcha = false;
void setup()
{
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, INPUT_PULLUP);

for(int i=0; i<2; i++){
encenderLed(3, 5000); //Enciende el led rojo
encenderLed(5, 5000); //Enciende el led verde
intermitenteLed(4, 5000, 250); //Intermitente en amarillo
}

}

void loop()
{

if(digitalRead(6)==LOW | seHaPulsadoMarcha==true)
{
seHaPulsadoMarcha = true;

encenderLed(3, 5000); //Enciende el led rojo
encenderLed(5, 5000); //Enciende el led verde
intermitenteLed(4, 5000, 250); //Intermitente en amarillo

}
}

void encenderLed(int pin, int tiempo)
{

digitalWrite(pin, HIGH);
delay(tiempo); // Wait for 5000 milliseconds(s)
digitalWrite(pin, LOW);

}

void intermitenteLed(int pin, int tiempo, int cadencia)
{

long tiempoTranscurrido = millis();
while (millis()-tiempoTranscurrido < tiempo)
{
digitalWrite(pin, HIGH);
delay (cadencia);
digitalWrite(pin, LOW);
delay (cadencia);

}

}

Buenos días.

Lo más probable es que para hacer el or, utilizas sólo un pipe (para comparar bits) en lugar de dos, que es para expresiones booleanas. Por eso no se queja el compilador.

Está claro que entra en el bucle desde el principio. Si a modo de depuración hubieras enviado al puerto serie el valor de seHaPulsadoMarcha (falso) y digitalRead(6) (será alto por las resistencias de pullup), la pregunta sería por qué se ejecuta si no se cumple ninguna de las dos condiciones.

No te preocupes, se aprende mucho de los errores... y te lo digo por experiencia.

Consejo de un novato a otro: si en un proyecto más grande no te quieres volver loco, busca información sobre el uso de delay(). Lo usamos mucho al iniciarnos, pero cuando comprendas cómo funciona, seguro que dejarás de usarlo.

Y si... alguna que otra norma te has saltado... jejeje.
Las puedes leer aquí. Normas del FORO EN ESPAÑOL - Software - Arduino Forum

El código se lee mejor así:

bool seHaPulsadoMarcha = false;

void setup()
{
	pinMode(3, OUTPUT);
	pinMode(5, OUTPUT);
	pinMode(6, INPUT_PULLUP);

	for (int i = 0; i < 2; i++) {
		encenderLed(3, 5000); //Enciende el led rojo
		encenderLed(5, 5000); //Enciende el led verde
		intermitenteLed(4, 5000, 250); //Intermitente en amarillo
	}
}

Un saludo desde Murcia.