Go Down

Topic: primo programma (Read 247 times) previous topic - next topic

ilprincipiante

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
Code: [Select]

]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

dima91

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ì:
Code: [Select]

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)
}

PaoloP

Non l'ho provato.
Code: [Select]
const int pulsante = 10;
int casi = 0;
const int led = 6;
const int led2 = 5;

void setup()
{
// Serial.begin(9600);
pinMode(pulsante, INPUT);
pinMode(led, OUTPUT);
}

void loop()
{
if(digitalRead(pulsante) == HIGH) casi++;
delay(30);
// Serial.print("pulsante ");
// Serial.println(casi % 3);
// delay(1000);
switch(casi % 3)
{
case 0:
digitalWrite(led, HIGH);
break;
case 1:
digitalWrite(led, LOW);
digitalWrite(led2, HIGH);
break;
case 2:
digitalWrite(led2, LOW);
break;
}
}

ManyGold

Bello io sono ancora un po indietro però sono un mago a scopiazzare  :smiley-yell:
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 //

ciao :)
????

PaoloP

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.

Go Up