Ciao
ho iniziato da poco a usare arduino e ho difficoltà nel capire come è possibile controllare l'accensione di un led o di un motore per un determinato tempo senza che poi l'azione si ripeta all'infinito.
In particolare dovrei accendere un motore Dc da 6 volt per tot secondi e poi farlo spegnere. Ho letto della funzione millis ma anche li dopo poco si ripete e non ho capito bene come scriverla.
Per ora utilizzo questo codice abbastanza semplice per far accendere un motore e spegnere dopo un secondo ma si ripete
// La corrente va dal pin 9 alla base del transistor
int transistorPin = 9;
void setup()
{
// Dichiaro il pin 9 come output
pinMode(transistorPin, OUTPUT);
}
void loop()
{
// Accende il motore per 1 secondo
digitalWrite(transistorPin, HIGH);
delay(1000);
// Spegne il motore per 1 secondo
digitalWrite(transistorPin, LOW);
delay(1000);
}
Volevo inoltre poter controllare l'intensità di corrente e perciò ho trovato questo altro codice con cui se inserisco nel serial monitor un valore da 1 a 100 lo esegue cambiando intensita
int motorPin = 9;
void setup()
{
pinMode(motorPin, OUTPUT);
Serial.begin(9600);
while (! Serial);
Serial.println("Speed 0 to 100");
}
void loop()
{
if (Serial.available())
{
int speed = Serial.parseInt();
if (speed >= 0 && speed <= 100)
{
analogWrite(motorPin, speed);
}
}
}
ma mi chiedevo come possibile integrare questa funzione alla durata di pochi secondi e fare si che io non debba scriverlo nel serial monitor ma nel codice grazie
Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione ...
... poi, essendo questo il tuo primo post, nel rispetto del regolamento, ti chiedo di presentartiQUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il su citato REGOLAMENTO ...
... infine, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (in basso a destra del post, bottone More -> Modify) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra).
Grazie.
Guglielmo
P.S.: Il tuo post è stato spostato nell'opportuna sezione del forum "Italiano"
Per far si che il motore si accenda una sola volta bisogna inserire le istruzioni di accensione e spegnimento nella funzione setup (dopo l'istruzione pinMode(transistorPin, OUTPUT)), anziché dentro la funzione loop.
Tutte le istruzioni contenute nella funzione setup verranno eseguite una sola volta, all'accensione dell'arduino, mentre quelle contenute nella funzione loop si ripeteranno continuamente.
Per quanto riguarda il controllo dell'intensitá della corrente, puoi usare analogWrite() al posto di digitalWrite(transistorPin, HIGH). Cosí il motore si accenderá con la corrente specificata dal secondo parametro (tieni presente che il massimo della corrente si ottiene con un valore uguale a 255).
Se poi ti interessa che il motore acceleri da un minimo a un massimo, potresti inserire la funzione analogWrite dentro un ciclo for, in modo che il secondo parametro venga incrementato automaticamente.