Comment BIEN l'écrire ?

Slt,

Je voudrais commander 3 leds,

Pour une variable "A" ,
Led 1 - si A!=0 ou A!= 29 ou A!=57 alors led1 clignote , si non led 1 éteinte
Led 2 - si A=29 alors led 2 allumée, si non led 2 éteinte
Led 3 - si A=57 alors led 3 allumée, si non led 3 éteinte

Ce que j'ai écrit , a mon avis , c'est pas top :slight_smile:

Ps : 0,29,57 correspondent à des positions, 0 = position 1 , vers 29=position 2 ,vers 57 position =3 et vice et versa

Merci.

Bonjour,

soran:
Ce que j'ai écrit , a mon avis , c'est pas top :slight_smile:

C'est pas grave, mets nous ton code !

Revois ta façon d'écrire ta condition "if" et la façon d'utiliser le "or" :

Et mets ton code entre les balises...

Et mets ton code entre les balises...

C'est a dire ? 8)

Re,

soran:
Et mets ton code entre les balises...

C'est a dire ? 8)

Edite ton message et sélectionne le code écrit et tu appuies sur le bouton # au-dessus des smileys

La compiltation fonctionne mais qu'en pensez vous?

const int led1= 2;
const int led2= 3;
const int led3= 4;

void setup() 

{
  pinMode(2, OUTPUT); // Led éteinte en position 0 et clignotante si  A != 0,29,59
  pinMode(3, OUTPUT); // Volet sortis en position 1 led allumé si A = 29
  pinMode(4, OUTPUT); // Volets sortis en position 2 , led allumée si A = 57
 Serial.begin(115200);   
}

void loop() {
           
if (led1 != 0 || led1 !=29 || led1 != 57);
{
digitalWrite(led1,HIGH); //  allume la led1
delay(100); // pause 
digitalWrite(led1,LOW); //  éteint la led1
delay (100);}
 
if (led2 !=29)

  digitalWrite (led2,LOW);// led reste éteinte

   else
  
       digitalWrite (led2,HIGH);//led reste allumée


if (led3 !=57)

  digitalWrite (led3,LOW);// led reste éteinte

  else
  
       digitalWrite (led3,HIGH);//led reste allumée
       
  }

A la place du if else, utilise plutôt un switch pour tes comparaisons :

http://arduino.cc/en/Reference/SwitchCase

http://fr.wikibooks.org/wiki/Programmation_C%2B%2B_(débutant)/Instructions_if,_if...else_et_switch#Le_switch

soran:
La compiltation fonctionne mais qu'en pensez vous?

const int led1= 2;

const int led2= 3;
const int led3= 4;

void setup()

{
  pinMode(2, OUTPUT); // Led éteinte en position 0 et clignotante si  A != 0,29,59
  pinMode(3, OUTPUT); // Volet sortis en position 1 led allumé si A = 29
  pinMode(4, OUTPUT); // Volets sortis en position 2 , led allumée si A = 57
Serial.begin(115200);   
}

void loop() {
           
if (led1 != 0 || led1 !=29 || led1 != 57);
{
digitalWrite(led1,HIGH); //  allume la led1
delay(100); // pause
digitalWrite(led1,LOW); //  éteint la led1
delay (100);}

if (led2 !=29)

digitalWrite (led2,LOW);// led reste éteinte

else
 
       digitalWrite (led2,HIGH);//led reste allumée

if (led3 !=57)

digitalWrite (led3,LOW);// led reste éteinte

else
 
       digitalWrite (led3,HIGH);//led reste allumée
       
  }

Il y a quand meme un gros problème dans ce bout de code, je n'ai absolument pas compris ce que tu voulais faire mais là tu definis les variables led1 led2 et led3 comme des constantes puis tu essaies de tester leurs valeurs ?
Tu parles aussi de "A" qui n’apparaît nulle part dans ce bout de code, honnetement j'ai pas du tout compris comment tu voulais faire changer tes leds sachant qu'il n'y a aucune entrée, ni via serial ni via un I/O port.

Ce qui me dérange le plus , c'est la façon d'utiliser le "ou" dans le if.

Si led1 est différent de 0 ou différent de 29 ou différent de 57.

C'est toujours allumé, parce que tu es toujours différent sur deux conditions minimum :

