primo programma

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

Non l'ho provato.

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

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

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.