Allumer LED en permanence

Bonjour j'aimerai savoir s'il est possible d'allumer une led en permanence en appuyant sur un bouton je voudrais que quand j'appuye sur mon bouton la led s'allume et quand je re-clic su le bouton la led s'eteigne mais ja n'y arrive pas si vous avez une solution ?!

Merci d'avance :wink:

la solution, une simple recherches sur google.. et moins de 2minutes tu trouves ton bonheur

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoInitiationBPAppuiBpAllumeLed

Salut !
J'ai essayé de refaire le code j'y suis même pas arrivé x)
L'arduino mettait au moins dix secondes à détecter le second appui :slight_smile:

Damien L.

Non ca ne marche pas la led est allumée sans que je touche au bouton et elle s'éteint quand j'appui sur le bouton mais dès que je le relache la led se rallume !!

ce que je veux c'est que je fais un appui sur le bouton (j'appuie et je relache ) et la led s'allume et reste allumée :wink: et quand je ré appui sur le bouton la led s'éteint !

E ca ne marche pas avec ce programme j'ai essayé quelque trucs mais je vois pas comment faire là :slight_smile:

Il te faut une variable qui contiendra l'état de la LED en bool. (true ou false)
ex: bool ledStatus;

Ensuite quand ton code détecte un appui tu changes l'état de cette variable.
ex: ledStatus = !ledStatus;
x = l'inverse de x
Donc true devient false et inversement.

En fonction de l'état de cette variable tu allume ou non la led.
ex:

if(ledStatus) digitalWrite(PIN_led, HIGH);
else digitalWrite(PIN_led, LOW);

Ca ne marche toujours pas je ne comprend pas comment ca ne peut pas marcher ! :confused:

Ca ne marche toujours pas je ne comprend pas comment ca ne peut pas marcher ! :confused:

Tu n‚Äôas pas lu dans le message de ‚ÄúBienvenue‚ÄĚ qu‚Äôil faut fournir les sch√©mas de ce que tu as r√©ellement c√Ębl√©, pas un sch√©ma provenant d‚Äôinternet, et ton code ?
Comment veut tu qu’on détecte la conne*ie , Avec une boule de cristal ?

boule_de_cristal.jpg

mon schéma de cablage je n'en ai pas juste, une led bleue connectée avec une resistance de 220ohm a a carte arduino et un bouton poussoir une broche connecté a la masse avec une resistance de 12kohm en série, une autre broche au Vcc et la dernière à une broche digitale !

c'est pas le cablage le plus difficile je pense !

Le code le voici :

int BPPin = 2 ;
 int led = 9 ;
 int BP ;
  
    
void setup() {
  Serial.begin(9600);
  pinMode(led,OUTPUT);
  pinMode(BPPin,INPUT);
}

void loop() {
  BP = digitalRead(BPPin);
  if (BP == 1 ){
 digitalWrite(led, HIGH);
  }else{
    digitalWrite(led,LOW);
  }
}

La Led est éteinte de base quand j'appui sur le bouton elle s'allume mais si je le relache elle s'éteint :confused:

Quand vous rel√Ęchez faut pas √©teindre, faut juste m√©moriser que le bouton est rel√Ęch√© et Faut √©teindre la prochaine fois que vous appuyez...

Comme ça.

Gilbert

/*
 Commande d'allumage et d'extinction d'une LED avec un seul poussoir.
 La LED avec une résistance de 1K est raccordée sur D2
 A0 avec une résistance de 10K au 5V
 Le poussoir sur A0 avec contact à la masse
 */
 
void setup() 
{
            
  pinMode(2, OUTPUT);                 // emplacement de la LED-1
  
  digitalWrite(2, LOW);               // LED-1 éteinte
 
}


void loop()                           // Boucle sans fin
{
  int bouton=analogRead(0);           // Lire l'état du bouton poussoir
/*
    if (bouton < 100)                 // Si bouton poussoir est pressé et la ligne est longue
*/
    if (bouton == 0)                  // Si bouton poussoir est pressé et la ligne est courte

    { 
            if (digitalRead(2)==0)    // et si LED éteinte
            {
              digitalWrite(2, HIGH);  // alors allumer la LED
            }
              else                    // et si la LED était déja adlummée
            {
              digitalWrite(2,LOW);    // alors éteindre la LED
            }
        delay(1000);                  // attendre 1 sec
    }
}

gilbert45:
Comme ça.

Gilbert

Non pas come ça.

Il ne faut aucun long delay() ou √©ventuellement juste de 10 pour 15ms pour d√©bouncer le bouton. le code ci dessus fera clignoter la lampe toute les secondes si vous tenez le bouton appuy√© et ne le rel√Ęchez pas‚Ķ

Il faut une variable d‚Äô√©tat qui m√©morise que le bouton a √©t√© rel√Ęch√©.

Regardez le code que j’avais proposé pour une question similaire dans la réponse 3 et quelques explications en 5

Lisez les explications en 5 de mon autre post

Moi j'utilise ma méthode depuis plusieurs années pour commander 6 appareils électriques depuis un pupitre de commande à 6 poussoirs et je n'ai aucune difficulté à enclencher ou déclencher en moins d'une seconde.

Gilbert

Gilbert - tenez votre bouton enforc√© 10 secondes sur votre pupitre si vous avez ce code et regardez le comportement de vos appareils‚Ķ Votre code fonctionne si vous rel√Ęchez le bouton dans la seconde qui suit son appui.

Pour enclencher un appareil, je n'ai jamais pressé le boutons pendant une seconde.
Une seule impulsion me suffit.
Et tout se passe très bien.

Gilbert

d'accord, c'est que vous avez un "bouton poussoir √† impulsion" sans doute - Un click dessus envoit une impulsion et se rel√Ęche imm√©diatement tout seul. c'est pour cela que √ßa fonctionne pour vous.

Bichongri a un bouton de base, tant qu'il est enfoncé, la connexion est active. c'est pour cela qu'il faut qu'il en tienne compte dans son code

merci beaucoup ça marche très bien même si je trouve ça compliqué comme programme !!

Bonjour à tous, dsl le topic est un peu vieux mais s’il y en a qui se demande toujours comment faire, j’ai réussi à bricoler ça sans delay. Si certains veulent me faire des propositions d’amélioration je suis preneur car je débute un peu…
Merci beaucoup

int button = 8 ;
int led = 12 ;
bool a = 0;
bool b = 0;

void setup() {
 pinMode(button, INPUT);
 pinMode(led, OUTPUT);

}

void loop() {

 bool BP = digitalRead(button);

 while (a == 0) {
   BP = digitalRead(button);
   while (BP == 1) {
     BP = digitalRead(button);
     digitalWrite(led, HIGH);
     b = 1;
   }
   if (b == 1) {
     a = 1;
   }
 }
 while (a == 1) {
   BP = digitalRead(button);
   while (BP == 1) {
     BP = digitalRead(button);
     digitalWrite(led, LOW);
     b = 0;
   }
   if (b == 0) {
     a = 0;
   }
 }
}