Hello again.
now i try a EayTransfer i2c library for my communication board to board.
I just modify samples codes
TX side:
#include <Wire.h>
#include <EasyTransferI2C.h>
const int analogInPin = A0;
int sensorValue = 0;
float outputValue = 0;
//create object
EasyTransferI2C ET;
struct SEND_DATA_STRUCTURE{
//put your variable definitions here for the data you want to send
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
int blinks;
int pause;
float test;
float out;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
//define slave i2c address
#define I2C_SLAVE_ADDRESS 9
void setup(){
Wire.begin();
//start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
ET.begin(details(mydata), &Wire);
pinMode(9, OUTPUT);
randomSeed(analogRead(0));
}
void loop(){
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 1023, -100, 100);
//this is how you access the variables. [name of the group].[variable name]
mydata.blinks = random(5);
mydata.pause = random(5);
mydata.test = -180.123451;
mydata.out = outputValue;
//send the data
ET.sendData(I2C_SLAVE_ADDRESS);
/* //Just for fun, we will blink it out too
for(int i = mydata.blinks; i>0; i--){
digitalWrite(9, HIGH);
delay(mydata.pause * 100);
digitalWrite(9, LOW);
delay(mydata.pause * 100);
}
*/
delay(500);
}
RX side:
#include <Wire.h>
#include <EasyTransferI2C.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(10, 4, 5, 6, 7, 8);
//create object
EasyTransferI2C ET;
struct RECEIVE_DATA_STRUCTURE{
//put your variable definitions here for the data you want to receive
//THIS MUST BE EXACTLY THE SAME ON THE OTHER ARDUINO
int blinks;
int pause;
float test;
float out;
};
//give a name to the group of data
RECEIVE_DATA_STRUCTURE mydata;
//define slave i2c address
#define I2C_SLAVE_ADDRESS 9
void setup(){
lcd.begin(16, 4);
Wire.begin(I2C_SLAVE_ADDRESS);
//start the library, pass in the data details and the name of the serial port. Can be Serial, Serial1, Serial2, etc.
ET.begin(details(mydata), &Wire);
//define handler function on receiving data
Wire.onReceive(receive);
pinMode(9, OUTPUT);
}
void loop() {
//check and see if a data packet has come in.
if(ET.receiveData()){
lcd.setCursor(0,1);
lcd.print(mydata.test,6);
lcd.setCursor(0,0);
lcd.print(mydata.out,6);
//this is how you access the variables. [name of the group].[variable name]
//since we have data, we will blink it out.
/*for(int i = mydata.blinks; i>0; i--){
digitalWrite(9, HIGH);
delay(mydata.pause * 100);
digitalWrite(9, LOW);
delay(mydata.pause * 100);
}*/
}
}
void receive(int numBytes) {}
So. I have mydata.test = -180.123451; on TX side but on RX side i see on LCD -180.123443
I try different test data, but every time i see lost of precision in last two or three sign.
How i can fix this trouble?
I need six signs after decimal points without any mismatch. This is need to me form transmit latitude and longitude in decimal format....
thanks.
Sorry my bad english