ciao a tutti,
è da circa un mesetto che mi sto divertendo a programmare Arduino !
ho voluto creare il mio primo programma con le conoscenze che ho e... che dire ... sono soddisfatto del risultato ottenuto .
lo scopo del programma è quello di accendere due led con lo stesso pulsante;
il primo led si accende quando premo una sola volta il pulsante, mentre quando lo premo la seconda volta spegne il primo led e accende il secondo.
questo è il codice scritto da me
]int statopulsante=0;
int pulsante =10;
int casi=0;
int led=6;
int led2=5;
void setup()
{
Serial.begin(9600);
pinMode(pulsante,INPUT);
pinMode(led,OUTPUT);
}
void loop()
{ statopulsante=digitalRead(pulsante);
if(( statopulsante==HIGH) and(casi==0))
{
Serial.println("pulsante 1");
Serial.println(casi);
//digitalWrite(led,HIGH);
delay(1000);
casi=1;
}
else if((statopulsante==HIGH)and(casi==1))
{
Serial.println("pulsante premuto 2");
Serial.println(casi);
//digitalWrite(led2,HIGH);
delay(1000);
casi=2;
}
else if ((statopulsante==HIGH)and(casi==2))
{
casi=3;
}
switch(casi)
{
case 1:
digitalWrite(led,HIGH);
//delay(1000);
Serial.println("ok");
break;
case 2:
digitalWrite(led,LOW);
delay(100);
digitalWrite(led2,255);
break;
case 3:
digitalWrite(led2,LOW);
casi=0;
break;
}
}
il programma funziona correttamente pero' mi sembra un po' troppo lungo e "complesso" .
mi sapreste dire cosa posso semplificare, che funzioni usare etc.... ?
grazie mille
ciao!!
non lo so se è il modo più giusto come ti dico io tra poco perché anche io è da poco che fruzzico con arduino, però io il programma l'avrei strutturato così:
const int led1= 6;
const int led2= 5;
const int button= 10;
void setup ()
{
Serial.begin (9600);
pinMode( led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (button, INPUT);
}
void loop ()
{
/*
Qui sei nello stato iniziale 0 (tutti e due i led spenti)
Cicli finché il bottone non piene premuto
*/
while (digitalRead (button)==0)
{
digitalWrite (led1, LOW);
digitalWrite (led2, LOW);
}
// Sei uscito dal ciclo cioè viene premuto il pulsante. Transiti nello stato 1 (un led acceso)
while (digitalRead (button) == 0)
{
digitalWrite (led1, HIGH);
digitalWrite (led2, LOW);
}
// Sei uscito dal ciclo perché viene premuto il pulsante. Transiti nello stato 2 (l'altro led acceso)
while (digitalRead (button)==0)
{
digitalWrite (led1, LOW);
digitalWrite (led2, HIGH);
}
// Sei uscito dal ciclo perché viene premuto il pulsante, Ritorni all'inizio dl loop (stato 0)
}
Bello io sono ancora un po indietro però sono un mago a scopiazzare
non mi è sempre tutto chiaro ancora, volevo sapere perché hai messo il serial.begin (9600);
Solo PaoloP lo ha messo ma poi lo ha barrato //
Io l'ho commentato perché ho supposto che inizialmente fosse utilizzato come "debug", ovvero per vedere se il programma fa quello che deve fare.
Poi si commenta perché ai fini del funzionamento è inutile.
Diverso sarebbe se il programma deve spedire il numero del caso al PC che lo utilizzerebbe per ulteriori elaborazioni. In quel cosa è necessario.