嵌入式操作系统开发板中的串口编程-光敏电阻数据读取
嵌入式操作系统开发板通常有几个串口UART我们只需要在应用程序中打开驱动程序UART设备节点的初始设置UART,例如,设置停止位、数据位、奇偶校准位、波特率等Linux操作系统为我们提供了现成的结构体,我们只需调用结构体,设置相应的标志位。
以下程序首先初始化串口。
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> #include <linux/videodev2.h> #include <string.h> #include <stdlib.h> ///内核串口定义的头文件 #include <termios.h> int set_serial_uart(int serfd){ struct termios new_cfg;//termios结构体可以设置串口模式 struct termios old_cfg; if(tcgetattr(serfd, &old_cfg) != 0){ ////设置保存现有串口参数的设置 perror("tcgetattr failed\n"); return -1; } bzero(&new_cfg, sizeof(new_cfg)); new_cfg = old_cfg;///保留原始设置 cfmakeraw(&new_cfg); //设置波特率 cfsetispeed(&new_cfg, B115200) cfsetospeed(&new_cfg, B115200) //激活选项,c_cflag控制模式选项 //CLOCAL:忽略调节调节器线路状态 //CREAD:使用接收器 new_cfg.c_cflag |= CLOCAL | CREAD; //8位数据位 new_cfg.c_cflag &= ~CSIZE; new_cfg.c_cflag |= CS8; ///奇偶校准位 new_cfg.c_cflag &= ~PARENB;///无奇偶校准位 //1停止位 new_cfg.c_cflag &= ~CSTOPB; //清楚串口缓冲区 tcflush(serfd, TCIOFLUSH); new_cfg.c_cc[VTIME] = 0.//串口等待时间 new_cfg.c_cc[VMIN] = 1;///串口接收的最小字符 tcflush(serfd, TCIOFLUSH); ///串口设置使能 tcsetattr(serfd, TCSANOW, &new_cfg); }
我们已经完成了上面的串口UART在初始设置中,我们将使用串口和光敏电阻进行通信,实时阅读光敏电阻传感器反馈的数据,判断光敏电阻检测到的当前状态。
以下是我们使用的光敏电阻传感器模块。4线制,将VCC和GND接到开发板对应的串口,串口UART的RX接收光敏电阻DO引脚相当于直接接收DO数字开关量。
以下是最终的测试程序。
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <termios.h> #define DEVICE_LC "/dev/ttySAC3" ///这是我开发板的串口UART设备节点,把这里换成你的。 int set_serial_uart(int serfd); int lcflag = 0;//没有太阳 int light_control(){ int lightfd = 0; int ret = 0; char buf = 0; lightfd = open(DEVICE_LC, O_RDWR | O_NONBLOCK | O_NOCTTY); if(lightfd < 0){ printf("open serial failed!\n"); return -1; } set_serial_uart(lightfd); while(1){ ret = read(lightfd, &buf, sizeof(char)); if(buf == 0){ printf("没有阳光\n"); } else if(buf > 0){ printf("有阳光\n"); } tcflush(lightfd, TCIOFLUSH); sleep(1); } } int main(){ while(1){ light_control(); } return 0; }
随后,我将更新角度传感器的串口编程。角度传感器的数据读取需要您先发送读取数据指令,角度传感器将发送其实时数据,以及来回收发过程。
我是河边爬乌龟的小学生,在学习嵌入式软件开发的路上。欢迎大家互相交流。微信官方账号:河边爬乌龟。
角度传感器的串口编程、角度传感器的数据读取需要您先发送数据指令,然后角度传感器才能发送其实时数据。
我是河边爬乌龟的小学生,在学习嵌入式软件开发的路上。欢迎大家互相交流。微信官方账号:河边爬乌龟。
(群名:嵌入式软件开发交流群;群 号:1004953094)