gpt4 book ai didi

c - Raspberry Pi RS232 读取 RFID 应答器

转载 作者:行者123 更新时间:2023-11-30 17:13:02 25 4
gpt4 key购买 nike

我想用 RFID 应答器开门。为此,我使用 Raspberry Pi 和带 UART 的 125Khz RFID 读取器。现在我编写了一个小 C 程序,用于设置 RS232('ttyAMA0')。这一切正常,我可以读取应答器,但它读取一些 sh**

这是我的代码:

char read_rfid(char* rfid_num)
{
fd_set input_fdset;
ssize_t length;
while(1)
{
FD_ZERO(&input_fdset);
FD_SET(fd,&input_fdset);

if(select(fd+1 ,&input_fdset, NULL,NULL,NULL)==-1)
perror("Terminal select() failed");

if(FD_ISSET(fd,&input_fdset))
{
if((length = read(fd,rfid_num,14)) ==-1)
perror("Terminal: read() failed");
else
{
write(STDOUT_FILENO,rfid_num,length);
return;
}
}
}

}
int setupRS232()
{
struct termios term_attr;

if((fd = open(RFID,O_RDWR)) == -1)
{
perror("Can't open Device");
return(1);
}
if(tcgetattr(fd,&term_attr) != 0)
{
perror("terminal: tcgetattr() failed");
return(1);
}
term_attr.c_cflag = BAUD|CS8|CRTSCTS|CLOCAL|CREAD;
term_attr.c_iflag = 0;
term_attr.c_oflag = 0;
term_attr.c_lflag = 0;
if(tcsetattr(fd,TCSAFLUSH,&term_attr) != 0)
{
perror("terminal: tcsetattr() failed");
return(1);
}
}
int main(int argc, char** argv)
{
MYSQL *mysql = NULL;
char rfid_num[14];
int i;

if(init_mysql(mysql) == 1)
return(1);
if(setupRS232() == 1)
return(1);

puts("Warte auf Transponder...");
read_rfid(rfid_num);
for(i=0;i<20;i++)
{
printf("%x\n",rfid_num[i]);
}
}

PS:抱歉我的英语不好

最佳答案

最小缓冲方法。您可能应该在返回有效之前检查缓冲区的内容(是否有最后的\n ?)

char read_rfid(char* rfid_num) {
fd_set input_fdset;
ssize_t length;
int done;

for(done=0; done < 14; ) {
FD_ZERO(&input_fdset);
FD_SET(fd,&input_fdset);

if(select(fd+1 ,&input_fdset, NULL,NULL,NULL) == -1) {
if (errno == EAGAIN) continue;
perror("Terminal select() failed");
return -1;
}

if(FD_ISSET(fd,&input_fdset)) {
if((length = read(fd,rfid_num+done,14-done)) == -1) {
if (errno == EAGAIN) continue;
perror("Terminal: read() failed");
return -1;
}
write(STDOUT_FILENO,rfid_num+done,length);
done += length;
}
}
return 0;
}

注意:我不明白为什么这个函数返回 char

关于c - Raspberry Pi RS232 读取 RFID 应答器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com