Différences entre versions de « Hack-wipy-button »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 97 : Ligne 97 :
 
* '''0''': signifie que le bouton EST pressé
 
* '''0''': signifie que le bouton EST pressé
  
=== Exemple 1 ===
+
=== Exemple ===
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
# Cet exemple controle la LED heartbeat et la fait clignoter jusqu'à ce que l'on presse  
 
# Cet exemple controle la LED heartbeat et la fait clignoter jusqu'à ce que l'on presse  

Version du 13 juin 2016 à 12:37


MCHobby investit 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.

Ce que nous faisons

Nous allons apprendre à lire l'état d'une entrée sur le WiPy. Pour cela, nous allons configurer une broche comme entrée (et activer la résistance pull-up). Lorsque l'utilisateur pressera la bouton, nous allumerons la LED HeartBeat de la carte pendant 3 secondes.

Pour commencer, attrapez les éléments listés ci-dessous et raccordez le tout comme indiqué. Une fois le circuit monté, vous devez charger le programme sur la carte WiPy.

Pour cet exemple, vous aurez besoin d'un WiPy, un Breadboard, un bouton poussoir et une résistance et un câble micoUSB.

Résistance Pull-up

Le but d'une résistance pull-up est de maintenir le niveau de la broche d'entrée au niveau haut (3.3v) par défaut. Cela signifie que si le montage n'impose pas une tension sur la broche, celle-ci reste au niveau haut.

Avec certains microcontrôleurs, cette résistance doit être montée par vos soins, avec d'autres (comme le WiPy) cette résistance existe dans le microcontrôleur et il suffit alors de l'activer.

Voici un petit montage (provenant d'Arduino) qui explique le fonctionnement d'une résistance pull-up de 10 KOhms.

Button-PullUp-3.3v.png
Source: AdaFruit

Si le bouton n'est pas presser les deux résistances placent le potentiel de la broche sur 3.3v (comme il n'y a pas de courant... il n'y a pas vraiment de chute de tension dans les résistances). GP8 est donc à +3.3v.

Si le bouton est pressé, la broches GP8 est ramenée à la masse (0V) par l'intermédiaire de la résistance de 100 Ohms. La résistance de 10KOhms est alors également branchée à la masse, ce qui fait qu'un courant de 3.3 / 10000 = 0.33mA y passe (négligeable).

La résistance de 100 Ohms est une résistance de protection et n'est pas obligatoire. Elle est par ailleurs rarement utilisée par les habitués. Prenez la cas ou vous avez configuré la broche en sortie, placée au niveau haut (3.3v) par votre programme. Si vous pressez le bouton sans résistance de sortie et que vous pressiez le bouton? Et bien, s'il n'y avait pas la résistance de 100 Ohms, vous auriez un court-circuit franc, ce qui endommagerait votre WiPy. S'il y a une résistance de 100 Ohms, vous n'avez plus de court-circuit mais un courant de 3.3V / 100 = 33 mA (beaucoup de trop pour une sortie WiPy mais il s'es sortira peut être si vous n'insistez pas).

Le bouton tactile

Dans les montages présentés ci-dessous, 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.

Bouton tactile raccordement 1.jpg

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)

Bouton tactile raccordement 2.jpg

Vous constaterez dans l'exemple ci-dessus que même si le bouton est tourné d'un quart de tour (à droite de l'image), la position des points de raccordements (en bleu) font que ce dernier opère toujours correctement. Il n'y a ni court-circuit, ni dysfonctionnement :-) .

Matériel nécessaire

PYBX-BTN.png

Bouton poussoir
x1

 

Schéma

Voici le schéma correspondant à nos raccordement.

WiPy-Button-schema.png

Brancher

Connectez tous les éléments ensembles comme présenté sur l'image.

WiPy-Hack-Button-01.jpg
Made with - réalisé avec - Fritzing fritzing.org

Programme

Lire l'état du bouton

Pour lire l'état du bouton, vous devez déclarer la broche en entrée et activer la résistance pull-up (voyez l'explication en début d'article)

from machine import Pin
gp8 = Pin( 'GP8', mode=Pin.IN, pull=Pin.PULL_UP )

Pour lire la valeur de la broche, vous pouvez utiliser les deux possibilités suivantes:

gp8()
gp8.value()

Dans les deux cas, la fonction retourne:

  • 0 si la broche est au niveau bas
  • 1 si la broche est au niveau haut

Attention: logique inversée

La broche GP8 sera:

  • au niveau haut (3.3v) lorsque personne ne presse sur le bouton
  • au niveau bas (0v) lorsque quelqu'un presse le bouton

L'appel gp8.value() retourne donc un valeur en logique inversée:

  • 1: signifie que le bouton N'EST PAS pressé
  • 0: signifie que le bouton EST pressé

Exemple

# Cet exemple controle la LED heartbeat et la fait clignoter jusqu'à ce que l'on presse 
#    sur le bouton raccordé sur GP8.
# Le but est d'apprendre a utiliser une entrée du WiPy avec un bouton
# 
#
# Ou acheter un WiPy et une carte d'extension
#   http://shop.mchobby.be/product.php?id_product=736 
#   http://shop.mchobby.be/product.php?id_product=737
#   http://shop.mchobby.be/category.php?id_category=68
#
# Voyez le tutoriel 
#   http://wiki.mchobby.be/index.php?title=Hack-wipy-button
#
# Auteur: Meurisse D. pour shop.mchoby.be
# Licence: CC-BY-SA
#
from machine import Pin
import time
import wipy

# Desactiver HeartBeat + reconfigurer
wipy.heartbeat( False )
led = Pin( 'GP25', mode=Pin.OUT )
led.value( 0 )

# Declare la broche en entrée
gp8 = Pin( 'GP8', mode=Pin.IN, pull=Pin.PULL_UP )

# tant que le bouton n'est pas pressé
while gp8.value() == 1:
    led.toggle()         # changer etat led
    time.sleep_ms( 200 ) # attendre 0.2 sec

# Eteindre la LED
led.value( 0 )

# Réactiver heartbeat
del( led )
wipy.heartbeat( True )

Modèle:HACK-WIPY-TRAILER