Buongiorno a tutti,
nonostante abbia letto un bel po' di materiale sulla funzione millis() (in questo forum e in altri siti, ancora non riesco a capirne bene il funzionamento. Non ridete di me, ma c'è un concetto fondamentale che forse mi sfugge. Dubito di aver capito anche il semplice esempio di blinkwithoutdelay.
Vorrei sostituire a questo codice la funzione delay con millis, il codice pilota un motore stepper.
int motorPin1 = 1;
int motorPin2 = 2;
int motorPin3 = 3;
int motorPin4 = 4;
int delayTime = 2;
int arresto = 5000;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
for (int i = 0; i < 512; i++){ //un giro 512 step
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
delay(delayTime);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime);}
delay (arresto);
}
Ho fatto vari tentativi per sostituire il delayTime, ma tra le varie spiegazioni c'è qualcosa che interpreto male o proprio non capisco. Questa una mia prova
int motorPin1 = 1;
int motorPin2 = 2;
int motorPin3 = 3;
int motorPin4 = 4;
int pausa = 2;
unsigned long step1Millis = 0;
unsigned long step2Millis = 0;
unsigned long step3Millis = 0;
unsigned long step4Millis = 0;
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop() {
unsigned long istante = millis(); //dichiaro che tipo di variabile è "istante"
step1Millis = millis();
if ((istante - step1Millis) > pausa) {
step1Millis = istante;
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
}
if ((istante - step2Millis) > pausa) {
step2Millis = istante;
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
}
if ((istante - step3Millis) > pausa) {
step3Millis = istante;
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, HIGH);
}
if ((istante - step4Millis) > pausa) {
step4Millis = istante;
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
}
}
Con questo secondo codice, il motore non si muove..
Grazie a chi si interesserà.
Ciao
Pier