Salve a tutti, avrei bisogno di capire cosa non va nello sketch che ho fatto. In pratica ho fatto uno script che abilita un'uscita per un tot di millisecondi usando la funzione millis e fin qui spero mi sia spiegato bene; se lo script lo inserisco direttamente nel void loop così come è scritto, funziona correttamente ma se vado ad inserirlo in una funzione noto che l'uscita è sempre alta. Posto gli script, il primo è quello funzionante e se volete provarlo non occorre collegare niente all'arduino in quanto uso per comodità il pin digitale 13:
const int ledPin = 13; // led sul pin 13
long millisPrec = 0;
int timeSet = 1500; // durata uscita high
int var = 0; // variabile per far partire il timer
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // setto il pin come uscita
var = 1; // all'inizio la variabile è 1 e fa partire il timer nel loop
delay(2000); // aspetto 2 secondi
}
void loop()
{
if (var == 1) // se la variabile è 1
{
millisPrec = millis();
while(millis() <= millisPrec + timeSet) // finchè millis non raggiunge
{ // il tempo impostato
digitalWrite(ledPin, HIGH); // l'uscita è alta
}
digitalWrite(ledPin, LOW); // al termine l'uscita torna bassa
var = 0; // e la variabile di controllo va a 0
} // in modo che il timer non riparte
}
Nello script sottostante invece ho messo il codice in una funzione per comodità ma il led del pin 13 rimane sempre acceso:
const int ledPin = 13; // led sul pin 13
long millisPrec = 0;
int timeSet = 1500; // durata uscita high
int var = 0; // variabile per far partire il timer
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
var = 1;
delay(2000);
}
void loop()
{
timer(var, timeSet, ledPin);
}
void timer(int varControllo, int durata, int pin)
{
if (varControllo == 1)
{
millisPrec = millis();
while(millis() <= millisPrec + durata)
{
digitalWrite(pin, HIGH);
}
digitalWrite(pin, LOW);
varControllo = 0;
}
}
Non è un problema enorme in quanto potrei omettere la funzione e lasciare tutto come nel primo sketch ma vorrei capire perchè si comporta in questo modo almeno in futuro so come comportarmi.
Saluti a tutti.