Je souhaite lire des publications en série à partir d'arduino. J'utilise ce code:Lecture de la série arduino sous linux en utilisant C
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
#include <sys/ioctl.h>
int main(){
char data[1024];
char dev[] = "/dev/ttyACM1";
int fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY);
fcntl(fd, F_SETFL, FNDELAY);
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag |= CS8;
options.c_cflag |= CS8;
options.c_cflag &= ~CRTSCTS;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
tcsetattr(fd, TCSANOW, &options);
ioctl(fd, TCFLSH, 2);
while(1){
read(fd, data, sizeof(data));
printf(data);
}
//write(fd, data, sizeof(data));
}
Mon arduino court sketch très simple:
int x;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("DO YOU HEAR ME ??");
delay(1000);
}
et la sortie de ce combinatin est que:
??OU HEAR ME ??
DO YOU HEAR ME ??
DO YOU HEAR ME ??
A¹þ
??OU HEAR ME ??
DO YOU HEAR ME ??
DO YOU HEAR ME ??
A¹þ
??OU HEAR ME ??
DO YOU HEAR ME ??
DO YOU HEAR ME ??
Ma question est de savoir comment faire pour sortir de le chaos. J'ai trouvé que ce problème se produit lorsque le tampon se termine et un nouveau commence (plus grand tampon moins de données indésirables) mais je ne peux pas avoir un tampon infini. En outre, il y a beaucoup de rebut quand il lit pour la première fois .. Y at-il un moyen de le synchroniser ou quelque chose?
(Aussi je ne suis pas anglais natif désolé pour les erreurs.)
Essayez de vérifier la valeur de retour de 'read'. –
@DavidCullen J'ai activé l'entrée cannonique et maintenant le junk ne se produit qu'au début de la ligne .. donc je suppose maintenant qu'il y a quelques bits supplémentaires sur l'entrée .. Mais je ne sais pas d'où (c'est comme 3 chars , 3 octets). – Kozlowsqi
note d'un côté, essayez d'augmenter le débit en bauds et voyez-vous cela résout le problème? – LethalProgrammer