Buongiorno, sono nuovo del forum ma non nuovissimo di arduino. Sono progettista industriale e lo uso per alcune prototipazioni eventuali con ottimi risultati.
Ho da poco incominciato un progetto che prevede una striscia led (fatta con singoli led, lo so incasinato ma era meglio per l'ardware a cui devo applicare il tutto) che possa venire controllata con potenziometro. Fino a qua tutto semplice (ci sono anche diversi esempi online che mettono a tacere ogni eventuale dubbio).
Il problema è quando cerco di implementare una funzione in più.
Voglio sì che il potenziometro gestisca la striscia led, ma voglio anche che dopo un tempo t=1000 (esempio) in cui il potenziometro non viene toccato, la striscia led si spegne totalmente. Una volta che il potenziometro viene mosso, la striscia led si riaccende conseguentemente.
di seguito il codice iniziale che è semplice e funziona:
const int analogPin = A0; // pin potenziometro
const int ledCount = 10; // numero led
int ledPins[] = {
2, 3, 4, 5, 6, 7, 8, 9, 10, 11
};
void setup() {
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop() {
int sensorReading = analogRead(analogPin); //lettura
int ledLevel = map(sensorReading, 0, 1023, 0, ledCount); //mappatura
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
if (thisLed < ledLevel) {
digitalWrite(ledPins[thisLed], HIGH);
}
else {
digitalWrite(ledPins[thisLed], LOW);
}
}
}
ora lo sketch in cui ho cercato di implementare una gestione del tempo, anche se con scarso risultato:
const int analogPin = A0; // pin potenziometro
const int ledCount = 10; // numero led striscia
int old_poten;
int ledPins[] = {
2, 3, 4, 5, 6, 7, 8, 9, 10, 11
};
int shuttime = 1000;
void setup() {
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
pinMode(ledPins[thisLed], OUTPUT);
}
}
void loop() {
int sensorReading = analogRead(analogPin); //leggo
int ledLevel = map(sensorReading, 0, 1023, 0, ledCount); //mappo
int poten = map(analogRead(analogPin), 0, 1023, 0, 255);
for (int thisLed = 0; thisLed < ledCount; thisLed++) {
if (thisLed < ledLevel) {
digitalWrite(ledPins[thisLed], HIGH);
}
// turn off all pins higher than the ledLevel:
else {
digitalWrite(ledPins[thisLed], LOW);
}
// delay (1000);
//digitalWrite (ledPins, LOW);
}
delay(10);
}
Non capisco esattamente come poter correttamente implementare la cosa, penso che la risposta sia l'uso del millis ma tale argomento è un mio acerrimo nemico, quindi non so proprio come muovermi.
grazie e spero di essere stato chiaro nella spiegazione.