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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
int main(void)
{
int port_serie;
struct termios options;
int reception;
char buffer[16] = "";
char data[] = ":0103070D005098\r\n"; //message que tu veux envoyer
port_serie = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);//lecture et ecriture | pas controlling terminal | ne pas attendre DCD
//cas d'erreur d'ouverture
if(port_serie < 0)
{
perror("Erreur d'ouverture du port serie");
exit(-1);
}
else
{
printf("Port serie numero %d bien ouvert. \n", port_serie);
//chargement des données
tcgetattr(port_serie, &options);
//B115200 bauds
cfsetospeed(&options, B115200);
options.c_cflag |= (CLOCAL | CREAD);//programme propriétaire du port
//structure en 8N1 !!
options.c_cflag &= ~PARENB; //pas de parité
options.c_cflag &= ~CSTOPB; // 1 bit de stop
options.c_cflag &= ~CSIZE; //option a 0
options.c_cflag |= CS8; //8 bits
tcsetattr(port_serie, TCSANOW, &options); //enregistrement des valeurs de configuration
printf("Configuration OK strcuture en 8N1 !. \n");
// Envoie de donnees.
printf("Envoie des donnees en cours ... \n");
if (write(port_serie, data, 17) < 0){perror("ERROR\n");}
printf("Envoie Termine. \n");
//printf("Attente. \n");
//sleep(2);
//printf("Fin Attente. \n");
// Lecture des donnees.
printf("Lecture des donnees en cours ... \n");
fcntl(port_serie,F_SETFL,10);//mode bloquant pour la fonction read() si aucun caractere dispo, programme attend
reception=read(port_serie,buffer,16);//buffer contitendra les données, 16 est le nombre d'octets a copier dans cet espace
printf("message recu : %s\n",buffer);
if (reception == -1)
printf("Erreur lecture port serie\n");
printf("Reception finie.\n" );
}
close(port_serie);//fermeture du port serie
return 0;
} |
Partager