Action différente en fonction nombre d'impulsions

Bonjour,
Je souhaite faire fonctionner une led de façon différente en fonction du type de pression sur 1 poussoir :
1 pression "courte" = Led allumée 10 secondes
2 pression "longue" = led allumée illimité

1 nouvelle pression alors qu'un cycle est lancé = réinitialise = led éteinte

Quelles sont les fonctions vers lesquelles je dois m'orienter ? pouvez-vous m'aider?
Merci !

Bonjour mosa60400

Un début de piste avec la bibliothèque JC_Button qui a une fonction pressedFor(ms) pour les longues pressions.

Cordialement
jpbbricole

Merci JP ça correspond à ce que je cherche.
Plus qu'à comprendre maintenant :grin:

D'après mes premiers cours (Arduino pour les nuls) la façon de définir une constante est :
const byte BUTTON_PIN = 7

Du coup je ne comprends pas cette façon de faire :
Capture d’écran 2022-07-26 191549

???
Merci

Bonsoir mosa60400

Un début d'explication (console à 115200):

#include <JC_Button.h>          // https://github.com/JChristensen/JC_Button

const byte boutonPoussoirPin = 3;     // Pin du bouton poussoir

Button boutonPoussoir(boutonPoussoirPin);     // Création de boutonPoussoir

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

	boutonPoussoir.begin();     // Démarrage de boutonPoussoir
}

void loop()
{
	boutonPoussoir.read();     // Lecture de boutonPoussoir

	if (boutonPoussoir.pressedFor(2000))     // Si BP pressé 2 secondes
	{
		Serial.println("Pression longue");
	}
	else if (boutonPoussoir.wasReleased())     // Au relâchement de boutonPoussoir
	{
		Serial.println("Pression courte");
	}
}

Par défaut, l'anti-rebonds est à 25 milliSecondes, il y a PULL_UP et est actif avec un LOW (GND), voire ici.

Cordialement
jpbbricole

Merci JP.
Dans la ligne n°2 : "boutonPoussoirPin" doit obligatoirement contenir "Pin" ou c'est juste un nom de constante ?
Je me mélange entre fonctions et nom de constantes...

"Button" est bien une fonction ?

Merci

sinon les classes de Button dans easyRun ➜ regardez les exemples

ou alors la librairie OneButton de Matthias Hertel où on peut directement attacher un callback sur click, double_click et appui_long (documentation ici)

Merci JML je vais aller voir tout ça

voici un exemple

clickez sur la flèche verte
image
pour lancer la simulation et appuyez sur le bouton (simple, double, multi click ou appui long)

➜ la console affiche ce que vous avez fait

la bibliothèque OneButton permet la gestion avec appel d'une fonction lors du simple, double et multi-click (avec affichage du nombre de clicks) ou alors de l'appui long (avec appel de fonction au début et fin de l'appui long et en cours)

Génial ce simulateur !
donc ok je comprends le coup des simple clic, double clic.
Comment je dois faire pour exécuter une action en fonction de ces clics maintenant ?
Il faut utiliser les fonctions de gestion des appuis c'est ça ? :

Capture d’écran 2022-07-26 212051

Merci

par exemple si je veux allumer une led sur simple clic, au lieu d'écrire dans la console ?

Bonsoir mosa60400

Non, "Pin" n'est pas obligatoire, ça présence rend plus "explicite" quand au rôle de cette constante.
Il en va de même pour les fonctions, un nom explicite évite, souvent, des commentaires.

Cordialement
jpbbricole

il suffit de le dire dans le callback (la fonction simpleClick() est appelée lors d'un appui simple puisqu'on a déclaré bouton.attachClick(simpleClick). ➜ c'est ce qu'on appelle un callback)

un exemple avec le click qui allume et le double click qui éteint une LED:

D'accord, merci

Super, merci !

cette ligne permet de définir plusieurs constantes de même type séparées d'une virgule.

on peut faire pareille pour les variables:
uint8 variable1, variable2, variablex;

peut-être c'est l'initialisation qui n'est pas comprise. c'est pareil que

const byte BUTTON_PIN = 7;
const byte LED_PIN = 13;

en C++ on peut initialiser une variable en passant sa valeur entre parenthèses (en fait on appelle le constructeur sur le type choisi et quand c'est juste un entier, ça fait l'affectation)

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