Dans un micro il est possible de mettre aussi bien des pull up que des pull down et les micros modernes ont les deux.
Si Atmel n’a prévu que des up et pas des down, c’est qu’Atmel avait bien compris que les utilisateurs préféraient relier les interupteurs à la masse.
C’est dans ce sens qu’il faut voir les choses.
Un interupteur dans le monde professionel est souvent dans un boitier métallique (Atmel/Microchip ne vit pas des achats des amateurs).
Il est toujours préférable de relier les pièces metalliques à la masse pour des raisons d’immunité aux bruits.
Bonjour à tous,
Petite mise à jour du tuto et de son exemple suite à cette discussion et à ce bug de la lib - corrigé mais qui apporte des modifications susceptibles de rendre le tuto obsolète sur certaines cartes.
En espérant ne pas avoir causé de tort en ne suivant pas de près la bibliothèque et ses mises à jour, et en remerciant @J-M-L pour l'information
Je supprime également le lien de téléchargement d'OneButton sur le forum, car évidement il n'est plus à jour maintenant et ça ne sert à rien de le mettre là puisqu'il est déjà sur GitHub...
Bravo!!! bon j’ai plus qu’a tout récrire … mais le bon côté si mon croquis gagne en lisibilité et solidité pourquoi pas … bon il y a une notion de callback …
Bravo !!! 50 lignes d’économiser mais surtout 2% sur la taille du croquis ce qui veut dire que je devrais réfléchir à optimiser à la fin du projet en choisissant le type de données eu égard à leur poids… mais pour en revenir sur cette bibliothèque c’est parfais (j’ai même implémenter une fonction supplémentaire sur le bouton). et le tuto est très clair, merci au contributeurs.
Bonjour!
Petite update du tuto pour virer deux trois trucs inutiles, j'étais plus jeune quand je l'ai écrit et même avec la relecture de @J-M-L j'avais tendance à ajouter des détails pour "montrer que je le savais", en attendant ça aidait probablement pas à la lisibilité
J'espère qu'il sera plus clair comme ça
D'ailleurs pour ceux qui se demande où je suis passé, je ne suis pas mort juste beaucoup plus occupé qu'avant et quelques problèmes en plus dans la vraie vie qui m'obligent à réduire beaucoup ma charge mentale (donc pas de réponses sur le forum) pour éviter de frapper dans mes murs... Ça passera mais bon je vais quand même essayer de faire une grosse relecture de la liste de tuto également.
bon courage - faut affronter les soucis de la vie et y faire face en gérant les bonne priorités.
(frapper dans les murs ne fait généralement pas changer grand chose )
Navré de lire ça, je te souhaite naturellement bon courage.
Et je me permet de te donner une sorte de conseille, d'avoir une activité qui te permet de gérer ton état de stress que ce soit du sport, de la méditation ou autre.
En espérant pouvoir te relire rapidement.
Merci Pandaroux pour ce tuto qui m’a aidé à incrémenter des seuils de température avec 4 boutons.
j’ai testé le code de Michel eesr dans les commentaires un peu plus haut, elle m’a aussi aidé à évoluer dans ma recherche.
Effectivement, son code n’est pas fonctionnel, mais dans le principe, c’était bon. J’ai passé un peu de temps dessus et j’ai pensé aux débutants (comme moi) qui s’intéressent au forum. Le code ci-dessous semble mieux fonctionner pour ces deux boutons :
#include <OneButton.h> // inclure la librairie OneButton.h
const byte pinBP = 10; // pin du bouton (D10)
const byte pinBP2 = 11;//pin du bouton 2 en D11
const byte pinLedVerte = 9; // pin de la LED verte - correspondant au clique simple
const byte pinLedRouge = 8; // pin de la LED rouge - correspondant au double clique
const byte pinLedBleue = 7; // pin de la LED bleue - correspondant au clique long
OneButton bouton(pinBP); // créer une instance (objet) bouton sur la pin du bouton (D10)
OneButton bouton1(pinBP2); //créer une autre instance (objet) bouton sur la pin du bouton (D11)
void simpleClick() {
// dans cette fonction, donc le clique simple, c'est la LED verte qui fonctionne
static bool ledVerteAllumee = false; // on définit la variable état de la LED et sa valeur initiale (0 car false = faux)
ledVerteAllumee =! ledVerteAllumee; // on inverse l'état de la variable de l'état de la LED
digitalWrite(pinLedVerte, ledVerteAllumee ? HIGH : LOW);
///////////////////// On éteint les autres LEDs /////////////////////////////////
digitalWrite(pinLedRouge, LOW);
digitalWrite(pinLedBleue, LOW);
}
void doubleClick() {
// dans cette fonction, donc le clique double, c'est la LED rouge qui fonctionne
static bool etatLedRouge = 0; // on définit la variable état de la LED
etatLedRouge =! etatLedRouge; // on inverse l'état de la variable de l'état de la LED
digitalWrite(pinLedRouge, etatLedRouge ? HIGH : LOW); // on rentre cette variable comme paramètre pour la LED
///////////////////// On éteint les autres LEDs /////////////////////////////////
digitalWrite(pinLedVerte, LOW);
digitalWrite(pinLedBleue, LOW);
}
void clickLong() {
// dans cette fonction, donc le clique long, c'est la LED bleue qui fonctionne
static bool ledBleueAllumee = false; // on définit la variable état de la LED et sa valeur initiale
ledBleueAllumee =! ledBleueAllumee; // on inverse l'état de la variable de l'état de la LED
digitalWrite(pinLedBleue, ledBleueAllumee ? HIGH : LOW); // on utilise cette variable comme paramètre pour la LED
///////////////////// On éteint les autres LEDs /////////////////////////////////
digitalWrite(pinLedVerte, LOW);
digitalWrite(pinLedRouge, LOW);
}
void ClickBP2(){ // ci-dessous, on écrit ce que l'on veut.
static bool ledVerteAllumee = false;
ledVerteAllumee =! ledVerteAllumee;
digitalWrite(pinLedVerte, ledVerteAllumee ? HIGH : LOW);
digitalWrite(pinLedRouge, LOW);
digitalWrite(pinLedBleue, LOW);
}
void setup() {
bouton.attachClick(simpleClick); // fonction appelée en cas de click
bouton.attachDoubleClick(doubleClick); // fonction appelée en cas de double click
bouton.attachLongPressStop(clickLong); // fonction appelée au moment ou le BP est relâché après un appui long
bouton1.attachClick(simpleClick); //fonction appelée en cas de click sur le second bouton
bouton1.attachLongPressStop(ClickBP2); //fonction appelée en cas de click sur le second bouton relie a la meme procedure, preferable en utilisation si pas de besoin specifique
}
void loop() {
bouton.tick(); // on lit en permanence le bouton connecté à la pin D10
bouton1.tick();
}
Attention à l'usage de variables static dans les fonctions.
vous avez deux variables ledVerteAllumee indépendantes et vous changez d'ailleurs la couleur de la led verte dans d'autres fonctions sans mettre à jour la variable.
Si vous voulez maintenir l'état des leds correctement, soit vous faites des variables globales, soit vous avez une fonction que vous appelez pour allumer et éteindre ou inverser l'état d'une led et c'est elle qui maintient l'état.