ciao a tutti ragazzi,
volevo chiedervi una cosa riguardo al delay in generale.
ho costruito su una breadboard un circuito composto da:
rilevatore di temperatura (lm35dz)
display
sensore di luminosità con buzzer(piu' aumenta la luce piu' aumenta la frequenza del suono)
ora ho un problema, il sensore come giusto che sia deve aggiornare la temperatura ogni secondo mentre il sensore di luminosita' dovrebbe rimanere attivo "sempre" (o almeno magari impostare un timer di spegnimento cosi' imparo un'altra funzione),mi accade quindi che ogni secondo il sensore aggiorna la temperatura e che ogni secondo si accende e spegne il buzzer,
volevo quindi chiedervi come fare ad avere 2 delay diversi (non so come si dice) o almeno poter impostare un timer per il buzzer e un delay per il sensore,quindi devono essere indipendenti.Vi posto il codice e vi ringrazio molto.
ho letto questo argomento,
se ho capito bene, devo usare il sensore come nel sito invece usa il led e il codice mio del buzzer lo devo inserire dove dice
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
giusto o sbagliato?
Tutto quello che vuoi eseguire ogni x tempo lo devi mettere dentro le linee tratteggiate
non dimenticare di dichiarare:
long previousMillis = 0;
const long interval = 1000;
if(millis()- previousMillis > interval)
{
previousMillis = millis();
//------------------------------------------------
// esegui il codice qui dentro ogni tot ms (che sarebbe la variabile long interval = 1000 = 1 secondo)
//-------------------------------------------------
}
Non ho capito cosa intendi per mettere un timer di spegnimento al sensore, i sensori non si spengono mai, al massimo smetti di eseguire i controlli su di esso.
Se ti servono 2 delay differenti o crei un altro ciclo millis() oppure ci metti un contatore dentro a quello che hai.
Usi la base di intervallo 1000, se ti servono 5 secondi conti fino a 5 dentro al delay fatto con il millis() e poi esegui l'altra funzione.
Con un solo ciclo WithoutDelay ne ottieni 2 senza interruzioni del loop che avresti con delay(1000) o (5000), volendo ne puoi annidiare anche altri, ma poi devi stare attento quando azzeri il conta_cicli, poichè se fai male i calcoli comprometti tutti i ritardi
es:
byte n_cicli; //<<<<< questa non va dentro al void loop()
if(millis()- previousMillis > interval)
{
previousMillis = millis();
//------------------------------------------------inizio delay base 1000
n_cicli++; // incremento il contatore ad ogni secondo
// metti qui il codice da eseguire ogni secondo
// -------------------------------------inizio secondo delay
if(n_cicli == 5 || n_cicli == 10) // se i cicli passati sono 5 quindi 5*1000=5 sec o multipli
{
// metti qui il codice da eseguire ogni 5 secondi
}
// -------------------------------------fine secondo delay
// -------------------------------------inizio terzo delay
if(n_cicli == 10) // se i cicli passati sono 10 quindi 10*1000=10 sec
{
// metti qui il codice da eseguire ogni 10 secondi
n_cicli=0; //quando ho finito di eseguire il codice azzero e ricomincio a contare
}
// -------------------------------------fine terzo delay
//-------------------------------------------------fine delay base 1000
}