Ah ok merci
Donc me suis "inspiré" de ta ligne et je reçois maintenant quelque chose !!!!
C'est pas vraiment c'que j'attenfais mais c'est toujours ça.
Voila mon programme en integrale si tu veux y comprendre un peu mieux :
fichier robot.h
using namespace std;
class robot
{
public:
void InitialisationLiaisonSerie ();
void EnvoieTrame ();
void ReceptionTrame ();
};
fichier main.cpp
#include <stdio.h>
#include "robot.h"
using namespace std;
/************* Méthode principale *************/
int main()
{
/*definition de l'instanciation*/
robot monRobot;
/*Appel des methodes*/
monRobot.InitialisationLiaisonSerie();
monRobot.EnvoieTrame();
}
fichier robot.cpp
/************************************************************************
* compilation : g++ -o robot robot.cpp main.cpp *
************************************************************************/
#include <stdio.h>
#include <termios.h>
#include <sys/fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include "robot.h"
using namespace std;
/************* Methode InitialisationLiaisonSerie *************/
void robot::InitialisationLiaisonSerie()
{
int fichier;
struct termios termios_p;
char modeLie[5]="L \n";
/* Ouverture de la liaison serie */
if ((fichier=open("/dev/ttyS1",O_RDWR)) == -1 )
{perror("open");exit(-1);}
/* Lecture des parametres courants */
tcgetattr(fichier,&termios_p);
/* On ignore les BREAK et les caracteres avec erreurs de parite */
termios_p.c_iflag = IGNBRK | IGNPAR;
/* Pas de mode de sortie particulier */
termios_p.c_oflag = 0;
/* Liaison de 9600 bps, 8 bits de donnees, pas de parité (1 bit de stop par defaut) */
termios_p.c_cflag = B9600 | CS8;
termios_p.c_cflag &= ~PARENB;
/* Mode RAW */
termios_p.c_lflag = ~ICANON;
/* 1 caractere suffit et données immediatement disponibles */
termios_p.c_cc[VMIN] = 0;
termios_p.c_cc[VTIME] = 1;
/* Sauvegarde des nouveaux parametres */
tcsetattr(fichier,TCSANOW,&termios_p);
/* Envoie du mode lié pour une utilisation manuel*/
if ((write(fichier, &modeLie, strlen(modeLie))) == -1 )
{perror("envoie trame");close (fichier); exit(-1);}
/* Fermeture */
close(fichier);
}
/************* Methode EnvoieTrame *************/
void robot::EnvoieTrame()
{
/* Declaration des variables*/
char trame[50];
char trameRecue[10];
int longueurTrame, fichier;
/*Ouverture du fichier (port COM1) en lecture/ecriture*/
if ((fichier=open("/dev/ttyS1",O_RDWR)) == -1 )
{perror("open");exit(-1);}
while(1)
{
/* Saisie trame */
printf("Entrez une trame : ");
scanf ("%s", &trame);
longueurTrame = strlen(trame);
/* Ajout de caracteres de fin de trame*/
trame[longueurTrame] = ' ';
trame[longueurTrame+1] = '\n';
trame[longueurTrame+2] = '\0';
/* Ecriture dans fichier (envoie sur liaison serie (port COM1)) */
if ((write(fichier, &trame, strlen(trame))) == -1 )
{perror("write"); close (fichier); exit(-1);}
/* Lecture dans fichier (reception sur liaison serie (port COM1)) */
if ((read (fichier, &trameRecue, 1)) == -1)
{perror("open"); close (fichier); exit(-1);}
printf ("trame recue: %02x %c \n\n", trameRecue, trameRecue);
}
close (fichier);
}
voila. Et donc le problème c'est que déjà à l'execution, quelque soit ce que je tape ça me renvoie toujours la même valeurs:
./robot
Entrez une trame : $
trame recue: fef317f0 ð
Entrez une trame : B+100:30
trame recue: fef317f0 ð
et si je relance l'execution ba ça m'affiche d'autre caractere:
./robot
Entrez une trame : B+100:30
trame recue: fef6a970 p
Entrez une trame : $
trame recue: fef6a970 p
Donc voilà quoi...