我目前正在尝试编写一个通过串口获取值的小程序,并将其显示在屏幕上。我已经阅读了几个指南,主要是Link。
现在我遇到了一些麻烦,我认为是时机,所以我写了两段小代码,看看我是否可以缩小问题范围。
这里发布的代码是一个发件人和一个收件人,发件人只输出11:22,收件人应该收到这个并出现在屏幕上。现在它有点这样做,但是我得到了很多空行,还有一些跳过的字母。 我想由于缺乏知识,我可能会遗漏一些基本的东西:)
请参阅以下代码: 请注意,这是非常粗糙的&从gvim那里试图复制和粘贴的男人搞砸了.. :)
接收器:
#include <iostream>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <stdio.h>
using namespace std;
int main()
{
int fd; //desc for serial port.
char in[20]; //Char array for data from serial port
struct termios options;
tcgetattr(fd,&options);
cfsetispeed(&options,B19200);
cfsetospeed(&options,B19200);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
//options.c_cc[VMIN] = 5;
tcsetattr(fd,TCSANOW,&options);
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
cout << "Could not open port." << endl;
}
else
fcntl(fd,F_SETFL,0);
while(1){
read (fd, in,sizeof in);
cout << in << endl;
}
}
发信人: (与上述相同)
int main()
{
int fd;
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_oflag |=OPOST;
tcsetattr(fd,TCSANOW, &options);
fd = open("/dev/ttyS0",O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
cout << "Cannot open port" << endl;
}
else
fcntl(fd,F_SETFL,0);
while(1){
write(fd,"11:22\n",6);
usleep(1000); //Have a little break between the messages.. Prob not neceserry.
}
}