Bonjour !
Un module (GPS + boussole électronique) envoie par Xbee des informations à une clé USB XStick que j'essaye de récupérer avec un programme en C. Voici mon programme :
Les fonctions :
Le main() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 #include <sys/fcntl.h> #include <unistd.h> #include <errno.h> #include <string.h> #include "serial_port.h" int openSerialPort(const char* DEVICE_PORT) { struct termios options; int file = open(DEVICE_PORT, O_RDONLY | O_NOCTTY | O_NDELAY); if(file == -1){perror("Unable to open the serial port\n");} else {printf("Serial port open successful !\n");} tcgetattr(file, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); options.c_cflag |= (CLOCAL | CREAD); options.c_cflag |= PARENB; options.c_cflag |= PARODD; options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; return file; }; bool readMessage(int file, char* message, int nbCharToRead) { int i; char buf[100]; if (file != -1) { i = 0; if (read(file, &buf, sizeof(buf)) > 0) { while(buf[i]!='\n'|| i<nbCharToRead-1) //saut à la ligne ou depassement du nb de char { message[i] = buf[0]; //remplissage de message char par char i++; } message[i] = '\0'; printf("message : %c", message[i]); return true; } else { printf("Reception error !\n"); return false; } } return false; };
J'aimerai obtenir, à chaque appel de la fonction readMessage (que je mettrai plus tard dans une boucle ou Thread), voir une des lignes envoyées par le module. Pour info, un message entier envoyé par le module est constitué de 2 ou 3 lignes (selon que le GPS est actif ou non), typiquement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 int main() { int file; int nbCharToRead = 50; //Taille maximale d'une ligne (toujours < 50 caracteres) bool retRead; char message[nbCharToRead]; const char* DEVICE_PORT = "/dev/ttyUSB1"; //=================================== OPEN SERIAL PORT ===================================// printf("Open serial port ... "); file = openSerialPort(DEVICE_PORT); //=================================== READ SERIAL PORT ===================================// printf("Read serial port ...\n\n"); retRead = readMessage(file, message, nbCharToRead); //====================================== CLOSE FILE =====================================// close(file); printf("Serial port closed\n"); }
Seulement, je j'obtiens sur le prompteur à l'exécution, soit "message : " (le message est vide), soit "Reception error ! Serial port closed" ... Bref ça marche pas du tout !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Heading: 274 Tilt: 7 Roll: -11 LAT=48.715961 LON=2.203730 SAT=5 PREC=300 CHARS=32386 SENTENCES=275 CSUM ERR=1
Pouvez-vous m'aider svp ?
Merci d'avance !
Partager