Buon pomeriggio a tutti,
mi servirebbe qualche dritta per la scrittura di uno sketch. Componenti: potenziometro, led e una resistenza da 330 ohm. La logica del programma dovrebbe essere la seguente:
fissato un valore di resistenza di riferimento per il potenziometro, quando ruoto il potenziometro ed il valore di resistenza scende al di sotto di quello di riferimento, deve accendersi il led,
quando però ruoto nuovamente il potenziometro, non si deve spegnere subito il led, ma si deve attivare un timer che lo farà spegnere dopo un certo tempo. Ciò, non utilizzando la funzione "delay", in quanto rimarrebbe il codice fermo per troppo tempo.
In condizioni di normale funzionamento però, con il valore di resistenza superiore al valore di soglia, il led deve rimanere spento.
Ringrazio in anticipo.
Per cortesia, come da regolamento, per prima cosa presentati nell'apposita discussione spiegando bene quali esperienze hai in elettronica e programmazione, affinché possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Poi leggi attentamente tutto il [regolamento](http://D:\My Documents\p439994\Documents{https:\forum.arduino.cc\index.php?topic=149082.0}), in particolare leggi bene i punti 15.3 e 17.1, e impegnati a rispettarlo.
Ti ricordo che, purtroppo, fino a quando non avrai fatto la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
Ciao! Il tuo problema ha tre situazioni diverse, questo mi fa pensare che si risolverebbe bene con una macchina a stati finiti avente tre stati. Dipende a che punto sei con la programmazione arduino, perché il programma prevede una macchina a stati finiti e il conteggio di un intervallo di tempo tramite funzione millis(). Sono nozioni un po superiori alla programmazione base
Per creare una macchina a stati finiti puoi usare una variabile globale, dichiarata fuori da ogni funzione, e uno swicth().
Ti faccio un abbozzo di codice che non è funzionante ma deve essere completato. Cosi hai un idea di come scrivere il programma. Probabile che serve qualche modifica per ottenere il tuo scopo, ma hai l'esempio di macchina a stati e uso di millis().
byte stato=0; // Variabile che indica lo stato, la situazione attuale
unsigned long tempo=0; // Variabile per il conteggio del tempo
void loop(){
switch(stato){
case 0: // situazione in cui il led deve stare spento
if(analogRead(A0)>livelloMinimo){
tempo=millis();// Prendo il tempo per conteggiare un intervallo di tempo
stato=1; //passo allo stato sucessivo
}
break;
case 1:
if(milllis()-tempo>=2000){// se sono passati 2 secondi
digitalWrite(led,LOW);//spengo il led
stato=2; //passo allo stato 2
}
break;
case 2:
if(analogRead(A0)<=livelloMinimo){// se sono a livello minimo
digitalWrite(led, HIGH); //accendo il led
stato=0; //passo allo stato 0
}
break;
}// end switch
}// end loop()