Al final quedo así el código, con su ayuda
int led_red = 13;
int led_yellow = 12;
int led_green = 11;
int estado;
void setup() {
pinMode(led_red, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
pinMode(2, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
estado = digitalRead(2);
Serial.println(estado);
do{
Verde();
for(int i=0;i<15;i++){
estado = digitalRead(2);
delay(1000);
if(estado==LOW){
delay(2000);
Rojo();
break;
}
}
}while(estado==LOW);
for(int i=0;i<5;i++){
BlinkVerde();
}
Amarillo();
for(int i=0;i<2;i++){
BlinkAmarillo();
}
Rojo();
}
void Verde(){
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, HIGH);
}
void BlinkVerde(){
delay(250);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(500);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, HIGH);
delay(750);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
}
void Amarillo(){
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, HIGH);
digitalWrite(led_green, LOW);
delay(5000);
}
void BlinkAmarillo(){
delay(250);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(500);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, HIGH);
digitalWrite(led_green, LOW);
delay(750);
digitalWrite(led_red, LOW);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
}
void Rojo(){
digitalWrite(led_red, HIGH);
digitalWrite(led_yellow, LOW);
digitalWrite(led_green, LOW);
delay(20500);
}
El semáforo cambia a rojo después de dos segundos de haber presionado el botón, únicamente cuando esta en verde (no tiene mucho propósito que lo haga en amarillo, o en rojo), y la secuencia del semáforo es continua, hasta que se apague el mismo
Dejo el enlace al Tinkercad, por si alguien necesita ver conexiones o cualquier otra cosa
Y de nuevo gracias a las dos personas que me ayudaron.