Salve ragazzi, volevo chiedervi un consiglio su del codice che sto scrivendo e che è già funzionante.
Il codice, tramite libreria AccelStepper, fa compiere un giro in senso orario al motore e poi un giro di ritorno in posizione.
Durante l'andata vorrei tenere conto della posizione in cui si verificano certi eventi ed ho risolto nella seguente maniera:
stepper.moveTo(200);
for (int i=1;stepper.currentPosition() != 200;i++){
stepper.run();
ctrl01[0]=ctrl01[1];
ctrl01[1]=digitalRead(LEVELSENSOR01);
ctrl02[0]=ctrl02[1];
ctrl02[1]=digitalRead(LEVELSENSOR02);
if ((ctrl01[1]==HIGH) && (ctrl01[0]==LOW)){ //livello attivazione olio
step01[0]=stepper.currentPosition();
}
if ((ctrl01[1]==LOW) && (ctrl01[0]==HIGH)){ //livello spegnimento
step01[1]=stepper.currentPosition();
}
if ((ctrl02[1]==HIGH) && (ctrl02[0]==LOW)){ //livello attivazione acqua
step02[0]=stepper.currentPosition();
}
if ((ctrl02[1]==LOW) && (ctrl02[0]==HIGH)){ //livello spegnimento
step02[1]=stepper.currentPosition();
}
Serial.println ("step");
Serial.println (stepper.currentPosition());
}
stepper.stop();
delay (1500);
stepper.runToPosition();
// Now stopped after quickstop
// Now go backwards
stepper.moveTo(0);
while (stepper.currentPosition() != 0) // Full speed back to 0
stepper.run();
stepper.stop(); // Stop as fast as possible: sets new target
stepper.runToPosition();
// Now stopped after quickstop}
I vari if che vedete sono gli eventi interessati (non vi ho messo tutto il codice per comodità di lettura).
Dite che va bene già così (ricordo che mi funziona) o che potrei migliorare il tutto in maniera più precisa ed efficiente?
E' molto importante che il motore faccia sempre lo stesso numero di passi all'andata ed al ritorno.
Grazie in anticipo a chi mi vorrà dare un consiglio!