Ciao,
non funziona perché leggi stato fuori del while!!!
int stato= digitalRead(12);
while (stato==HIGH && lettura==codice_pir)
allarme ();
cambia in
while (((stato = digitalRead(12)) == HIGH) && (lettura == codice_pir))
allarme ();