Buona sera a tutti premetto che sono un principiante
e sto cominciando a muovere i primi passi con arduino quindi quello che vi chiedo sarà sicuramente banale per voi.
Ho seguito una lezione qui ma poi per complicarmi un pò la vita e incominciare a capire qualcosa senza copiare, ho aggiunto un ulteriore led e ho cercato di eliminare delay sostituiendolo con millis per far lampeggiare i led.
Il mio intento sarebbe far lampeggiare il led rosso alla prima pressione, alla seconda accendere il verde e spegnere il rosso e cosi via.
In parte funziona cioè il led rosso lampeggia alla prima pressione, alla seconda pressione il verde sfarfalla velocemente e il rosso si spegne ma ad ogni pressione i led sembra che si comportino in maniera diversa.
allego il codice
#define ledgreen 12
#define ledred 13 // LED collegato al pin digitale 13
#define BUTTON 7 // pin di input dove è collegato il pulsante
int val = 0; // si userà val per conservare lo stato del pin di input
int vecchio_val = 0; // si userà vecchio_val per conservare lo stato del pin di input al passo precedente
int stato = 0; // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso
int ledredstato = 0;
int ledgreenstato = 0;
long tempovecchiored = 0;
long tempovecchiogreen = 0;
long intervallogreen = 1000; //tempo di lampeggio led green
long intervallored = 300; //tempo di lampeggio led rosso
void setup() {
pinMode(ledgreen, OUTPUT); // imposta il pin digitale come output
pinMode(ledred, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON, INPUT); // imposta il pin digitale come input
}
void loop() {
val = digitalRead(BUTTON); // legge il valore dell'input e lo conserva
delay (15);
unsigned long temponuovo = millis();
// controlla se è accaduto qualcosa
if ((val == HIGH) && (vecchio_val == LOW)) {
stato = 1 - stato;
}
vecchio_val = val; // ricordiamo il valore precedente di val
if (stato == 1)
{
if (temponuovo - tempovecchiored > intervallored)
{
tempovecchiored = temponuovo;
if (ledredstato == LOW)
{
ledredstato = HIGH;
}
else {
ledredstato = LOW;
}
digitalWrite(ledred, ledredstato);
}
}
if (stato == 0)
{
if (temponuovo - tempovecchiogreen > intervallogreen)
{
tempovecchiogreen = temponuovo;
}
if (ledgreenstato == LOW)
{
ledgreenstato = HIGH;
}
else
{
ledgreenstato = LOW;
}
digitalWrite(ledgreen, ledgreenstato);
}
}
Forse il codice che ho scritto non ha senso ma ripeto che vorrei imparare a programmare per poi in futuro costruire il mio primo robot.
Qualsiasi consiglio su cosa fare per imparare e capire ben accetto
Grazie