Legal!
Essa linha é inútil.
int start=digitalRead(botao);
Se quiser zerar o "timer" após executar uma vez a função alarma(), adicione um "break" no "while".
if((millis() - millis_antes) > 3000){
alarma();
break;
}
}
Se o número for menor que 256 é melhor usar "const byte" neste caso:
int Led_red = 5;
int Led_green = 3;
int botao = 4;
Abraço.