Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème programme arduino + simulation proteus

5 février 2015 à 13:53:33

Bonjour, je poste ce message car je dois participer à une tâche afin de réaliser un projet pour le bac. Je dois réaliser une interface graphique qui permettra de contrôler si le projet fonctionne correctement. N'étant pas très fort en programmation, mon professeur m'a demandé de réaliser via ISIS (logiciel de simulation de circuits électriques ) une simulation comprenant une Carte arduino, 4 boutons poussoirs et 4 LEDS. Le but est que lorsque l'on clique sur l'un des bouton (celui-ci étant connecté à la carte arduino) cela allumera la LED correspondante ( celle-ci étant connecté également à la carte arduino ). J'ai réussi à créer le schéma et à relier 2 boutons et 2 LEDs mais lorsque je rajoute une 3e LED et un 3e bouton et que je modifie mon programme, la 3ieme LED ne s'allume pas et je ne trouve pas l'erreur dans mon programme. Si quelqu'un pourrait au moins me donner une piste cela m'aiderais beaucoup. Merci d'avance pour vos réponses.

Voici mon programme arduino:

//la LED à la broche x

const int led = 13;

const int led2 = 12;

const int led3 = 9;

//le bouton a la broche x

const int bouton = 2;

const int bouton2= 4;

const int bouton3= 3;

//Variable etat

int etatBouton;

int etatBouton2;

int etatBouton3;

void setup()

 {

    pinMode(led, OUTPUT); //la led est une sortie

    pinMode(led2,OUTPUT);

    pinMode(led3,OUTPUT);

    pinMode(bouton,INPUT);// le bouton est une entrée

    pinMode(bouton2,INPUT);

    pinMode(bouton3,INPUT);

    etatBouton = HIGH; 

    etatBouton2 = HIGH;

    etatBouton3 = HIGH;

 }

void loop() 

 {

  etatBouton = digitalRead(bouton); //lit l'état a la broche 2

 if(etatBouton == HIGH) //test si le bouton a un niveau logique HAUT

    {

        digitalWrite(led,LOW); //la LED reste éteinte

    }

    else  //test si le bouton a un niveau logique différent de HAUT (donc BAS)

    {

        digitalWrite(led,HIGH); //le bouton est appuyé, la LED est allumée

    }

  etatBouton2 = digitalRead(bouton2);

   if(etatBouton2 == HIGH)  

   {

       digitalWrite(led2,LOW);

    }

    else

    {

       digitalWrite(led2,HIGH);

    } 

  etatBouton3 = digitalRead(bouton3);

   if(etatBouton3 == HIGH)  

    {

       digitalWrite(led3,LOW);

    }

    else

    {

       digitalWrite(led3,HIGH);

    } 

}

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 14:59:21

Salut,

c'est marrant d'utiliser Arduino au Lycée (il n'y avait pas de ça de mon temps, ISIS et cette daube de FlowCode ...) !

Petit conseil pour ce genre de truque, utilise les affectactions conditionnelles:

if(a==truc)
{
 b=a;
}else
{
 b=c;
}

//equivaut a

b= (a==truc ? a : b);
// (condition ? valeur si vrai : valeur si faux) 

Ce qui te ferait un truc du genre (c'est plus concis):

void loop()
{
 int state;
 
 state = (digitalRead(bouton) == HIGH)  ? LOW : HIGH;
 digitalWrite(led,state);

 state = (digitalRead(bouton2) == HIGH)  ? LOW : HIGH;
 digitalWrite(led2,state);

 state = (digitalRead(bouton3) == HIGH)  ? LOW : HIGH;
 digitalWrite(led3,state);
}

Sinon pour répondre a ta question, le code me parait bon, tu peux nous montrer ton schéma de cablage ?

-
Edité par ptitcois 5 février 2015 à 15:00:28

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 16:30:34

Merci pour ta réponse, mais il faut alors que je déclare une nouvelle variable se nommant "state" alors ? Et a quoi sert le fait de mettre "? LOW : HIGH" à la fin du code ?

Pour ce qui est du schéma j'aimerais vous le montrer mais les images ne se télécharge pas chez moi je ne sais pas pourquoi :(.

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 16:43:15

Ta led D3 est a l'envers ! Ca arrive

-
Edité par ptitcois 5 février 2015 à 16:43:45

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 16:59:55

Quel nouille je suis ^^ merci pticois je ne m'en était même pas aperçu :D
  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 17:15:28

Maintenant que j'ai réussi cela j'ai ajouté un 4ieme bouton qui lui devra allumer les LEDS 1 (led) et LED 2 (led2) mais lorsque je rajoute une partie du programme, les LEDS clignotent et ne reste pas allumées. Je ne sais donc pas quel code utilisée pour pouvoir faire allumer les deux en même temps sans qu'il y ait de problème =/.

Voici la suite de mon code:

etatBouton4 = digitalRead(bouton4);

  if(etatBouton4 == HIGH) 

    {   

       digitalWrite(led,LOW);

       digitalWrite(led2,LOW);

    }

    else 

    {

       digitalWrite(led,HIGH); 

       digitalWrite(led2,HIGH);

    }

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 17:20:57

T'a enlevé le code précédant qui allumaient déja (ou non) les led et led2 ?
  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 17:34:07

Non je l'ai laisser tel qu'il était avant car je n'ai pas trop bien compris le bout de programme que tu m'as donner donc du coup pour l'instant j'ai souhaiter le laisser tel quel. Mais a part le bout de programme pour le bouton 4, le reste fonctionne.
  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 18:21:04

C'est normal que ça clignote,

au début tu dis:

Si le bouton 1 est appuyé alors allumer la led 1, sinon éteindre la led1

et apres:

si le bouton4 est appuyé alors allumer la led1, sinon eteindre la led1

La led s'éteint juste apres avoir appuyé sur le bouton 1  sans appuyer sur le bouton 4, et inversement

  • Partager sur Facebook
  • Partager sur Twitter
5 février 2015 à 19:20:17

Ah oui je vois et d'après toi quelle partie je devrais modifier alors ? Il faudrais que je sorte de cette boucle ?
  • Partager sur Facebook
  • Partager sur Twitter
6 février 2015 à 23:08:17

Ca dépend de ce que tu veux faire, j'ai pas bien compris exactement la ou tu veux en venir.

Quels boutons actionne quel led ?

  • Partager sur Facebook
  • Partager sur Twitter
7 février 2015 à 18:05:20

Enfait, le bouton 1 actionne la led 1, le bouton 2 actionne la led 2, le bouton 3 actionne la led 3 et le bouton 4 actionne en même temps la led1 et la led2
  • Partager sur Facebook
  • Partager sur Twitter
26 octobre 2019 à 1:36:07

je pense que tu dois ajouter une autre condition dans la derniere condition (qui permet d'alumer les leds 1 et 2) 

par exemple : if(votre condit && condit(sur la led1 pour ne s'etteint pas) && condit(la meme chose pour led2) 

-
Edité par hamzanazih 26 octobre 2019 à 1:37:10

  • Partager sur Facebook
  • Partager sur Twitter
26 octobre 2019 à 4:51:21

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter