Problème clavier arduino Leonardo

Bonjour,

Je suis vraiment nul en programmation arduino!
Mais je cherche à faire une commande clavier avec un interrupteur interrupteur (marche / arrêt).

Le truc simple serais:

  • Quand le switch est sur on, envoyer le raccourci ....
  • Quand le switch est sur off, envoyer le raccourci ....

sachant que le raccourci serais surement le même dans les deux cas.

j'ai essayé comme sa mais le code m'envoies la même touche à l'infini sans faire fonctionner le switch

#include <Keyboard.h>

const int bouton = 2;
int boutonetat;
bool flag = true;

void setup() 
{
pinMode (bouton, INPUT);
boutonetat = LOW;
}

void loop()
{
   boutonetat = digitalRead(bouton);
   if (boutonetat == LOW)
    {
      Keyboard.begin();
      flag = false;
     {     
      Keyboard.press('o');
      delay(100);
      Keyboard.releaseAll();
      delay(100);
     }
    }
     else
     {
      if (!flag);
      {
      Keyboard.end();
      flag = true;
    }
     }
  boutonetat = digitalRead(bouton);
  if (bouton == HIGH)
      { 
       Keyboard.press('o');
       delay(100);
       Keyboard.releaseAll();
       delay(100);
      }
     else
     {
      if (!flag);
      {
      Keyboard.end(); 
      flag = true;
    }
     }
}

Merci pour votre aide

Bonjour,

Il faut que tu testes le changement d'état du switch. Pour cela il faut que tu compares l'état de l'entrée avec l'état précédent (que tu auras mémorisé au précédent appel de loop).
Il existe aussi des bibliothèques pour faire ça, mais est ce utile d'utiliser une bibliothèque pour une chose aussi simple.

Merci je vais tester cela.

Et je vais regarder dans les bibliothèque.
Vu mon niveau sa peut être utile.

Je pense que c'est sûrement très simple mais je ne vois pas l'erreur dans mon code!
J'aime trouver par moi même mais auriez-vous un exemple sans me donner toute la réponse ?

d'avance merci

Pour tester le changement d'état tu peux faire comme ça:

void loop()
{
  static int boutonEtatPrec = LOW; // état précédent du bouton
  boutonetat = digitalRead(bouton);
  if (boutonetat != boutonEtatPrec)
  {
    boutonEtatPrec == boutonetat;
    delay(20);      // anti rebond
    if (boutonetat == LOW)
    {
// ...

Il y a une erreur dans ton programme

    boutonetat = digitalRead(bouton);
    if (bouton == HIGH)

Tu testes la mauvaise variable.
Mais tu n'as pas besoin de relire le bouton.

génial je crois avoir compris :slight_smile:

Merci beaucoup

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.