tra
if(delayMotor) delay(delayMotor);
e
delay(delayMotor);
nel caso particolare dello 0 non vedo molta differenza...cioè mettere o no l'if a questo punto è più una cosa del tipo "quando fra un mese andrò a vedere il programma capisco meglio con l'if o senza l'if".
leggendo l'ultima frase mi sembra che il codice sia abbastanza efficiente anche perchè sono 3 righe di codice ci sarebbe poco da ottimizzare, e poi (rispondendo a quello che hai scritto tra parentesi) durante il delay il micro non fa niente già di suo non è una cosa opzionale (non so se mi sono spiegato)
comunque aspetta anche altri pareri più professionali che non fanno mai male
ps. riguardandolo direi che devi aprire la parentesi graffa dopo if(pin1 == HIGH) e chiuderla dopo digitalWrite(pin2, HIGH); se vuoi che l'if sia effettivo
No ok, il codice è li non controllato solo per avere un riferimento sul delay In pratica per dare un'idea alle persone di quello che vorrei sapere.
Probabilmente si, mancano parentesi ma non le ritenevo importanti. L'importante era che il tema del delay fosse compreso.
Per 'ottimizzare' non intendevo ottimizzare le tre righe, che non sono niente. Ma, ho usato un termine inadatto, sostituire il delay() con qualcosa di più efficiente (se c'è).
se il tuo intento è far "dormire" il micro per un tot tempo prima di riprendere l'esecuzione così su due piedi non mi viene in mente un altro modo, l'unica è che se vuoi essere più preciso usi il delayMicroseconds ma non ne vedo il motivo
spero di esserti stato di aiuto
a parte che il codice così scritto serve a poco (in particolare la digitalWrite), meglio l'if di delay(0) perchè eviti di salvare lo stato sullo stack etc... tutte cose relative ad una chiamata a funzione
lesto:
a parte che il codice così scritto serve a poco (in particolare la digitalWrite), meglio l'if di delay(0) perchè eviti di salvare lo stato sullo stack etc... tutte cose relative ad una chiamata a funzione
mi sta tutto bene lesto
altro modo di scrivere quel delay(delayMotor) in modo non bloccante?
usando la millis, ora non ho tempo di scriverti il codice, se stasera sei ancora in alto mare te lo scrivo, cmq il blinkWithoutDelay è il posto giusto da cui partire
boolean sensor_stop(unsigned int limitTime){
long time= millis();
boolean result = false;
while(!result) {
if (millis() >= time + limitTime) result = true;
}
}
la while rende il codice bloccante, in pratica è come funziona internamente la millis.
certo, al contrario della millis nel while puoi mettere altro codice che vuoi, ma se poi vuoi creare differenti temporizzazioni contemporanee (per esempio ogni 3 sec. fai X, però ogni 2,7 sec fai Y e ogni pressione del tatsto fai Z) impazzisci per niente.
Al posto del while usa il loop stesso, e in pratica anzichè usare la flag a true per uscire dal ciclo e eseguire il tuo codice, usi la flag a true per eseguire il codice