Arduino bouton Tutorial (5 / 6 étapes)

Étape 5: Ajout de boutons, et va OO

Questions Scaling Up

Comme nous l’avons vu dans l’étape précédente, il devient difficile à grande échelle. Il y a des variables d’état global, qui sont appelés par des fonctions. Imaginez l’ajout d’un 2ème bouton : le cauchemar commence ; ne parlant ne pas un 3ème bouton...

Programmation : Va OO (orienté objet)

Arduino utilise le langage de transformation basé sur C++, alors pourquoi ne pas utiliser certaines fonctionnalités OO ?

Nous avons besoin emballer ces variables globales dans les structures que nous pouvons créer à volonté. Ces structures, avec des fonctions de manutention sont appelées classes et méthodes dans le monde OO. Une classe est simplement la description de l’objet, tandis que la mémoire efficace allouée pour chaque objet est appelée l' instance.

La première photo de cette étape montre que nous avons ajouté un bouton 2e. La deuxième photo montre les désormais traditionnels presses de long/court, travaillant de façon indépendante très bien. Le 2ème bouton a, par ailleurs, un seuil maintenant une pression plus longs.

Pro/Cons

Ce code devient plus complex, ce qui est normal car, lors du mesurage, la complexité augmente par une étape importante. La bonne nouvelle est qu’il peut alors soutenir n’importe quel nombre de boutons supplémentaires à aucune augmentation de la complexité.

Traitement définit quelques limitations (par exemple il n’y a aucune création dynamique : les opérateurs new et delete ne sont pas disponibles). Qui n’est pas mauvais, parce que nous ne veux pas se perdre dans certains des côtés particulièrement sanglantes de C++, qui sont inutiles (sans doute) dans les petits systèmes embarqués comme Arduino.

Bien sûr la même chose peut être fait en pur C, donc si vous besoin/préférez une implémentation C, demande-le moi.

Code

––––––––––8<––––––––––

 #define BUTTON1_PIN 2 // Button 1 #define BUTTON2_PIN 3 // Button 2 #define DEFAULT_LONGPRESS_LEN 25 // Min nr of loops for a long press #define DELAY 20 // Delay per loop in ms ////////////////////////////////////////////////////////////////////////////// enum { EV_NONE=0, EV_SHORTPRESS, EV_LONGPRESS }; ////////////////////////////////////////////////////////////////////////////// // Class definition class ButtonHandler { public: // Constructor ButtonHandler(int pin, int longpress_len=DEFAULT_LONGPRESS_LEN); // Initialization done after construction, to permit static instances void init(); // Handler, to be called in the loop() int handle(); protected: boolean was_pressed; // previous state int pressed_counter; // press running duration const int pin; // pin to which button is connected const int longpress_len; // longpress duration }; ButtonHandler::ButtonHandler(int p, int lp) : pin(p), longpress_len(lp) { } void ButtonHandler::init() { pinMode(pin, INPUT); digitalWrite(pin, HIGH); // pull-up was_pressed = false; pressed_counter = 0; } int ButtonHandler::handle() { int event; int now_pressed = !digitalRead(pin); if (!now_pressed && was_pressed) { // handle release event if (pressed_counter < longpress_len) event = EV_SHORTPRESS; else event = EV_LONGPRESS; } else event = EV_NONE; // update press running duration if (now_pressed) ++pressed_counter; else pressed_counter = 0; // remember state, and we're done was_pressed = now_pressed; return event; } ////////////////////////////////////////////////////////////////////////////// // Instantiate button objects ButtonHandler button1(BUTTON1_PIN); ButtonHandler button2(BUTTON2_PIN, DEFAULT_LONGPRESS_LEN*2); void setup() { Serial.begin(9600); // init buttons pins; I suppose it's best to do here button1.init(); button2.init(); } void print_event(const char* button_name, int event) { if (event) Serial.print(button_name); Serial.print(".SL"[event]); } void loop() { // handle button int event1 = button1.handle(); int event2 = button2.handle(); // do other things print_event("1", event1); print_event("2", event2); // add newline sometimes static int counter = 0; if ((++counter & 0x1f) == 0) Serial.println(); delay(DELAY); } 

––––––––––>8––––––––––

Articles Liés

Arduino bouton activé traiter distributeur

Arduino bouton activé traiter distributeur

pour ma classe de multimédia numérique final, j'ai créé un distributeur de friandise qui est activé en tirant sur une chaîne, qui commence un servo moteur qui fait tourner une roue pour distribuer la traite de mes de perroquets gris du Gabon.Étape 1:
WiFly RN-XV Module - Wireless Arduino Conseil Tutorial - Intro

WiFly RN-XV Module - Wireless Arduino Conseil Tutorial - Intro

