Plop 
Bon j'en conclue qu'il me faut du câble blindé 
J'ai tout de même plusieurs questions :
- J'aimerais pouvoir gérer le temps en millis() et non avec delay() coté arduino, mais je n'ai pas vraiment réussi je dois m'embrouiller dans les ms et seconde.
- Je demande aux maîtres Jedi du C++, là, je peux attaquer maintenant les classes et fonctions, ou y a t'il quelque chose de mieux pour gérer tous ça ?
- Est il possible d'établir un canal pour l'envoie et un pour la réception, car actuellement si les deux se croisent ça merdouille.
- Est ce que je peux utiliser une adresse mémoire de Pi qu'Arduino puisse récupérer ??
Genre j'ai un pointeur sur un tableau qui doit passer par le buffer, ce tableau est donc une adresse mémoire, et dire à arduino qu'il récupère ce que contient l'adresse mémoire en question ?
Cela pourrait peut être m'éviter les embrouilles sur le flux, non ??
J'aurais surement d'autres questions, là je post au plus vite 
Petite avancé quand même :
Gcom.cpp
#include <iostream> //Permet d'utiliser In et Out du moniteur série
#include "rs232.h" //Librairie de communication RS232
using namespace std;
//Conseil : placez vos types du plus gros au plus petit selon les bytes
//Union pour envoyer nos types struct dans un tableau unsigned char
union COMM
{
//Structure pour l'émission
struct SEN
{
int intform ; //4 octet/bytes (32 bits) : -2 147 483 648 / +2 147 483 647
float floatform ; //4 octet/bytes (32 bits) : -3.4028235E+38 / +3.4028235E+38
short int shortintform ;//2 octet/bytes (16 bits) : -32 768 / +32 767
char charform ; //1 octet/bytes (8 bits) : -128 / +127
char charform2 ; //1 octet/bytes (8 bits) : -128 / +127
} dataSen;
//Structure pour la récepetion
struct REC
{
int intard; //4 octet/bytes (32 bits) : -2 147 483 648 / +2 147 483 647
float floatard; //4 octet/bytes (32 bits) : -3.4028235E+38 / +3.4028235E+38
short int shortintard; //2 octet/bytes (16 bits) : -32 768 / +32 767
char charard; //1 octet/bytes (8 bits) : -128 / +127
} dataRec;
//L'envoie et la réception sont dans des tableaux
//(sizeof) permet de récupérer la taille en byte de nos structures
unsigned char dataSend[sizeof (dataSen)];
unsigned char dataReceive[sizeof (dataRec)];
}piSend, piReceive;
int BUF_SIZE = sizeof (piSend.dataSend);
int BUF_SIZEREC = sizeof (piReceive.dataReceive);
int main()
{
//initisialisation de notre structure pour l'émission - dataSen
piSend.dataSen.intform = 123;
piSend.dataSen.floatform = 3.14;
piSend.dataSen.shortintform = 15210;
piSend.dataSen.charform = 70; //Code ascii 70 vaut F
piSend.dataSen.charform2 = 73; //Code ascii 73 vaut I
int cport_nr(0); // 0 = ttyS0
int bdrate(115200); // Baud
char mode []={'8','N','1',0}; // 8 data bits, no parity, 1 stop bit
//Si toutes les conditions recquises sont bonnes, on ouvre le port de communication
if (RS232_OpenComport(cport_nr, bdrate, mode))
{
cout <<"Ne peut pas ouvrir le port com. \n";
return 0;
}
cout << "----- \n";
cout << "Raspberry connecté : \n";
cout << "----- \n";
while(1)
{
//Envoie un tableau de données dataSend au format unsigned char dans le buffer à la pi
//Via la RS232
RS232_SendBuf(cport_nr, piSend.dataSend, BUF_SIZE);
cout << "----- \n";
//Récupére un tableau de données de la pi dans le buffer envoyé d'Arduino
//Via la RS232
int n = RS232_PollComport(cport_nr, piReceive.dataReceive, BUF_SIZEREC);
if (n > 0)
{
piReceive.dataReceive[n] = 0;
cout <<"Pi reçoit d'Arduino : "<< n <<" bytes. \n";
}
//On regarde ce qu'Arduino nous envoit
cout << "Pi reçoit d'Arduino le short int : " << piReceive.dataRec.intard <<" \n";
cout << "Pi reçoit d'Arduino le float : " << piReceive.dataRec.floatard <<" \n";
cout << "Pi reçoit d'Arduino le short int : " << piReceive.dataRec.shortintard <<" \n";
cout << "Pi reçoit d'Arduino le char : " << piReceive.dataRec.charard <<" \n";
cout << "Taille sizeof piReceive.dataReceive : " << sizeof(piReceive.dataRec) << " octets/bytes. \n";
cout << "\n";
usleep(100000); //usleep est en ms 100000 pause pour 100 milliSeconds
}
return 0;
}
Arduino envoit :
//Union pour envoyer nos types struct dans un tableau unsigned char
union COMM{
//Structure pour l'émission
struct SEN
{
//taille de notre structure 11 bytes
long ardlong ; //4 octet/bytes (32 bits) : -2 147 483 648 / +2 147 483 647
float ardfloat; //4 octet/bytes (32 bits) : -3.4028235E+38 / +3.4028235E+38
int ardint; //2 octet/bytes (16 bits) : -32 768 / +32 767
byte ardchar; //1 octet/bytes (8 bits) : -128 / +127
}dataSen;
//Structure pour la récepetion
struct REC
{
//taille de notre structure 12 bytes
long intform ; //4 octet/bytes (32 bits) : -2 147 483 648 / +2 147 483 647
float floatform ; //4 octet/bytes (32 bits) : -3.4028235E+38 / +3.4028235E+38
int shortintform ; //2 octet/bytes (16 bits) : -32 768 / +32 767
byte charform ; //1 octet/bytes (8 bits) : -128 / +127
byte charform2 ; //1 octet/bytes (8 bits) : -128 / +127
}dataRec;
//L'envoie et la réception sont dans des tableaux
//(sizeof) permet de récupérer la taille en byte de nos structures
unsigned char dataSend[sizeof dataSen];
unsigned char dataRece[sizeof dataRec];
}ardSend, ardRec;
void setup(){
Serial.begin (115200);
//Initisalisation de notre structure dataSen
ardSend.dataSen.ardlong = 1234567891;
ardSend.dataSen.ardfloat = 128.354;
ardSend.dataSen.ardint = 16569;
ardSend.dataSen.ardchar = 120;
}
void loop() {
//Envoie un tableau de données dataSend au format unsigned char dans le buffer à la pi
Serial.write (ardSend.dataSend, sizeof ardSend.dataSend);
delay(100);
}
Pi reçoit :
-----
Raspberry connecté :
-----
-----
Pi reçoit d'Arduino : 7 bytes.
Pi reçoit d'Arduino le short int : 1124096672
Pi reçoit d'Arduino le float : 1.10435e-38
Pi reçoit d'Arduino le short int : 0
Pi reçoit d'Arduino le char :
Taille sizeof piReceive.dataReceive : 12 octets/bytes.
Pour l'envoi le Gcom.cpp ne change pas, vous retrouverez les valeurs initialisés dans le code :
//initisialisation de notre structure pour l'émission - dataSen
piSend.dataSen.intform = 123;
piSend.dataSen.floatform = 3.14;
piSend.dataSen.shortintform = 15210;
piSend.dataSen.charform = 70; //Code ascii 70 vaut F
piSend.dataSen.charform2 = 73; //Code ascii 73 vaut I
Arduino reçoit :
//Union pour envoyer nos types struct dans un tableau unsigned char
union COMM{
//Structure pour l'émission
struct SEN
{
//taille de notre structure 11 bytes
long ardlong ; //4 octet/bytes (32 bits) : -2 147 483 648 / +2 147 483 647
float ardfloat; //4 octet/bytes (32 bits) : -3.4028235E+38 / +3.4028235E+38
int ardint; //2 octet/bytes (16 bits) : -32 768 / +32 767
byte ardchar; //1 octet/bytes (8 bits) : -128 / +127
}dataSen;
//Structure pour la récepetion
struct REC
{
//taille de notre structure 12 bytes
long intform ; //4 octet/bytes (32 bits) : -2 147 483 648 / +2 147 483 647
float floatform ; //4 octet/bytes (32 bits) : -3.4028235E+38 / +3.4028235E+38
int shortintform ; //2 octet/bytes (16 bits) : -32 768 / +32 767
byte charform ; //1 octet/bytes (8 bits) : -128 / +127
byte charform2 ; //1 octet/bytes (8 bits) : -128 / +127
}dataRec;
//L'envoie et la réception sont dans des tableaux
//(sizeof) permet de récupérer la taille en byte de nos structures
unsigned char dataSend[sizeof dataSen];
unsigned char dataRece[sizeof dataRec];
}ardSend, ardRec;
void setup(){
Serial.begin (115200);
//Initisalisation de notre structure dataSen
ardSend.dataSen.ardlong = 1234567891;
ardSend.dataSen.ardfloat = 128.354;
ardSend.dataSen.ardint = 16569;
ardSend.dataSen.ardchar = 120;
}
void loop() {
//Récupére un tableau de données de la pi dans le buffer que l'on initialise dans dataRec
while (Serial.available() > 0) { //if any data available
Serial.readBytes (ardRec.dataRece, sizeof ardRec.dataRec);
Serial.println ("Arduino reçoit Pi ");
Serial.print ("Intform : ");
Serial.println (ardRec.dataRec.intform);
Serial.print ("Floatform : ");
Serial.println (ardRec.dataRec.floatform);
Serial.print ("Shortintform : ");
Serial.println (ardRec.dataRec.shortintform);
Serial.print ("Charform : ");
Serial.println (ardRec.dataRec.charform);
Serial.print ("Charform2 : ");
Serial.println (ardRec.dataRec.charform2);
Serial.print ("-----");
}
delay(100);
}
Arduino reçoit (console) :
-----Arduino reçoit Pi
Intform : 123
Floatform : 3.14
Shortintform : 15210
Charform : 70
Charform2 : 73