Usa as tags de código...
int switchPin = 2;
int motor = 5;
unsigned char switch_antes = 0;
void setup() {
pinMode(motor, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH);
}
void loop() {
if (ligar_o_motor == TRUE) {
digitalWrite(motor, HIGH); // Vai ligar o motor
} //isto está aqui porque o código do Arduino vai correr imensas vezes até o motor parar. Logo precisas duma condição para o motor iniciar. Não faço ideia qual seja.
if (digitalRead(switchPin) == LOW) {
//switch detectado
switch_antes = 1;
}
if (digitalRead(switchPin) == HIGH && switch_antes == 1) { o motor já avançou o switch, pode parar.
digitalWrite(motor, LOW); // o motor para
switch_antes = 0; //pronto para outro ciclo.
}
Assim garantes que o motor para após o switch e não precisas de temporização.
Se pretenderes uma temporização:
int switchPin = 2;
int motor = 5;
unsigned long tempo = 0;
unsigned char detecta = 0;
void setup() {
pinMode(motor, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH);
}
void loop() {
if (ligar_o_motor == TRUE) {
digitalWrite(motor, HIGH); // Vai ligar o motor
} //isto está aqui porque o código do Arduino vai correr imensas vezes até o motor parar. Logo precisas duma condição para o motor iniciar. Não faço ideia qual seja.
if (digitalRead(switchPin) == LOW) {
//switch detectado
tempo = millis();
detecta = 1;
}
if (millis() - tempo >= DELAY && detecta == 1) {
digitalWrite(motor, LOW); // o motor para
tempo = 0;
detecta = 0;
}
Não testei nem compilei, mas a lógica deve estar correcta.