avez-vous jamais voulu faire votre arduino ont la capacité sans fil ? Vous voulais connecter votre robot à votre routeur sans fil pour l'accès via votre réseau local ? Suivez ce petit tutoriel que j'ai mis en place et vous serez sur votre chemin en p
INTRODUCTION à I / O en ARDUINO (bouton poussoir)

INTRODUCTION à I / O en ARDUINO (bouton poussoir)

Date : 11/03/2016Titre : Entrées Arduino (numérique)Difficulté : facileBonjour tout le monde. Je suis ici pour parler des entrées numériques en général, les types de boutons de commande numériques et numérique bouton-poussoir programmation arduino. U
Arduino bouton clignote

Arduino bouton clignote

c'est mon premier instructable et j'espère que cela fonctionne pour vous tous !J'enseigne les gars comment faire un circuit, donc lorsque le bouton est enfoncé, le voyant s'allume !Choses nécessaires9 fils de connecteur1 bouton1 Arduinorésistance de
Arduino - bouton d’alarme, relais d’alarme. Exemple de KY-019

Arduino - bouton d’alarme, relais d’alarme. Exemple de KY-019

Salut tout le monde! Aujourd'hui, j'ai fait un exemple sur le module de relais KY_019.Dans ma vidéo, j'utilise une alarme avec stroboscope attaché à elle, mais le flash ne fonctionne pas car j'utilise une pile de 9 volts,et l'alarme est de 12v. en to
Arduino - bouton double fonction - Long court/presse presse (sans délai) + Bonus

Arduino - bouton double fonction - Long court/presse presse (sans délai) + Bonus

Utilisation de logiciel nous pouvons prendre un seul bouton et faites-le basculer un voyant allumé ou éteint, ou remplir une fonction plus complexe si nous désirons donc. Mais que se passe-t-il si nous avons deux fonctions mais toujours qu'un seul bo
Arduino Basic Tutorial

Arduino Basic Tutorial

Bonjour tout le monde. Je suis Mohammed hamza du Bangladesh,représentant Rajuk Uttara Model College.Aujourd'hui j'ai écris un tutoriel très basique sur Arduino. J'ai cherché beaucoup dans différents sites Web, navigation sur internet, mais je n'ai pa
Domotique avec arduino, boutons, écran LCD, téléphone intelligent EEPROM et

Domotique avec arduino, boutons, écran LCD, téléphone intelligent EEPROM et

Maintenant nous pouvons contrôler la coque à la maison avec le téléphone intelligentÉtape 1: Matériel nécessaire pour la domotique, vous pouvez ajouter des choses différentes, je choisis de commutation ou de relaisDans ce projet, vous contrôlerez swi
3D du corps pour les petites Unmanned Ground Vehicle

3D du corps pour les petites Unmanned Ground Vehicle

Ce châssis a été effectué à utiliser avec le Comité de nRover que j'ai conçu, mais il est possible d'utiliser avec Arduino Uno, parce que les deux cartes ont la même taille et les trous de fixation.L'idée principale était de faire un châssis polyvale
Guide du débutant pour Arduino

Guide du débutant pour Arduino

Après quelques années d'expérimentations avec Arduino, j'ai décidé que le moment est venu de partager les connaissances que j'ai acquis. Donc j'ai ici, il va, un guide pour Arduino, avec les bases nues pour les débutants et quelques explications plus
Ne jouez pas avec votre nourriture, Bestuur Krekels rencontré Je Arduino.

Ne jouez pas avec votre nourriture, Bestuur Krekels rencontré Je Arduino.

ALS onderdeel van mijn opleiding (Games fr Interactie) heb ik een prototype van een bordspel gemaakt dat je speelt met echte levende krekels.Naast de technische kant van het project moest ik ook rekening houden met het gedrag van de krekels. Hieronde
Arduino intermédiaire : Entrées et sorties

Arduino intermédiaire : Entrées et sorties

Continuant de mon Intro d'Arduino post, ce Instructable ira sur certains sujets un peu plus avancés avec Arduino, relative au contrôle et la gestion de nombreuses entrées et sorties. La classe suivante décrit comment connecter des entrées de l'Arduin
Bras de Robot Arduino

Bras de Robot Arduino

je l'avais promis dans un précédent post pour partager avec vous un robot arduino arm projet à une date ultérieure. Eh bien, cette date est aujourd'hui ! Cependant, au lieu d'utiliser un joystick pour contrôler le bras du robot arduino, I ' m Gonna p
Outils de traitement pour Arduino

Outils de traitement pour Arduino

Il y a plusieurs façons de contrôler votre Arduino. Bien des égards beaucoup beaucoup. Il peut s'agir à travers un autre Arduino, boutons, potentiomètres, R/C et plus. Une façon vraiment cool est par le biais de l'ordinateur. Il y a aussi un tas de f