| Ligne 105 : |
Ligne 105 : |
| | <nowiki>#!/usr/bin/env python | | <nowiki>#!/usr/bin/env python |
| | # -*- coding: latin-1 -*- | | # -*- coding: latin-1 -*- |
| | + | |
| | + | import time |
| | + | import RPi.GPIO as GPIO |
| | + | |
| | + | GPIO.setmode( GPIO.BCM ) |
| | + | DEBUG = 1 |
| | + | |
| | + | # Lit les données SPI d'une puce MCP3008, 8 canaux disponibles (adcnum de 0 à 7) |
| | + | def readadc( adcnum, clockpin, mosipin, misopin, cspin ): |
| | + | if( (adcnum > 7) or (adcnum < 0)): |
| | + | return -1 |
| | + | |
| | + | GPIO.output( cspin, True ) |
| | + | |
| | + | GPIO.output( clockpin, False ) # met Clock à Low |
| | + | GPIO.output( cspin, False ) # met CS à Low (active le module MCP3008) |
| | + | |
| | + | commandout = adcnum # numéro de channel |
| | + | commandout |= 0x18 # OR pour ajouter Start bit + signle-ended bit |
| | + | # 0x18 = 24d = 00011000b |
| | + | commandout <<=3 # décalage de 3 bits à gauche |
| | + | |
| | + | # Envoi des Bits sur le bus SPI |
| | + | for i in range(5): |
| | + | # faire un AND pour determiner l'état du bit de poids le plus |
| | + | # fort (0x80 = 128d = 10000000b) |
| | + | if( commandout & 0x80 ): # faire un AND pour déterminer l'état du bit |
| | + | GPIO.output( mosipin, True ) |
| | + | else: |
| | + | GPIO.output( mosipin, False ) |
| | + | commandout <<= 1 # décalage de 1 bit sur la gauche |
| | + | |
| | + | # Envoi du bit mosipin avec signal d'horloge |
| | + | GPIO.output( clockpin, True ) |
| | + | GPIO.output( clockpin, False ) |
| | + | |
| | + | # lecture des bits renvoyés par le MCP3008 |
| | + | # Lecture de 1 bit vide, 10 bits de données et un bit null |
| | + | adcout = 0 |
| | + | for i in range(12): |
| | + | # Signal d'horloge pour que le MCP3008 place un bit |
| | + | GPIO.output( clockpin, True ) |
| | + | GPIO.output( clockpin, False ) |
| | + | # décalage de 1 bit vers la gauche |
| | + | adcout <<= 1 |
| | + | # stockage du bit en fonction de la broche miso |
| | + | if( GPIO.input(misopin)): |
| | + | adcout |= 0x1 # active le bit avec une opération OR |
| | + | |
| | + | # Mettre Chip Select à High (désactive le MCP3008) |
| | + | GPIO.output( cspin, True ) |
| | + | |
| | + | # Le tout premier bit (celui de poids le plus faible, le dernier lut) |
| | + | # est null. Donc on l'elimine ce dernier bit en décalant vers la droite |
| | + | adcout >>= 1 |
| | + | |
| | + | return adcout |
| | + | |
| | + | # Broches connectées sur l'interface SPI du MCP3008 depuis le Cobbler |
| | + | # (changer selon vos besoins) |
| | + | SPICLK = 18 |
| | + | SPIMISO = 23 |
| | + | SPIMOSI = 24 |
| | + | SPICS = 25 |
| | + | |
| | + | # Initialisation de l'interface SPI |
| | + | GPIO.setup(SPIMOSI, GPIO.OUT) |
| | + | GPIO.setup(SPIMISO, GPIO.IN) |
| | + | GPIO.setup(SPICLK, GPIO.OUT) |
| | + | GPIO.setup(SPICS, GPIO.OUT) |
| | + | |
| | + | # Potentiomètre 10KOhms raccordés sur le canal ADC #0 |
| | + | potentiometer_adc = 0 |
| | + | |
| | + | while True: |
| | + | # Lecture analogique, retourne une valeur entre 0 et 1023 |
| | + | # pour une valeur de tension entre 0 et VRef (3.3v) |
| | + | trim_pot = readadc( potentiometer_adc, SPICLK, SPIMOSI, SPIMISO, SPICS ) |
| | + | |
| | + | print( "Valeur: " + str( trim_pot ) ) |
| | + | |
| | + | # convertir en tension |
| | + | print( "tension: "+ str( (3.3*trim_pot)/1024 ) ) |
| | + | |
| | + | # attendre une demi-seconde |
| | + | time.sleep(0.5) |
| | + | </nowiki> |
| | + | |
| | + | Ce qui produit le résultat suivant: |
| | + | |
| | + | <nowiki>Valeur: 665 |
| | + | tension: 2.14306640625 |
| | + | Valeur: 666 |
| | + | tension: 2.1462890625 |
| | + | Valeur: 665 |
| | + | tension: 2.14306640625 |
| | + | Valeur: 668 |
| | + | tension: 2.152734375 |
| | + | Valeur: 665 |
| | + | tension: 2.14306640625 |
| | </nowiki> | | </nowiki> |
| | | | |
| | Pour savoir comment télécharger et exécuter ce programme sur votre Py, nous vous proposons de prendre connaissance de notre premiers articles sur [[Rasp-Hack-LED|Raspberry Pi et LED]] | | Pour savoir comment télécharger et exécuter ce programme sur votre Py, nous vous proposons de prendre connaissance de notre premiers articles sur [[Rasp-Hack-LED|Raspberry Pi et LED]] |
| | + | |
| | + | == Commande de volume == |
| | + | AdaFruit propose un exemple plus avancé basé sur ce montage. |
| | + | |
| | + | L'exemple propose de modifier le volume du son en fonction de la position du potentiomètre. |
| | + | |
| | + | Cet exemple est disponible sur le site [http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/script AdaFruit Learning System] |
| | | | |
| | Source: [http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi AdaFruit Learning System] | | Source: [http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi AdaFruit Learning System] |