Ho un codice che funziona perfettamente e devo implementare una nuova funzione.
Praticamente ho bisogno che quando Arduino parta (venga alimentato) si accenda un LED per 2 minuti e, trascorso questo tempo, si deve spegnere e far lavorare il codice di cui sopra (oppure funzionare contemporaneamente non ho questa necessità) senza tornare mai più all'accensione del famoso LED...questo lo DEVE fare ad ogni avvio (tipo al ritorno di corrente dopo blackout ecc ecc) e mai più.
Ho provato ad inserirvi un delay ma si blocca tutto il codice per quel lasso di tempo e, purtroppo, ciclicamente mi mette in pausa tutto il codice .
Come posso farlo funzionare?
Credo sia una sciocchezza ma non riesco ad arrivarci da solo
l'avevo immaginato che era una sciocchezza. L'ho appena caricato e pare funzioni, grazie infinite "Standardoil", mi hai risolto un rompicapo.
Cmq se volessi avere due "VOID LOOP" separati in modo da far lavorare arduino contemporaneamente su due codici diversi è una cosa fattibile o no?
Ho detto un'eresia?
Cosa dovrei imparare semmai fosse possibile?
Due funzioni NON possono avere lo stesso nome, quindi ... dimentica di poter avere due loop().
Detto questo, non sei su un PC, con un sistema operativo ed una CPU multicore, sei su un microcontrollere quindi la MCU è una e svolge UNA cosa alla volta ...
... a te, da software gestire le due cose separatamente ad esempio con l'aiuto della funzione millis() o di qualche libreria che ti permette di schedulare l'esecuzione di diverse funzioni (ma MAI nello stesso istante).
Beh se vuoi svincolarti dal delay() e poter fare "altre cose" mentre attendi il tempo di spegnimento del LED, puoi fare una cosa del genere:
unsigned long tStart;
#define LED 3 // Pin del LED
#define ON_TIME 2000 // millisecondi di accensione del LED
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
tStart = millis();
}
void loop() {
if ( millis()-tStart >= ON_TIME ) {
digitalWrite(LED, LOW);
}
// Qui fai altre cose...
}
>fabiomusicman: ... e per capire bene che cosa ha fatto esattamente "docdoc", ti condiglio di studiarti attentamente come si usa la funzione millis(), prima QUI, poi QUI ed infine leggi anche QUI e QUI ...
... vedrai che ti sarà tutto più chiaro
gpb01:
Due funzioni NON possono avere lo stesso nome, quindi ... dimentica di poter avere due loop().
Per la cronaca. A me risulta che possono essere piú funzioni con lo stesso nome a patto che hanno un numero di argomenti diverso.
Mi confermi questo?
Comunque é sensato non usare lo stesso nome per funzioni che fanno cosa diverse. Meglio dare 2 nomi parlanti diversi.
Ciao Uwe
fabiomusicman:
con la funzione millis posso far fare ad arduino due o più cose contemporaneamente?
... ovviamente NON realmente in contemporanea (la MCU è una sola), ma puoi fare come sui PC in cui sembra che più programmi girino contemporaneamente, quando in realtà si dividono il tempo di CPU, quindi ... nei limiti di una piccola MCU a 8 bit come quella di Arduino, SI, puoi fare più cose in modo che sembrino svolte contemporaneamente.
si è ovvio che il lavoro lo svolge solo un processore questo mi è chiaro...cerco di capire come funziona ma ho l'impressione che sia molto più complicato da assimilare (in maniera teorica ovvio). Dai link che mi hai postato qualche commento fa se ne parla ma poi praticamente non riesco a capire come scrivere quei programmi mentre la funzione semplice il web ne è pieno e quasi sempre i programmi sono scritti senza MILLIS...
mi sembra di capire che con il MILLIS si porta il programma ad un livello superiore risparmiando anche molto spazio sulla memoria.
é molto complicato?