stato_attuale = digitalRead(Pin2);
... sperando che su pin2 ci sia una rete RC per fare il debouncing ... altrimenti la lettura del pin si complica perché deve farlo da software ![]()
Guglielmo
Era per rispondere a questa domanda.
Ovvio che tutto la questione è un pelo più complessa di una semplice assegnazione.
Buongiorno a tutti
Ieri in tarda serata dopo aver rinfrescato un po’ il mio C , sono riuscito ad ottenere un piccolo risultato , e sembra funzionare, in serata metterò il codice .
Ovviamente non ho ancora finito, adesso che sono riuscito a creare il codice per un ingresso ed un uscita devo creare un codice per due ingressi e due uscite separate , perché ovviamente la tapparella sale ed è un comando ma deve anche scendere ed è un altro comando separato dal primo .
La storia continua...........
Buona giornata a tutti
Buongiorno a tutti
Scusate il ritardo ma è stata una settimana intensa ed ho avuto poco tempo libero da dedicare al mio progetto , il risultato è questo
const byte button=2; // assegna il pin 2 al pulsante
const byte LED=13; // assegna il pin 13 al led
unsigned long Interval = 2000; // attesa in secondi
unsigned long prevmillis;
int buttonState=0;
void setup() {
pinMode(button, INPUT); // assegna il pin come ingresso
pinMode(LED, OUTPUT); // assegna il pin come uscita
}
void loop()
{
buttonState = digitalRead (button);
if (buttonState == LOW)
{
digitalWrite (LED, LOW);
prevmillis = millis();
}
else if (millis() - prevmillis <= Interval)
{
digitalWrite (LED, HIGH);
}
else
digitalWrite (LED, LOW);
} or paste code here
Il tutto funziona correttamente , se premo il pulsante e lo mantengo premuto il led si accende e rimane accesso per 2 secondi e poi si spegne anche se il pulsante rimane premuto nel tempo .
Ora arriva il mio secondo dilemma o meglio problema , come usare un altro ingresso e un altra uscita , che quando premo il pulsante 1 accende il led 1 , quando premo il pulsante 2 accende il led 2 , e quando il led 1 è accesso e premo il pulsante 2 il led 1 si deve spegnere e viceversa?
const byte button1 = 2; // assegna il pin 2 al pulsante
const byte button2 = 3;
const byte LED1 = 13; // assegna il pin 13 al led
const byte LED2 = 12;
unsigned long Interval = 2000; // attesa in secondi
unsigned long prevmillis;
unsigned long Interval2 = 2000; // attesa in secondi
unsigned long prevmillis2;
int buttonState1 = 0;
int buttonState2 = 0;
void setup() {
pinMode(button1, INPUT); // assegna il pin come ingresso
pinMode(button2, INPUT);
pinMode(LED1, OUTPUT); // assegna il pin come uscita
pinMode(LED2, OUTPUT);
}
void loop()
{
buttonState1 = digitalRead (button1);
if (buttonState1 == LOW)
{
digitalWrite (LED1, LOW);
prevmillis = millis();
}
else if (millis() - prevmillis <= Interval)
{
digitalWrite (LED1, HIGH);
}
else
digitalWrite (LED1, LOW);
delay(100);
{
buttonState2 = digitalRead (button2);
if (buttonState2 == LOW)
{
digitalWrite (LED2, LOW);
prevmillis2 = millis();
}
else if (millis() - prevmillis2 <= Interval2)
{
digitalWrite (LED2, HIGH);
}
else
digitalWrite (LED2, LOW);
delay (100);
}
}
Questa è la soluzione che ho trovato , funziona probabilmente non sarà esteticamente bella ma è funzionale per le mie esigenze
ciao.
ho preso il tuo codice e ho l'ho formattato col ctrl+t dell'ide.
vedi se noti delle differenze
const byte button1 = 2; // assegna il pin 2 al pulsante
const byte button2 = 3;
const byte LED1 = 13; // assegna il pin 13 al led
const byte LED2 = 12;
unsigned long Interval = 2000; // attesa in secondi
unsigned long prevmillis;
unsigned long Interval2 = 2000; // attesa in secondi
unsigned long prevmillis2;
int buttonState1 = 0;
int buttonState2 = 0;
void setup() {
pinMode(button1, INPUT); // assegna il pin come ingresso
pinMode(button2, INPUT);
pinMode(LED1, OUTPUT); // assegna il pin come uscita
pinMode(LED2, OUTPUT);
}
void loop()
{
buttonState1 = digitalRead (button1);
if (buttonState1 == LOW)
{
digitalWrite (LED1, LOW);
prevmillis = millis();
}
else if (millis() - prevmillis <= Interval)
{
digitalWrite (LED1, HIGH);
}
else
digitalWrite (LED1, LOW);
delay(100);
{
buttonState2 = digitalRead (button2);
if (buttonState2 == LOW)
{
digitalWrite (LED2, LOW);
prevmillis2 = millis();
}
else if (millis() - prevmillis2 <= Interval2)
{
digitalWrite (LED2, HIGH);
}
else
digitalWrite (LED2, LOW);
delay (100);
}
}
Perché visto come l'hai indentato tu ho il sospetto che alcune istruzioni non siano dove ti aspetti.
ciao Fratt
Non vedo differenze dal tuo codice al mio , ma potrei anche aver capito male la tua domanda .
Sto testando il circuito da questa mattina e funziona tutto correttamente , tu hai visto qualche errore nel programma ?
il codice non l'ho toccato, ho cambiato solo l'indentazione.
nella tua versione il delay è indentato come il digitalWrite che lo precede, però mancando le graffe il delay risulta fuori dall'else.
se è voluto allora è ok. se invece ti serve dentro l'else devi mettere le graffe.
tutto qua.
Ho notato che a volte quando rilasciavo un pulsante il led si accendeva per pochi istanti meno di un secondo , mettendo il delay li non ho più questo difetto / errore
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.