ciao a tutti. ho scritto questo codice ma vorrei risolvere un problema. in pratica tenendo premuto un sensore si accende un led, allo stesso tempo parte un contatore. Quando il contatore arriva a 10 il led si dovrebbe spegnere, anche se il sensore continua ad essere premuto, e rimanere spento. Come mai questo non succede? Ho pensato al fatto che dovrebbe esserci un comando che blocchi il contatore a 10 e per questo ho inserito if (t > tMax) {t = tMax}, il contatore si ferma a tMax ma il led non si spegne, o per lo meno si spegne giusto per il tempo del delay che ho inserito per distanziare le misurazioni del sensore
qualche consiglio/aiuto?
grazie in anticipo
int led = 6;
int t = 0;
int tMax = 10;
void setup() {
pinMode(2, INPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(2) == HIGH){
t++;
Serial.println(t);
digitalWrite(led, HIGH);
delay(500);
}
if (t > tMax) {t = tMax;}
if (digitalRead(2) == HIGH && t == 10){
digitalWrite(led, LOW);
delay(500);
}
if (digitalRead(2) == LOW){
Serial.println("Sensor untuched");
digitalWrite(led, LOW);
delay(500);
}
}
Ciao, penso che nel primo e nell'ultimo if dovresti controllare come sta questo t, vedi se ti si addice meglio:
int led = 6;
int t = 0;
void setup() {
pinMode(2, INPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(2) == HIGH) {
Serial.println("premuto il pulsante ");
while (digitalRead(2) == HIGH) { //correre fino al rilascio del pulsante
t++;
Serial.println(t);
if (t <= 10)
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
delay(500);
}
}
digitalWrite(led, LOW);
Serial.println("rilasciato il pulsante ");
//mettere t = 0 quando applicabile
}
ottima soluzione, arrivato a 10 il led si spegne e anche riattivando il sensore rimane spento. magari aggiungerò per conto mio un pulsante di reset.
grazie!!
ok l'ho adattato un pochino, il risultato è questo:
int led = 6;
int t = 0;
void setup() {
pinMode(2, INPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(2) == HIGH) {
Serial.println("premuto il pulsante ");
digitalWrite(led, HIGH);
while (digitalRead(2) == HIGH) { //correre fino al rilascio del pulsante
t++;
delay(500);
Serial.println(t);
if (t > 10){
digitalWrite(led, LOW);
}
}
}
else {
digitalWrite(led, LOW);
}
delay(500);
digitalWrite(led, LOW);
Serial.println("rilasciato il pulsante ");
//mettere t = 0 quando applicabile
}
funziona anche questa soluzione, ma mi fa un piccolo errore: quando sono passati i 10 conteggi e si riattiva il sensore, per una frazione di secondo si riattiva anche il led. Credo comunque di riuscire a risolverlo. Grazie mille per il vostro tempo!!