[Résolu] if et else if

bonjour jai un problème j'ai une commande if et 2 commande else if
on peux bien mètre plusieurs else if de suite ??

ok sa a pas tous ecris

désoler du dérangement c'étais juste mes delay qui étais mal placer

Tu peux très bien faire ça

if (i==0) Serial.println (0);
else if (i==1) Serial.println (2);
else if (i==2) Serial.println (14);
else if (i==3) Serial.println (8);
else Serial.println (42):

je peux faire

if (i==0){
Serial.println (0);
delay(250)
}

else if (i==1) {
Serial.println (2);
delay(250)
}

else if (i==2) {
Serial.println (14) ;
delay(250)
}

else if (i==3){
Serial.println (8 ) ;
delay(250)

}

mes pas

if (i==0){
Serial.println (0);
}
delay(250)

else if (i==1) {
Serial.println (2);
}
delay(250)

else if (i==2) {
Serial.println (14);
}
delay(250)

else if (i==3)
{ Serial.println (8 ) ;
}
delay(250)

hello
oui

void setup() {
  Serial.begin(115200);
}

void loop()
{
  for (int f = 0; f < 6; f++)
  {
    if ( f == 1)
    {
      Serial.println("1er if");
    }
    else if ( f == 2)
    {
      Serial.println("2eme if");
    }
    else if ( f == 3)
    {
      Serial.println("3eme if");
    }
    else if ( f == 4)
    {
      Serial.println("4eme if");
    }
    else if ( f == 5)
    {
      Serial.println("5eme if");
    }
  }
delay(1000);
}

edit: oups, pas assez rapide

Bonjour,

lesept:
Tu peux très bien faire ça

if (i==0) Serial.println (0);

else if (i==1) Serial.println (2);
else if (i==2) Serial.println (14);
else if (i==3) Serial.println (8);
else Serial.println (42):

et plus si affinité :smiling_imp:

à ludocraft

voir ici pour mettre le code entre balises

:slight_smile: :slight_smile: :slight_smile:

Bonjour,

Tu peux utiliser if , else if ..., mais dans ce cas un switch serait plus adapté

  switch (i)
  {
    case 0:
      Serial.println (0);
      break;
    case 1:
      Serial.println (2);
      break;
    case 2:
      Serial.println (14) ;
      break;
    // case ...
  }
  delay(250);

re question

mon code( simplifier)

select =6
f=0
i=0
j=0




void loop

      switch(select)

            case 6
                 i =0;
       
				if (i <3 ){
				
					for (f =4; f <6; f++){
					Write_Max7219(f, 189);
					}
					Write_Max7219(2, 102) ;
					Write_Max7219(3, 153) ;
					Write_Max7219(6, 90) ;
					Write_Max7219(7, 36) ;
					Write_Max7219(8, 24) ;
				
				
				delay(250);
				}
				
				
				
				/*else*/ if (i <2 ){
					
					for (f =4; f <6 ; f++){
					 Write_Max7219(f, 219) ;
					} 
					
					Write_Max7219(1, 0) ;
					Write_Max7219(2, 102) ;
					Write_Max7219(3, 255) ;
					Write_Max7219(6, 102) ;
					Write_Max7219(7, 60) ;
					
				delay(250);
				}
				
				
				
				else if (i <1){
				
					for (f =4; f <6; f++){
						Write_Max7219(f, 231); 
					}
					
					Write_Max7219(6, 126);	
				
				
				delay(250);
				}
			// }

quand je prend chaque partie apar sa va quand je prend le dernier et le 2eme sa va mes quand je prend les 3 sa marche plus

Tu es sur que tu as bien un break à la fin de chaque case?

Bon tu as appris à mettre un code entre balises, apprends maintenant à bien le présenter. L'indentation automatique se fait dans l'IDE avec la commande CTRL T. Ça rend le code bien plus lisible.

Peux-tu éditer ton message précédent, ôter les lignes vides qui ne servent à rien et indenter ton code ? Merci

enfin c'est pas tros comprensible mes

if{}

else if {}

else if {}

blabla

si il fait if il fait le reste (else if) si les condition sont remplie ou ou sa passe apres ce qui est en raport aver if
et sa va direct a blabla

kamill:
Tu es sur que tu as bien un break à la fin de chaque case?

oui le code marche bien indépendamment c'est tous ensemble que sa fonctionne plus

lesept:
Bon tu as appris à mettre un code entre balises, apprends maintenant à bien le présenter. L'indentation automatique se fait dans l'IDE avec la commande CTRL T. Ça rend le code bien plus lisible.

Peux-tu éditer ton message précédent, ôter les lignes vides qui ne servent à rien et indenter ton code ? Merci

j'utilise pas IDE arduino je suis avec notpad ++
plus simple pour moi

A ma connaissance, il faut considérer les blocs if - else if - else if - else comme un tout.

Le code teste la première condition, si elle est vraie, les instructions associées sont exécutées et on oublie les autres conditions.

Si non, il teste la seconde, etc.

Donc au final, un seul bloc d'instructions sera exécuté, celui correspondant au premier if dans la liste dont la condition est vraie. On peut donc avoir des exécutions différentes si l'ordre des if est différent et si les conditions ne sont pas mutuellement exclusives.

Mais c'est juste mon avis...

Notepad ++ c'est bien, mais ton code tel qu'il est, est illisible sur un smartphone. Essaye et tu verras...

ok donc cest pour sa que sa marche pas maintent je sais pas comment le modifier pour que sa marche je vais chercher de mon coter si je trouve pas je revien

jai modifier mon code miracle sa marche XD (j’ai juste remplacer les else if par if)

mes voila

 for (j = 0; f < 5; j++) {

          if (i < 4) {

             :)  :) for (f = 4; f < 6; f++) { :)  :) 
              Write_Max7219(f, 189);
            }
            Write_Max7219(2, 102) ;
            Write_Max7219(3, 153) ;
            Write_Max7219(6, 90) ;
            Write_Max7219(7, 36) ;
            Write_Max7219(8, 24) ;

            i++;
            delay(250);
          }



          if (i < 3 ) {

            for (f = 4; f < 6 ; f++) {
              Write_Max7219(f, 219) ;
            }

            Write_Max7219(1, 0) ;
            Write_Max7219(2, 102) ;
            Write_Max7219(3, 255) ;
            Write_Max7219(6, 102) ;
            Write_Max7219(7, 60) ;

            delay(250);
          }



          if (i < 2) {

            for (f = 4; f < 6; f++) {
              Write_Max7219(f, 231);
            }

            Write_Max7219(6, 126);


            delay(250);
          }
          delay(1000);
         :)  :) } :)  :)

quand je l’exécute sens les truc entre :slight_smile: :slight_smile: sa marche quand je mes la commande for (ce qui est entr :slight_smile: :slight_smile: )
sa ne fonctionne plus j’ai impression que sa lit plus quand je le met

je vien de tester en mettent apres for sa

for(f =0;f <9; f++)
Write_Max7219(f, 255)

sa fonctionne donc sa passe bien le for ou il y a les if a l’intérieure

Tu es sûr de ça ?

for (j = 0; f < 5; j++)

pas a 100 / 100 pour quoi jai une erreur ?