资讯详情

嵌入式操作系统开发板中的串口编程——光敏电阻数据读取

嵌入式操作系统开发板中的串口编程-光敏电阻数据读取

嵌入式操作系统开发板通常有几个串口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数字开关量。

image-20220425191805742

以下是最终的测试程序。

#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)

标签: 光敏模块的电阻值

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台