tu es à 0 >> différent de 29 et de 57 >> allumage
tu es à 29 >> différent de 0 et de 57 >> allumage
tu es à 57 >> différent de 0 et de 29 >> allumage

D'ou ma suggestion d'employer un switch case.

Après le reste c'est sur que ça aide pas... :grin:

On décortique

if (led1 != 0 || led1 !=29 || led1 != 57);

(je passe sur le point virgule qui rend le test inopérant)

soit :
(led1 != 0 || led1 !=29 || led1 != 57)
l'application du théorème de De Morgan permet de rendre l'interprétation plus facile:
!(led1 == 0 && led1 ==29 && led1 == 57)
On voit que les 3 égalités ne pourront jamais être vrais en même temps et par conséquent le résultats des 3 ET sera toujours faux et la proposition finale sera toujours vrai

Je pense que tu voulais écrire:

if (led1 != 0 && led1 !=29 && led1 != 57){
    ......
}

Comme un con j'ai répondu à son MP, maintenant je sais je ne répondrais plus aux question directement liés à un post, il devrait poster les question réponses ici
Enfin comme souvent, c'est du copier coller mal fait, il a supprimé la partie qui récupérait la valeur venant du serial qu'il veut tester

Viproz:
Comme un con j'ai répondu à son MP, maintenant je sais je ne répondrais plus aux question directement liés à un post, il devrait poster les question réponses ici
Enfin comme souvent, c'est du copier coller mal fait, il a supprimé la partie qui récupérait la valeur venant du serial qu'il veut tester

Effectivement, j'ai déjà rencontré le problème.
Personnellement, je demande à la personne de poster sa question sur le forum. C'est le principe du forum d'exposer ses problèmes pour que tous le monde puisse profiter des réponses et aussi de pouvoir profiter de plusieurs réponses car on est pas parfait et on peut des fois donner des réponses erronées ou moins pertinentes.

soran:
Comme un con j'ai répondu à son MP, maintenant je sais je ne répondrais plus aux question directement liés à un post, il devrait poster les question réponses ici

Je dois avouer mon incompréhension pour cette réponse "énervée" .
Je t'ai effectivement contacter en MP , pensant que serait mieux , mais bon ce n'est pas le cas , désolé.
Tu as eu la gentillesse de me répondre,et je t'ai remercié pour cela. Tu oublies au passage de dire que je comprennais parfaitement que ma demande soit confuse et que tu ne souhaiterai pas t'y attarder.

Aider une personne qui débute demande patiente , indulgence et pédagogie, si ce n'est pas dans tes compétences , alors ne le fait pas et crois moi personne ne t'en voudras.Tu as peut etre eu la possibilité d'apprendre via un cursus scolaire ou professionel , c'est à dire avec la possibilité d'échanger verbalement , poser une question, pouvoir dire ,là je n'ai pas compris...comment tu fais pour ça ? etc.....c'est énorme comme avantage.Moi , il n'en est rien, des tutos par ci par là , faut traduire la plupart (pas simple ) , et les forums c'est mieux que rien mais on en arrive très vite au limite de système. Tu en as la preuve ici.

Signé:
Edouard Molinao .1973 8)

Le comme un con n'est pas à prendre pour toi, il est pour moi, j'ai été con de réponde à un MP vu que quel est l’intérêt de s'adresser à une personne seulement quand ça peut profiter à tout le monde ? En plus comme le dit fdufnews tout le monde fait des erreurs

La seule chose qui me chagrine dans tout ceci, c'est que tu attends qu'on te donne le code fini, par exemple pleins de remarques ont été faites sur ton if qui contient 3 ou, tu n'as pas non plus essayer de corriger ce que je te disais, tester une constante définie en global au début n'a aucun sens, vu que c'est une constante elle ne changera jamais

J'ai posté ici mon analyse finale sur le principal problème en m'adressant aux autre, les problèmes de copier coller sont TRÈS courant et j'ai développé en MP en te disant ce que tu avais supprimé qui permettais de récupérer la valeur qui suit <G

Il n'y a pas de raison pour que tu n'y arrives pas. Il faut y aller progressivement en exploitant les exemples livrés avec l'IDE Arduino et en les modifiants petit à petit.
Ensuite quand tu te lances, il faut écrire des petits morceaux de programmes les tester séparément et les assembler ensuite.
Et surtout essayer de comprendre ce que tu fais.

merci pour tes encouragements, c'est cool .......... 8)