Dalla tua descrizione del problema non è che ho capito molto, quindi leggendo il codice vado ad intuito, leggi la chiave e ti parte il relé del pulsante 1 e al pulsante due non ci arriva mai.
Considera che tu l'ingresso lo metti in HIGH nel setup (resistenza di pullup interna) quindi quando arrivi alla riga
digitalRead(puls1) == HIGH
La condizione è soddisfatta ed entra nell'if, poi sta qui
while (digitalRead(puls1) == HIGH){
//mentre il pulsante rimane premuto non eseguire nulla
}
finchè non premi il pulsante che hai collegato a GND (vero???) e ti porta il pin a LOW.
Devi invertire la logica ovvero controllare se il pulsante è LOW e stare li finché resta LOW, quando lo rilasci torna a HIGH
Oltre a questo dopo
digitalWrite(ledGreen, HIGH);
devi mettere un while che ti faccia restare in attesa finché non hai attivato alemeno un uscita altrimenti non ti funzionerà mai poiché verifichi il primo, il secondo, ecc. pulsante nessuno è premuto e vai avanti senza aver fatt nulla.
Come fare? Con una variabile semaforo Es.
bool bAttesa = true;
while(bAttesa)
{
if (digitalRead(puls1) == LOW){
...
bAttesa = false;
}
else if (digitalRead(puls2) == LOW){
...
bAttesa = false;
}...
}