Bonjour,
Je viens de terminer les examens avec mes élèves, et il s'est passé un truc que je n'avais pas remarqué chez moi: notre programme ne semble pouvoir communiquer avec l'Arduino que
lorsque le "Serial Monitor" est activé :{
C'est une de mes élèves qui me l'a fait remarquer ^^
Pendant mes tests j'utilisais effectivement le "Serial Monitor" pour "savoir" ce que faisait l'Arduino de son côté...
Le programme qui communique avec l'Arduino est écrit en C.
Voici la fonction qui "configure" le port série, je ne suis pas certain des paramètres utilisés, au vu de ce qu'il nous arrive.
En fouinant dans les extraits de code fonctionnels (et éprouvés ^^) je suis retombé sur ceci que j'avais oublié de communiquer à mes élèves qui solutionnerait le soucis :{ comme quoi écrire sur un forum et rassembler ses mémoires des fois est fort utile ^^
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 ConfigureArduino(char *pFichier,speed_t vitesse) { int portdesc; // descripteur de l'Arduino struct termios options; // caractéristiques d'un terminal portdesc=open(pFichier, O_RDWR | O_NOCTTY | O_NONBLOCK); // Ni la lecture ni l'écriture ne seront bloquantes if(portdesc>0) { fcntl(portdesc,F_SETFL,0); // réinitialiser le port série // Il faut que les deux équipements fonctionnent à la même "vitesse"... tcgetattr(portdesc, &options); cfsetispeed(&options, vitesse); cfsetospeed(&options, vitesse); options.c_cflag |= (CLOCAL | CREAD); tcsetattr(portdesc, TCSANOW, &options); } return portdesc; }
Du coup... voilà je pense avoir résolu le soucis ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int RTS_flag; RTS_flag = TIOCM_DTR; // l'Arduino utilise le DTR (Date Transmit Ready) ioctl(portdesc,TIOCMBIS,&RTS_flag);
Oui bin non c'est pas gagné :{ (après 20 minutes d'essais)
Du coup je suis toujours dans l'expectative: d'où vient le fait que l'Arduino semble ne pas établir de connexion série sauf quand le "Serial Monitor" est ouvert ?
Voici la partie setup de l'Arduino
et j'utilise la fonction Serial.readString() dans la fonction loop().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Serial.begin(115200); digitalWrite(LED_BUILTIN, LOW); while(Serial.available()) Serial.read(); // vider le "buffer" Serial.flush();
Partager