Spark Core: Lire une entrée digitale
Introduction
Le but de ce tutoriel est pouvoir détecter la pression d'un bouton poussoir branché sur votre Core et de le rapporter sur Spark Cloud.
Cette technique est également valide pour tous les composants utilisant un contact électrique franc comme c'est également le cas pour les relais reed ou les contacts magnétiques.
Nous allons également nous attarder sur les contacts parasites et comment contourner ce problème avec une méthode de déparasitage matériel.
Entrée digitale
Avec votre Spark Core, il est possible de configurer une pin en entrée ou en sortie.
Lorsqu'elle est configurée en entrée, il est possible de lire l'état haut/bas dans le programme.
Le bouton tactile
MC Hobby propose un mini kit "Bouton tactile" sur son WebShop
Dans les montages présentés ci-dessus, le bouton tactile proposé par MC Hobby peut se monter très facilement.
Sa forme carrée peut laisser penser qu'il est facile de monter le bouton "de travers" puisqu'il est facile de le tourner d'un quart de tour, un demi tour.
Il n'est pourtant pas nécessaire d'avoir recourt à un multimètre pour être certain du montage, tout soucis de mauvais raccordement peut facilement être écarté en utilisant le principe suivant:
"Toujours utiliser les bornes de deux coins totalement opposés pour effectuer le raccordement" (simple et efficace.
Le montage
Pour ce montage, nous allons utiliser un bouton poussoir, une résistance pull-down de 10 KOhms (noir, brun, orange) et une résistance de protection de 100 Ohms (brun, noir, brun).
Lorsque l'on presse le bouton, 3.3V est appliqué sur la broche D4...
si le bouton n'est pas pressé, la broche D4 est ramenée à la masse par
la résistance pull-down.
La vue schématique présente le montage sous une autre forme...
Le code
Vous trouverez également une copie de ce code dans notre tutoriel
Faire un appel d'API avec Curl
Nous allons maintenant tester notre programme... nous allons donc faire des appels d'API sur Spark Cloud.
Pour rappel, nous avons deux API dans notre programme:
Ce qui produit le résultat ci-dessous, où vous pouvez constater que nous avons pressé 5 fois le bouton:
Si le compteur augmente... c'est que l'on a pressé le bouton :-)
Restons pragmatique... cette façon de faire n'est pas forcement confortable.
En conséquence, nous avons ajouté une fonction reset sur Spark Cloud pour réinitialiser le compteur (ps: j'ai volontairement laissé le paramètre "params", même s'il est vide).
Ce qui produit le résultat suivant:
La valeur 1 est retournée par l'exécution de la fonction sur le Spark... mais le compteur sera bien à zéro!
Tutoriel
Où acheter
MCHobby investi du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
Le but de ce tutoriel est pouvoir détecter la pression d'un bouton poussoir branché sur votre Core et de le rapporter sur Spark Cloud.
Cette technique est également valide pour tous les composants utilisant un contact électrique franc comme c'est également le cas pour les relais reed ou les contacts magnétiques.
Nous allons également nous attarder sur les contacts parasites et comment contourner ce problème avec une méthode de déparasitage matériel.
Entrée digitale
Avec votre Spark Core, il est possible de configurer une pin en entrée ou en sortie.
Lorsqu'elle est configurée en entrée, il est possible de lire l'état haut/bas dans le programme.
- Un état "haut" (HIGH) correspond au raccordement vers le +3.3 volts.
- Un état "bas" (LOW) correspond au raccordement à la masse (GND, 0 Volts).
Le bouton tactile
MC Hobby propose un mini kit "Bouton tactile" sur son WebShop
Source: Le tutoriel MCHobby |
Sa forme carrée peut laisser penser qu'il est facile de monter le bouton "de travers" puisqu'il est facile de le tourner d'un quart de tour, un demi tour.
Il n'est pourtant pas nécessaire d'avoir recourt à un multimètre pour être certain du montage, tout soucis de mauvais raccordement peut facilement être écarté en utilisant le principe suivant:
"Toujours utiliser les bornes de deux coins totalement opposés pour effectuer le raccordement" (simple et efficace.
Le montage
Pour ce montage, nous allons utiliser un bouton poussoir, une résistance pull-down de 10 KOhms (noir, brun, orange) et une résistance de protection de 100 Ohms (brun, noir, brun).
Source: Le tutoriel MCHobby |
La vue schématique présente le montage sous une autre forme...
Source: Le tutoriel MCHobby |
Vous trouverez également une copie de ce code dans notre tutoriel
// ------------------------------------------------- // Internet ButtonCounter - Compteur Bouton Internet // ------------------------------------------------- // // Exemple didactique dont le but est: // 1) De détecter la pression d'un bouton, relais reed ou autre senseur // a contact franc (avec déparasitage logiciel). // 2) Reporte cette information dans une variable "counter" sur Spark Cloud // (le nombre de pressions) permettant à un autre logiciel comme // un SmartPhone de détecter l'événement. // 3) Offrir une fonction "reset" sur Spark Cloud permettant // a un autre logiciel de remettre le compteur "counter" à zéro? // // Voyez le tutoriel MCHobby // http://wiki.mchobby.be/index.php?title=Spark-Core-Bouton // bouton branché sur la broche D4 #define btnPin 4 // Créer une variable qui pour stocker la valeur // du compteur de pression int counter = 0; // Créer les variables internes au programme int buttonState; // etat du bouton /* Exécuté une fois au démarrage */ void setup() { // Enregistrer la variable compteur sur Spark Cloud Spark.variable("counter", &counter, INT ); // Enregistrer la fonction "reset compteur" sur Spark Cloud Spark.function("reset", resetCounter ); // Active la broche D4 comme entrée pinMode(btnPin, INPUT); // lecture de l'état initial buttonState = digitalRead( btnPin ); } /* la fonction loop() est executée encore et encore */ void loop() { int val, val2; // variable pour stocker la valeur lue sur la broche D4 val = digitalRead( btnPin ); delay( 10 ); // delai de 10ms pour déparasitage logiciel val2 = digitalRead( btnPin ); // si val = val2 --> lecture de l'entrée est consistante // l'état de l'entrée est définit avec certitude... ce n'est pas // un parasite. if( val == val2 ){ // Si le bouton a changé d'état? (passe du HIGH->LOW ou de LOW->HIGH) if( val != buttonState ){ // Si le bouton est pressé if( val == HIGH ){ counter = counter +1; // incrémenter le compteur } // Se souvenir du nouvel état du bouton buttonState = val; } } } // Cette fontion est appelée lorqu'il y a un appel correspondant sur l'API // Pas de chaine de commande. // Réinitialise le compteur "counter" à zéro int resetCounter( String command ){ counter = 0; return 1; // retour de valeur pour l'API }
Faire un appel d'API avec Curl
Nous allons maintenant tester notre programme... nous allons donc faire des appels d'API sur Spark Cloud.
Pour rappel, nous avons deux API dans notre programme:
- counter (variable) - permet de savoir combien de fois le bouton à été pressé.
- reset (function) - sans paramètre, permet de réinitialiser le compteur à 0.
Le compteur
Pour commencer, nous allons récupérer le résultat du compteur en utilisant curl (voyez nos précédents tutoriels concernant CURL).curl -G https://api.spark.io/v1/devices/0123456789abcdef/counter -d access_token=123412341234
Ce qui produit le résultat ci-dessous, où vous pouvez constater que nous avons pressé 5 fois le bouton:
{ "cmd": "VarReturn", "name": "counter", "result": 5, "coreInfo": { "last_app": "", "last_heard": "2014-12-31T15:53:55.238Z", "connected": true, "deviceID": "0123456789abcdef" } }
Réinitialiser le compteur
Idéalement votre programme utilisant l'API Spark devrait prendre la valeur du compteur... puis surveiller le changement de cette valeur.Si le compteur augmente... c'est que l'on a pressé le bouton :-)
Restons pragmatique... cette façon de faire n'est pas forcement confortable.
En conséquence, nous avons ajouté une fonction reset sur Spark Cloud pour réinitialiser le compteur (ps: j'ai volontairement laissé le paramètre "params", même s'il est vide).
curl https://api.spark.io/v1/devices/0123456789abcdef/reset -d access_token=123412341234 -d params=
Ce qui produit le résultat suivant:
{ "id": "0123456789abcdef", "name": "mch-demo", "last_app": null, "connected": true, "return_value": 1 }
La valeur 1 est retournée par l'exécution de la fonction sur le Spark... mais le compteur sera bien à zéro!
Tutoriel
- Le tutoriel Bouton & compteur est disponible sur le wiki de MCHobby.
- Nos autres tutoriels Spark Core
Où acheter
MCHobby investi du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
Écrire un commentaire