Pregunta sobre botones y leds!

Hola, estoy haciendo un proyecto con arduino para la universidad y me han surgido un par de dudas con el código ya que no logro que funcione como yo espero. Llevo 4 meses practicando con el programa asi que por ahora se muy poco.

Mi proyecto consiste en un mat de yoga con botones y con luces led. La idea es que según se apretan los botones, se enciendan unas luces. Por el momento estoy tratando solamente con 3 leds (rojo, amarillo y verde) y un solo botón.

Lo que quiero hacer con el código, es que:
-Cuando no se esta apretando el botón, la luz roja este encendida

-Aprieto el botón, la luz amarilla encendida y la roja apagada

-Mantengo el botón apretado durante 10 segundos (la luz amarilla tiene que estar encendida durante esos 10 segundos), al pasar los 10 segundos la luz verde encendida y la amarilla y roja apagada

-La luz verde queda encendida.

El problema es que el programa lo lee como si yo quisiera que se apretara una vez el boton y ahí empieza a contar los 10 segundos. Pero yo necesito que el botón esté apretándose los 10 segundos para que cambie de color. De hecho, si estoy apretando el botón y lo suelto antes de que pasen los 10 segundos, debería quedarse encendida la roja y iniciar nuevamente el contador de 10 segundos cuando vuelva a apretar el boton.

Les mando los dos códigos con los que he tratado:

int ledPin1 = 7; // choose the pin for the LED VERDE
int ledPin2 = 4; // choose the pin for the LED AMARILLO
int ledPin3 = 2; // choose the pin for the LED ROJO
int inPin = 12; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
int i=0; //tiempo

void setup() {
pinMode(ledPin1, OUTPUT); // declare LED as output
pinMode(ledPin2, OUTPUT); // declare LED as output
pinMode(ledPin3, OUTPUT); // declare LED as output
pinMode(inPin, INPUT); // declare pushbutton as input
}

void loop(){
val = digitalRead(inPin); // read input value

//cuando no esta apretandose el boton, la luz roja esta encendida
if (val == LOW) { // si el boton no se esta apretando
digitalWrite(ledPin3, HIGH); // turn LED ON
} else {
digitalWrite(ledPin3, LOW); // turn LED OFF
}

if (val == HIGH) { // check if the input is HIGH (button released)
digitalWrite(ledPin2, HIGH); // turn LED ON
} else {
digitalWrite(ledPin2, LOW); // turn LED OFF
}

if (val == HIGH) { // check if the input is HIGH (button released)
digitalWrite(ledPin1, HIGH); // turn LED ON
} else {
digitalWrite(ledPin1, LOW); // turn LED OFF
}

}


const int led1 = 7; //verde
const int led2 = 4; //amarillo
const int led3 = 2; //rojo
const int pulsador1 = 12;
//const int pulsador2 = 4;
int estadoPulsador1 = 0;
//int estadoPulsador2 = 0;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(pulsador1, INPUT_PULLUP);
//pinMode(pulsador2, INPUT_PULLUP);
}

void loop() {
if (digitalRead(pulsador1) == !HIGH && estadoPulsador1 == 0) {
estadoPulsador1 = 1;
digitalWrite(led3, HIGH);
delay(10000);
digitalWrite(led3, LOW);
delay(100);
digitalWrite(led1, HIGH);
}

if (digitalRead(pulsador1) == !LOW) {
estadoPulsador1 = 0;
digitalWrite(led1, LOW);
delay(50);
}

/* if (digitalRead(pulsador2) == !HIGH && estadoPulsador2 == 0) {
estadoPulsador2 = 1;
digitalWrite(led3, HIGH);
delay(10000);
digitalWrite(led3, LOW);
delay(500);
digitalWrite(led2, HIGH);
}

if (digitalRead(pulsador2) == !LOW) {
estadoPulsador2 = 0;
digitalWrite(led2, LOW);
delay(50);
}*/
}


A la maravillosa persona que me logre ayudar, gracias de antemano!! :kissing:

Bienvenido y como eres universitario solo te ayudaré de este modo: En lugar de delay usa millis(). Información en este blog Playground, muchos tutoriales en Documentación, o usando google.

NOTA: no olvides leer las normas del foro y entonces te darás cuenta que los códigos deben insertarse usando etiquetas.
Esta muy claro cuando leas las normas.