Presentación y ayuda.

Muy buenas,
Ante todo presentarme en el foro. Deciros que empiezo en este mundo y que espero no molestar mucho con mis preguntas.

Estoy haciendo algo muy simple, con un RelayShield conectado a mi Arduino UNO: tengo un interruptor (no pulsador) que al conectarlo quiero que encienda durante 5 seg una luz, se apague al cabo de un segundo que encienda una segunda luz durante 5 sg y que luego se apague, pero ya me he pegado contra un muro que no soy capaz de saltarlo.
Os agradeceria vuestra ayuda, tengo el siguiente codigo:

int arriba = 4; // Pin 4 (Luces Arriba)
int derecha = 5; // Pin 5 (Luces Derecha)
int mezcla1 = 8; // Pin 8 (Combinacion de luces 1)

void setup() {
pinMode(arriba, OUTPUT); // Salida rele
pinMode(derecha, OUTPUT); // Salida rele
pinMode(mezcla1, INPUT); // Interrptor

}

void loop() {
if (digitalRead(mezcla1) == HIGH) { // Si activamos mezcla 1

digitalWrite(derecha, HIGH); // Encedemos luces derecha
delay(5000); // Durante 0,5 seg
digitalWrite(derecha, LOW); // Dejamos de encender derecha
delay(1000); // Esperamos 1 seg
digitalWrite(arriba, HIGH); // Encendemos luces arriba
delay(5000); // Durante 0,5 seg
digitalWrite(arriba, LOW); // Dejamos de encender luces arriba
delay(1000); // Esperamos 1 seg
}

}

El problema que tengo es que siempre se repite (ya que es un interrptor) y solo quiero que se ejecute una sola vez.
Me podeis echar un cable, he buscado información, pero por lo visto soy incapaz de encontrarla.

Gracias y un saludo!

hola.

Lo ideal seria que cambiaras el interruptor por un pulsador y asunto resuelto pero bueno, para que un programa se ejecute una sola vez puedes añadir al final de la secuencia a ejecutar un bucle infinito del que el programa no salga hasta resetear la arduino, algo asi como

while (1 == 1) { }

O bien puedes condicionar el funcionamiento con una variable de programa haciendo algo como esto...

declaras al principio
int contador;

y en el bucle añades

void loop()
{
if (digitalRead(mezcla1) == HIGH)
{ // Si activamos mezcla 1

** if (contador == 0)**
** {**
digitalWrite(derecha, HIGH); // Encedemos luces derecha
delay(5000); // Durante 0,5 seg
digitalWrite(derecha, LOW); // Dejamos de encender derecha
delay(1000); // Esperamos 1 seg
digitalWrite(arriba, HIGH); // Encendemos luces arriba
delay(5000); // Durante 0,5 seg
digitalWrite(arriba, LOW); // Dejamos de encender luces arriba
delay(1000); // Esperamos 1 seg
** contador = 1;**
** }**
}
}

soluciones hay varias...

Por cierto delay(5000); son 5 segundos, en los comentarios tienes puesto 0,5 segundos.

Saludos.
furri.

Gracias por la ayuda, furri. Probare a poner la condición a ver que tal, porque no puedo poner un pulsador.
Si, tienes razón, hay 0,5, pero son 5 seg.

Un saludo.