Problema nella programmazione di una relay shield

Salve ragazzi, ho realizzato un programma per scheda relè (quella impilabile su Arduino uno) e ho avuto alcuni problemi.
Secondo il progetto il primo relè deve funzionare da temporizzatore per 3 minuti. Il secondo deve attivarsi se premo un pulsante per 3 secondi e si disattiva se lo premo per altri 3. Poi ho un altro pulsante e se lo premo una volta si attiva il terzo relè, se lo premo di nuovo si attiva il quarto e infine se tengo premuto questo pulsante per 3 secondi si spegne tutto.

Ecco il programma che ho scritto:

#define out1 5
#define out2 6
#define out3 7
#define out4 8
 
#define inp1 9
#define inp2 10
#define inp3 11

long int tempo1=180; //ogni tempo va espresso in secondi
long int tempo2=3;
long int tempo3=3;

long int tem1;
long int tem2;
long int tem3;
long int pul2;
long int pul3;
int bussate=0;

void setup() {
 
  pinMode(out1,OUTPUT);
  pinMode(out2,OUTPUT);
  pinMode(out3,OUTPUT);
  pinMode(out4,OUTPUT);
 
  pinMode(inp1,INPUT);
  pinMode(inp2,INPUT);
  pinMode(inp3,INPUT);
 
  digitalWrite(out1,LOW);
  digitalWrite(out2,LOW);
  digitalWrite(out3,LOW);
  digitalWrite(out4,LOW);
  
 }
 
void loop() {
tem1=tempo1*1000;
tem2=tempo2*1000000;
tem3=tempo3*1000000;

  if ( digitalRead(inp1) == HIGH ) { 
    digitalWrite(out1,HIGH);
    delay(tem1);
    digitalWrite(out1,LOW); }
  else { 
    digitalWrite(out1,LOW); }

  if ( digitalRead(inp2) == HIGH ){ 
     pul2=pulseIn(inp2,HIGH);
     if(pul2>=tem2){
     digitalWrite(out2,HIGH); } }
  else { digitalWrite( out2,LOW ); }

  if ( digitalRead(inp3) == HIGH ) {
    
    bussate=bussate++;
    pul3=pulseIn(inp3,HIGH);
    
    if(bussate=1){
     digitalWrite(out3,HIGH); }
    else if(bussate=2){
     digitalWrite(out4,HIGH); }
     
    if(pul3>=tem3){
      digitalWrite(out3,LOW);
      digitalWrite(out4,LOW); }
 
}
}

i pulsanti sono collegati a inp1 inp2 inp3 mentre le uscite 5,6,7,8 sono già collegate ai relè tramite la scheda.

Purtroppo non funziona nulla e quindi sicuramente ho sbagliato tantissime cose. Conosco poco della programmazione di Arduino quindi se qualcuno potesse aiutarmi gliene sarei riconoscente. Grazie.

Non funziona nulla perchè quei delay bloccano la lettura dei pulsanti, quindi una volta premuto puoi premere quanto vuoi che non sarà ascoltato fino alla fine dei 100.000 millisecondi (100 secondi)
Per sapere inoltre per quanto tempo un pulsante è rimasto premuto, non lo puoi fare col delay(), ti serve la funzione millis().

Ho provato ma sono riuscito ad aggiustare solamente il primo pulsante. Gentilmente qualcuno con buona volontà potrebbe aggiustare il programma ed inviarlo? grazie mille.