Salut les makers,
J'ai une petite question sur la communication I²C..
Je dispose d'un R-pi que j'ai connecté en I²C avec un arduino (UNO pour le moment, mais ce seront bientôt des NANOS qui y seront connectés).
La connection fonctionne bien, malheureusement le bout de code fourni en exemple ne me permet d'envoyer qu'une instruction à la fois à l'arduino, celà ne me gênait pas trop lorsque je n'avais qu'un moteur par arduino à commander, mais ces arduinos devront aussi recevoir des instructions pour commander des servo-moteurs afin d'orienter la cam du R-pi.
Du coup, je souhaiterais pouvoir envoyer plusieurs instructions vers les arduinos (la première instruction pour définir la vitesse de la roue, la seconde instruction pour indiquer l'angle du servomoteur...)
voici l'exemple sur lequel je me suis basé ( https://www.pihomese...ux-via-bus-i2c/ ) :
code côté arduino :
#include <Wire.h> #define SLAVE_ADDRESS 0x12 int dataReceived = 0; void setup() { Serial.begin(9600); Wire.begin(SLAVE_ADDRESS); Wire.onReceive(receiveData); Wire.onRequest(sendData); } void loop() { delay(100); } void receiveData(int byteCount){ while(Wire.available()) { dataReceived = Wire.read(); Serial.print("Donnee recue : "); Serial.println(dataReceived); } } void sendData(){ int envoi = dataReceived + 1; Wire.write(envoi); }
et voici le code côté R-pi (notez l'affreux "time.sleep" que j'aimerai voir disparaître car pour les 4 arduinos envisagés on arrive à 4 secondes de perdues ce qui fait beaucoup trop à mon goût ^^)
import smbus import time # Remplacer 0 par 1 si nouveau Raspberry bus = smbus.SMBus(0) address = 0x12 print "Envoi de la valeur 3" bus.write_byte(address, 3) # Pause de 1 seconde pour laisser le temps au traitement de se faire time.sleep(1) reponse = bus.read_byte(address) print "La reponse de l'arduino : ", reponse
Merci d'avance pour vos réponses.