Jak przesyłać liczby z przecinkiem (float) przez I2C pomiędzy Raspberry Pi (master) i Arduino (slave)?
Robię pewien projekt w C i nie mam do dyspozycji Pythona (tam jest struct dzięki czemu można sobie sprawnie poukładać bajty w liczbę). Korzystam z tego: https://projects.drogon.net/raspberry-pi/wiringpi/i2c-library/ Mogę sobie przesyłać od 0 do 255 za pomocą wiringPiI2CRead, ale przy większych wartościach i funkcji wiringPiI2CReadReg8 dostaję zawsze tę samą liczbę (38792).
Po stronie Arduino przesyłam to tak (array z bajtów, długość to 4 bo float wymaga 4 bajtów):
void sendData(){ Wire.write((byte*) &floatNumber, 4); } Po stronie Raspberry to działa dla pojedynczego bajta (ale potrzebuję arraya z 4 bajtów):
@TheDoom: Nie znam się, więc kombinowałbym inaczej. Jak masz 3,14, to przemnóż to przez 100 i prześlij sobie 314. Po odbiorze dzielisz przez 100 i masz z powrotem floata.
@Majsterkowo: kombinowałem tak, ale to nadal wymaga transmisji więcej niż 1 bajta, a nie umiałem jakoś tego zaprogramować. Zastąpiłem to... transmisją przez USB. ( ͡°͜ʖ͡°)
Jak przesyłać liczby z przecinkiem (float) przez I2C pomiędzy Raspberry Pi (master) i Arduino (slave)?
Robię pewien projekt w C i nie mam do dyspozycji Pythona (tam jest struct dzięki czemu można sobie sprawnie poukładać bajty w liczbę).
Korzystam z tego: https://projects.drogon.net/raspberry-pi/wiringpi/i2c-library/
Mogę sobie przesyłać od 0 do 255 za pomocą wiringPiI2CRead, ale przy większych wartościach i funkcji wiringPiI2CReadReg8 dostaję zawsze tę samą liczbę (38792).
Po stronie Arduino przesyłam to tak (array z bajtów, długość to 4 bo float wymaga 4 bajtów):
void sendData(){
Wire.write((byte*) &floatNumber, 4);
}
Po stronie Raspberry to działa dla pojedynczego bajta (ale potrzebuję arraya z 4 bajtów):
int fd;
int data;
wiringPiSetup();
fd=wiringPiI2CSetup(0x04);
data=wiringPiI2CRead(fd);
ui->lcdNumber->display(data);
Opisałem swój problem też tutaj: https://stackoverflow.com/questions/48112530/how-to-read-a-float-value-in-c-on-raspberry-pi-3b-from-arduino-slave-via-i2c - ale wysyłanie Stringa znowu wymaga przesyłania więcej niż 1 bajta przez I2C, a ja nie wiem jak zaprogramować po obu stronach przesyłanie więcej niż 1 bajta.
Z tego co widzę to ktoś chyba z sukcesem ogarnął to tu i tu (z Pythonem):
https://gist.github.com/gileri/5a9285d6a1cfde142260
https://stackoverflow.com/questions/45774308/how-i-write-multiple-float-data-to-arduino-from-rpi-as-master-via-i2c