Programación

Buen día, tengo poco tiempo programando en arduino. Actualmente realizo un ejercicio en el cual enciendo un semáforo con un pulsador (push boton) y con el mismo pulsador este se apaga después de mantenerlo presionado dos segundos. Esta secuencia ya la tengo programada y funcionando.

Quisiera agregar una condición en la cual tengo agregado un segundo pulsador (push boton) con el que la idea sea que en cuanto este se presione independientemente de que este en verde o amarillo pase a rojo y se mantenga asi hasta que vuelva a presionar de nuevo este pulsador.

la programación que tengo hasta ahora es la siguiente.

//-------VARIABLES DE LOS BOTONES--------//
int bot_1 = 5;
int bot_2 = 7;
//-------VARIABLES DE LOS BOTONES--------//
int verde = 8;
int amarillo = 9;
int rojo = 10;
//-------VARIABLES DE LOS BOTONES--------//
int valor = 0;
int valor_antiguo = 0;
int estado = 0;
int tiempo = 2000;

void setup(){
//se declaran las variables como salidas o entradas dependiendo.
pinMode(bot_1,INPUT);
pinMode(bot_2,INPUT);

pinMode(verde,OUTPUT);
pinMode(amarillo,OUTPUT);
pinMode(rojo,OUTPUT);
}

void detener(){
estado = 0;
}

void loop(){
valor = digitalRead(bot_1);
if((valor==HIGH)&&(valor_antiguo==LOW)){
estado = 1 - estado;
delay(20);
}
valor_antiguo = valor;
Serial.print(valor);
Serial.print(valor_antiguo);
Serial.println(estado);

if(estado == 0){
digitalWrite(rojo,LOW);
digitalWrite(verde,LOW);
digitalWrite(amarillo,LOW);
}
if(estado == 1){
digitalWrite(rojo,LOW);
digitalWrite(verde,HIGH);
digitalWrite(amarillo,LOW);
delay(tiempo);
digitalWrite(rojo,LOW);
digitalWrite(verde,HIGH);
digitalWrite(amarillo,HIGH);
delay(tiempo/3);
digitalWrite(rojo,HIGH);
digitalWrite(verde,LOW);
digitalWrite(amarillo,LOW);
delay(tiempo);
digitalWrite(rojo,HIGH);
digitalWrite(verde,LOW);
digitalWrite(amarillo,HIGH);
delay(tiempo/3);
}
}

What have you tried? What didn't work. Post your code and we can help you. If you want someone to write the code for you, hire them!

Get rid of the delay and use a millis() based approach.

See e.g. Using millis() for timing. A beginners guide and the blink-without-delay example that comes with the IDE.

bueno por lo visto has cometido tres faltas pero comenzarè por lo habitual, dándote la bienvenida al foro Arduino en Español aunque no sè si llegaràs a este sitio a ver tu respuestas.
1. Lee las normas del foro, te envìo privado con instrucciones que las incluyen ademàs de como editar tu post inicial
2. Nunca uses idioma español en un foro en inglés.
3. Edita tu post usando etiquetas de códigos.