Je galère depuis quelques semaines pour la récupération et relecture des informations envoyées par un raspberry vers un arduino mega 2560.
Jusqu' présent, j'arrive bien à établir la communication I2C, j'arrive bien a envoyer des datas ( 0 à 65535 ), j'arrive à réceptionner des bytes coté arduino. Le problème c'est que je n'arrive pas à réassembler les bytes comme il faut pour reconstruire la valeur envoyée.
En gros lorsque je passe la valeur 1244 coté raspberry , l'arduino reçoit le 1er byter puis le 2d byte, ce qui me donne 220 et 4. Ce que je n'arrive pas a faire c'est le 4 | 220 ...
car en effet : 4 ==> 0100
220 ==> 1101 1100
et 4 | 220 ==> 0100 1101 1100 qui correspond a 1244 en base 10
Je n'arrive pas a "séparer" ces 2 bytes pour pouvoir faire le 4 | 220.
voici mon code arduino :
void receiveEvent(int howMany)
{
if (howMany == 2)
{
uint16_t r = 0;
r = Wire.read();
r = Wire.read()<< 8;
Serial.println(r);
}
}
J'ai essayé tout un tas de code, sans meilleur résultat...
Merci pour votre aide.
r = Wire.read()<< 8;
ne serait pas plutôt
r += Wire.read()<< 8;
sans ça, cette opération "écrase " la valeur de la précédente?
Je ne saurai faire avec un Raspberry, mais, entre 2 Arduino, j'échangerai plutôt une structure contenant les données ça facilite grandement la transmission et, surtout, la réception.
Donc en fait tu ne reçois pas les 2 octets en une fois mais en 2 fois donc cela vaut peut-être le coup d'utiliser available et de tester si tu as bien reçu 2 octets.
Ou alors cette ligne n'envoie pas 1 seul octet mais 2.
Bonjour,
Je reviens sur ce sujet car quand je réalise mes tests, avec un raspberry qui récupère une valeur, qui la convertie et qui la transmet en I2C vers l'arduino, ça fonctionne pendant environ 20secondes, puis coté raspberry j'ai le message d'erreur :
Traceback (most recent call last):
File "/home/pi/./speedsimulator.py", line 21, in <module>
bus.write_word_data(addr, 0, data, force=None) #ecriture et transmission de la valeur OCR1A
File "/home/pi/.local/lib/python3.9/site-packages/smbus2/smbus2.py", line 496, in write_word_data
ioctl(self.fd, I2C_SMBUS, msg)
OSError: [Errno 121] Remote I/O error
que je ne sais pas interpréter. Auriez vous une idée du pourquoi ?