Outils pour utilisateurs

Outils du site


python:touche2osc

Capteurs de touche tactile

Chipset mpr121 super pratique, il faut juste faire très attention au cablage , ne pas croiser les files, ne pas les mettre trop proche etc…

touches2osc.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys,time,liblo,mpr121

# Use mpr121 class for everything else
from smbus import SMBus

BUS_NUMBER = 1
IP='127.0.0.1'
PORT=9001
carte = [0x5a,0x5b,0x5c,0x5d]
osc_path = ['/touche/c/','/touche/b/','/touche/c/','/touche/d/']
try:
        mpr121.TOU_THRESH = 0x30
        mpr121.REL_THRESH = 0x33
        mpr121.setup(carte[0])
        mpr121.setup(carte[1])
        mpr121.setup(carte[2])
        mpr121.setup(carte[3])
        target = liblo.Address('127.0.0.1',9001)
except liblo.AddressError, err:
        print str(err)
        sys.exit()
while True:
        for nocart in range(3):
                s = ''
                touchData = mpr121.readData(carte[nocart])
                if touchData & (1 << 12):
                        s += 'S'
                if (touchData & 0xFFF) == 0:
                        s += 'N'
                else:
                        for i in range(12):
                                if touchData & (1 << i):
                                        s += str(i)

                #       print(s)
                        liblo.send(target, osc_path[nocart], s)

        time.sleep(.2) # to less consumption of CPU

et l'interface au mpr121 mpr121.py

# Based on Arduino example by Jim Lindblom
# http://bildr.org/2011/05/mpr121_arduino/

import smbus
bus = smbus.SMBus(1)

# MPR121 Register Defines

MHD_R = 0x2B
NHD_R = 0x2C
NCL_R = 0x2D
FDL_R = 0x2E
MHD_F = 0x2F
NHD_F = 0x30
NCL_F = 0x31
FDL_F = 0x32
ELE0_T = 0x41
ELE0_R = 0x42
ELE1_T = 0x43
ELE1_R = 0x44
ELE2_T = 0x45
ELE2_R = 0x46
ELE3_T = 0x47
ELE3_R = 0x48
ELE4_T = 0x49
ELE4_R = 0x4A
ELE5_T = 0x4B
ELE5_R = 0x4C
ELE6_T = 0x4D
ELE6_R = 0x4E
ELE7_T = 0x4F
ELE7_R = 0x50
ELE8_T = 0x51
ELE8_R = 0x52
ELE9_T = 0x53
ELE9_R = 0x54
ELE10_T = 0x55
ELE10_R = 0x56
ELE11_T = 0x57
ELE11_R = 0x58
FIL_CFG = 0x5D
ELE_CFG = 0x5E
GPIO_CTRL0 = 0x73
GPIO_CTRL1 = 0x74
GPIO_DATA = 0x75
GPIO_DIR = 0x76
GPIO_EN = 0x77
GPIO_SET = 0x78
GPIO_CLEAR = 0x79
GPIO_TOGGLE = 0x7A
ATO_CFG0 = 0x7B
ATO_CFGU = 0x7D
ATO_CFGL = 0x7E
ATO_CFGT = 0x7F
# Global Constants
TOU_THRESH = 0x06
REL_THRESH = 0x0A
# Routines
def readData(address):
 MSB = bus.read_byte_data(address, 0x00)
 LSB = bus.read_byte_data(address, 0x01)
 touchData = ((MSB << 8) |LSB)
 return touchData;

def setup(address):
 bus.write_byte_data(address, ELE_CFG, 0x00)
 # Section A - Controls filtering when data is > baseline.
 bus.write_byte_data(address, MHD_R, 0x01)
 bus.write_byte_data(address, NHD_R, 0x01)
 bus.write_byte_data(address, NCL_R, 0x00)
 bus.write_byte_data(address, FDL_R, 0x00)
 # Section B - Controls filtering when data is < baseline.
 bus.write_byte_data(address, MHD_F, 0x01)
 bus.write_byte_data(address, NHD_F, 0x01)
 bus.write_byte_data(address, NCL_F, 0xFF)
 bus.write_byte_data(address, FDL_F, 0x02)
 #Section C - Sets touch and release thresholds for each electrode

 bus.write_byte_data(address, ELE0_T, TOU_THRESH)
 bus.write_byte_data(address, ELE0_R, REL_THRESH)
 bus.write_byte_data(address, ELE1_T, TOU_THRESH)
 bus.write_byte_data(address, ELE1_R, REL_THRESH)
 bus.write_byte_data(address, ELE2_T, TOU_THRESH)
 bus.write_byte_data(address, ELE2_R, REL_THRESH)
 bus.write_byte_data(address, ELE3_T, TOU_THRESH)
 bus.write_byte_data(address, ELE3_R, REL_THRESH)
 bus.write_byte_data(address, ELE4_T, TOU_THRESH)
 bus.write_byte_data(address, ELE4_R, REL_THRESH)
 bus.write_byte_data(address, ELE5_T, TOU_THRESH)
 bus.write_byte_data(address, ELE5_R, REL_THRESH)
 bus.write_byte_data(address, ELE6_T, TOU_THRESH)
 bus.write_byte_data(address, ELE6_R, REL_THRESH)
 bus.write_byte_data(address, ELE7_T, TOU_THRESH)
 bus.write_byte_data(address, ELE7_R, REL_THRESH)
 bus.write_byte_data(address, ELE8_T, TOU_THRESH)
 bus.write_byte_data(address, ELE8_R, REL_THRESH)
 bus.write_byte_data(address, ELE9_T, TOU_THRESH)
 bus.write_byte_data(address, ELE9_R, REL_THRESH)
 bus.write_byte_data(address, ELE10_T, TOU_THRESH)
 bus.write_byte_data(address, ELE10_R, REL_THRESH)
 bus.write_byte_data(address, ELE11_T, TOU_THRESH)
 bus.write_byte_data(address, ELE11_R, REL_THRESH)

 # Section D
 # Set the Filter Configuration
 # Set ESI2

 bus.write_byte_data(address, FIL_CFG, 0x04)

 # Section E
 # Electrode Configuration
 # Set ELE_CFG to 0x00 to return to standby mode

 bus.write_byte_data(address, ELE_CFG, 0x0C)  # Enables all 12 Electrodes
python/touche2osc.txt · Dernière modification : 2024/02/09 17:10 de 127.0.0.1