我想通过串口发送下一个命令“at”给我的gprs。 gprs应该回应“ok”,但我无法弄清楚下面的代码。 当我在gtkterm(在我的Debian中)“at”发送命令时,我按下输入gprs响应“ok” 没有问题,但在我的代码中有些问题是错误的。我以为这是\r
,但我不知道。通过串口向gprs写入命令C
新代码,但具有相同的结果:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <stdbool.h>
int main(int argc,char** argv)
{
char comando[]={'a','t','\r','\0'};
comunicacion(comando);
return EXIT_SUCCESS;
}
comunicacion(char data[])
{
struct termios tio;
struct termios stdio;
struct termios old_stdio;
int tty_fd;
unsigned char c ='d';
tcgetattr(STDOUT_FILENO,&old_stdio);
printf("Please start with /dev/ttyS1 (for example)\n");
memset(&stdio,0,sizeof(stdio));
stdio.c_iflag=0;
stdio.c_oflag=0;
stdio.c_cflag=0;
stdio.c_lflag=0;
stdio.c_cc[VMIN]=1;
stdio.c_cc[VTIME]=0;
tcsetattr(STDOUT_FILENO,TCSANOW,&stdio);
tcsetattr(STDOUT_FILENO,TCSAFLUSH,&stdio);
fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK); // make the reads non-blocking
memset(&tio,0,sizeof(tio));
tio.c_iflag=0;
tio.c_oflag=0;
tio.c_cflag=CS8|CREAD|CLOCAL; // 8n1, see termios.h for more information
tio.c_lflag=0;
tio.c_cc[VMIN]=1;
tio.c_cc[VTIME]=5;
tty_fd=open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
cfsetospeed(&tio,B115200); // 115200 baud
cfsetispeed(&tio,B115200); // 115200 baud
tcsetattr(tty_fd,TCSANOW,&tio);
// enter \r
int i =0;
char caracter = ' ';
bool ciclo = true;
while(ciclo)
{
c=data[i];
i++;
if(c != '\0')
{
write(tty_fd,&c,1);
}
else
{
if(read(tty_fd,&c,1)>0)
{
write(STDOUT_FILENO,&c,1);
}
else
{
ciclo = false;
}
}
}
// if new data is available on the serial port, print it out
// if new data is available on the console, send it to the serial port
close(tty_fd);
tcsetattr(STDOUT_FILENO,TCSANOW,&old_stdio);
}
是准确,另外我有做纳米的睡眠,因为GPRS时发送的响应花了几纳秒响应。 – Premier