test-float-raspi.py
1 |
# ============================================================
|
---|---|
2 |
# Communication entre Arduino et Raspberry Pi via le bus I2C
|
3 |
# ============================================================
|
4 |
# Programme Master qui envoie des instructions vers la Arduino en simulant des registres
|
5 |
# sur la Arduino. S'utilise avec le programme Arduino test-float-arduino.ino
|
6 |
#
|
7 |
# Ce programme doit permettre de recevoir sur la Raspi une valeur float de la part de la Arduino.
|
8 |
|
9 |
import time |
10 |
import struct |
11 |
from Adafruit_I2C import Adafruit_I2C |
12 |
|
13 |
i2c = Adafruit_I2C( 0x04 )
|
14 |
|
15 |
# --- Demander une valeur décimale ---
|
16 |
# Transfert d'un type double
|
17 |
|
18 |
# Demander l'opération de réception d'un float, placer 0x02 dans le
|
19 |
# registre d'exécution 0
|
20 |
i2c.write8( 0x00, 0x02 ) |
21 |
time.sleep( 0.100 )
|
22 |
i2c.debug = True
|
23 |
|
24 |
# Lire 4 octets pour recevoir le float
|
25 |
# Doit recevoir les valeurs [164, 112, 181, 64]
|
26 |
i2c.debug = True
|
27 |
lstData = i2c.readList( 0x00, 4 ) |
28 |
|
29 |
# transformer en string pour unpack
|
30 |
sData = ''
|
31 |
for aByte in lstData: |
32 |
sData = sData + chr(aByte) # chr() retourne un string à partir d'un caractère |
33 |
|
34 |
f_data, = struct.unpack('<f', sData)
|
35 |
print f_data # Affiche la valeur en float |