Però ci sono alcune cose che non mi tornano...
L'uso di millis serviva solo per fare qualcosa per tot tempo, oppure doveva anche servire per non bloccare il resto del programma? Così come lo hai scritto è bloccante: per il tempo 'tempomov' nessun altro ingresso o uscita viene gestito, e allora tanto valeva scrivere una cosa come:
// chiama ripetutamente trasmetti per (circa) 20 secondi
for(x=0; x<1000; x++;){
...trasmetti...
delay(20);
}
Un'altra cosa è la condizione seguente. Se non sbaglio se il pulsante rimane premuto il ciclo viene interrotto subito, per poi ricominciare, per poi interrompersi, per poi ricominciare ecc...
if ((digitalRead(pchiusura) == LOW) or (digitalRead(papertura) == LOW)) {
statomovimento = 0;
delay(500);
Serial.println("blocco");
break;
Una terza è il fatto che la variabile 'statomovimento' mi sembra non serva a niente... O meglio, sarebbe un'ottima idea se servisse a gestire diversi stati di funzionamento con una logica non bloccante, ma qui non è così (fuori dall'if è sempre zero, e dentro viene messa a 1 e riportata subito a zero).
Un'idea di logica non bloccante a sei stati (variabile 'statomovimento' da 0 a 5) in grado di gestire sia apertura che chiusura che pressioni e rilasci può essere la seguente: