postez tout votre code - là on parle dans le vide.
si vous regardez le fichier .h de la bibliothèque vous verrez qu'il dit que SetDebounceTicks() est déprécié (il ne faut plus l'utiliser mais ça reste pour compatibilité pour le moment)
Normalement le debounce par défaut est largement suffisant pour tous les boutons que j'ai pu voir.
#include <OneButton.h>
const int bouton1Pin =11;
const int bouton12Pin =12;
const int sortie1Pin=4;
OneButton bouton1(bouton1Pin);
const unsigned long debounceDelay=1000;
void simpleClickBouton1(){
digitalWrite(sortie1Pin,HIGH);
delay(500);
digitalWrite(sortie1Pin,LOW);
}
void setup (){
pinMode(sortie1Pin,OUTPUT);
bouton1.attachClick(simpleClickBouton1);
//bouton1.setDebounceMs(debounceDelay);
}
void loop(){
bouton1.tick();
}
Voilà c'est du recopiage
Je suis sur le forum avec mon phone mais j'emprunte un ordi pour coder donc faut envoyer un mail tout ça...bref
Voilà c'est un code minimal pour dompter la librairie
Concernant l'antirebond j'ai besoin d'environ 800ms pour ce que je veux en faire
#include <OneButton.h>
const int bouton1Pin =11;
const int bouton12Pin =12;
const int sortie1Pin=4;
OneButton bouton1(bouton1Pin);
const unsigned long debounceDelay=1000;
const unsigned long nonRepetitionTempo = 800; // Temps de non répétition
unsigned long nonRepetitionMillis = 0; // Temps de non répétition, chrono
boolean nonRepetition = false;
void simpleClickBouton1()
{
if (nonRepetition) // Si c'est bloqué
{
return;
}
digitalWrite(sortie1Pin,HIGH);
delay(500);
digitalWrite(sortie1Pin,LOW);
nonRepetition = true; // Bloquer la répétition
nonRepetitionMillis = millis(); // Démarrer le chrono
}
void setup (){
pinMode(sortie1Pin,OUTPUT);
bouton1.attachClick(simpleClickBouton1);
//bouton1.setDebounceMs(debounceDelay);
}
void loop(){
bouton1.tick();
if (nonRepetition && (millis() - nonRepetitionMillis) >= nonRepetitionTempo) // Si fin de non répétition
{
nonRepetition = false;
}
}
Justement j'ai bien tenté quelquechose de ce côté là qui fonctionnait presque(du coup j'ai ecrit un truc tout seul avec ms pour la première fois faut que je maîtrise aussi)mais j'ai compris qu'un antirebond doit faire l'affaire pour ce que je veux faire et que commencer à utiliser une librairie de gestion de boutons me sera utile pour mes futurs projets
Je suis toujours débutant donc je vais au plus logique pour moi en essayant d'apprendre un peu plus à chaque fois
Mes projets sont tous ludiques donc c'est que du loisir
Jpeux expliquer le projet si vous voulez pour que ça soit plus clair
Non. pas pour bloquer un nouvel appui pendant un certain temps. ce n'est pas fait pour cela. C'est juste fait pour gérer les rebonds.
regardez mon tuto sur les machines à état. J'utilise oneButton et il y a la notion de temps qui passe etc... et c'est non bloquant (votre delay(500) lors de l'appui risque de vous jouer des tours plus tard si vous avez des besoins pendant que la sortie est HIGH)
Non ça n'est pas fait pour cela mais si je le règle à 1000ms
Une fois enclenché,il ne reste pas en l'etat pendant 1seconde même si je relâche le bouton??
Tu veux que je vois que 800ms ça peut pas pour une souris donc on peut pas paramétrer autant?enfin ça se voit dans schéma
(Je prends le risque d'être ridicule là )
Je le dis avec mes mots😁
Bon j'arrête pour aujourd'hui
Cool jpbricole le nonrepetition j'ai un modèle propre comme ça
Et je regarderais la machine à état mais je pense c'est une autre paire de manche
Merci tous
pas forcément lié directement à ce que vous ajoutez : le code ajouté peut fonctionner mais vous changez le timing ou vous utilisez trop de mémoire et un bug sous jacent peut apparaître par exemple.
Bonjour
J'ai tout d'abord une interrogation sur le programme de jpbricole
Je pensais que le delay de la sortiePin bloquerai le programme mais l'antirepetition marche bien en même temps
Il y a des conditions pour que delay bloque un programme?
Après j'ai plein de questions autres😁
Salut!
Je suis curieux de connaître le projet qu'il y a derrière ta demande (qui, si je comprends bien, se résume à gérer un bouton et son anti-rebond avec à chaque clique un temps non bloquant de 800ms pendant lequel on ne peut pas répéter le clique ?) .
Pas forcément une fois qu'on à compris le principe
Si tu attends jusqu'à demain je te fais un exemple avec la machine à état conseillée par @J-M-L pour que tu aies un exemple à étudier si tu le souhaite ? Il me semble que c'est une solution plus fiable que millis mais qui demande un peu plus de mémoire en revanche.
Non, aucune. La fonction delay "gèle" complètement l'exécution du programme (un Arduino classique c'est monocore donc on peut pas faire deux opérations en même temps - si on utilise delay, on condamne à attendre toutes le reste pendant ce temps)
Donc je ne me suis pas rendu compte que mon antirepetition dure 1300ms dans ce programme??
Delay + antirepetition
Quant au projet c'est pour l'airsoft,un capteur de dégâts pour un mastodonte
Mais comme je voudrais aussi faire plus tard des capture de territoire ou horloge d'échecs je voudrais être bien sur la gestion des boutons et du temps
Du coup la les boutons c'est pour les essais
Ensuite j'ai regardé la machine à etat et la librairie de bricoleau ça a l'air bien une fois apprivoisé mais pour ce projet jpense rester un peu sur la base que je maîtrise pas assez... là j'essaie de me servir d'une librairie quelconque en même temps
Si vous avez un peu d’ambition pour vos projets, passez du temps pour maîtriser la base du c++ et du monde arduino. Cela vous fera gagner beaucoup de temps plus tard.
N’essayez pas non plus d’utiliser une fonction pour un but qui n’est pas celui qui est le sien. L’anti rebond, c’est pour les rebonds de quelques dixièmes de seconde. C’est pensé pour cela, pas pour autre chose.