Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
[第二期 空气质量分析仪]第2周作业
发布于 2019-09-03 20:57:48 浏览:1013
订阅该版
* 本帖最后由 beebird 于 2019-9-3 20:59 编辑 * 废话这周的任务不是特别复杂,简单总结为两点,一是写两个驱动,二是创建驱动对应的测试程序,以线程的形式来测试传感器的驱动程序。以前做过驱动的项目,每次调驱动感觉都会出点障碍,这次也不例外,pm2.5的驱动调了几天就是出不来数据,没办法只好换个类似的mq2烟雾传感器的驱动做了一下,这两者本质上都是adc的使用,所以暂时就拿他来做本周的任务吧。等一起学习的兄弟帮我测完是不是我的传感器坏了的原因,再决定是否再买个pm2.5的传感器。由于这周的工作或者说是本月的工作如潮水一般的汹涌,只好赶紧先把作业先交了,后面又什么其他进展,就写续集吧:L 学习rt-thread第二周完成了以下实践。 **1.pm2.5的驱动调** 我使用的传感器是gp2y1014auof,这个传感器的工作原理是在其中间有一个大洞,空气可以自由流过,它里面邻角位置放着红外发光二极管和光电晶体管,红外发光二极管定向发送红外,当空气中有微粒阻碍红外时,红外线发送漫反射,光电晶体管接收到红外,所以信号输出引脚电压发送变化。 所以我们就得做两个工作,一是给红外发光二极管发一定时序的脉冲,二是用stm32的adc测出传感器输出引脚的电压。 这个驱动的调试要注意几点,1)线序不要接错2)引脚的连接要紧一些3)给红外发光二极管发一定时序的脉冲一定要正确,最好用示波器看一下4)adc要正常让他工作起来 在解决低4)时碰到了点问题,就是在家里做成功了,用办公室电脑编译成功下载测试时,从控制台报出find不到adc设备的错误,一起学习的一个小伙伴认为是时钟配置问题,我是把stm32CubeMX和keil升级后解决的问题。我估计我们出的问题类似。 采集部分的代码放出来给大家看一下,有什么问题请大家指正 ```float pm25_sample(void) { /* retÄ¿Ç°Ö»Êǵ÷ÊÔÓã¬Ã»ÓÐ×÷Ϊ·µ»ØÖµ·µ»ØÐ */ rt_err_t ret = RT_EOK; /* ʹÄÜÉ豸 */ ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); /* PM25_LED_PINÉèÖÃΪLOWµçƽ*/ rt_pin_write(PM25_LED_PIN, PIN_LOW); /* ÑÓʱ280um */ rt_hw_us_delay(280); /* ¶ÁÈ¡²ÉÑùÖµ */ voMeasured = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); //rt_kprintf("the voMeasured is :%d
", voMeasured); /* ÑÓʱ40um */ rt_hw_us_delay(25); /* PM25_LED_PINÉèÖÃΪHIGHµçƽ*/ rt_pin_write(PM25_LED_PIN, PIN_HIGH); rt_thread_mdelay(5); /* ´«¸ÐÆ÷µÄ¹©µçΪ5-7V£¬¶øÊä³ö×î´ó²»µ½5V£¬¶østm32µÄ²Î¿¼µçѹֻÓÐ3.3V£¬ÕâÖÖÇé¿öÈçºÎ´¦Àí£¿ */ calcVoltage = voMeasured * (3.3 / 4096); /* µ¥Î»Îªug/m3 */ dustDensity = 5000*calcVoltage/29 - 3000/29; rt_kprintf("the voMeasured is :%d
", voMeasured); /* if (dustDensity < 0) { dustDensity = 0.00; } */ /* ¹Ø±ÕͨµÀ */ //ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL); return dustDensity; }``` 2.线程的创建 这一步没什么问题,比较简单,大家照着官网文档来就没什么问题了。觉得给我们指导的杨老师在任务文档中提出的要求很好,驱动、测试驱动的线程规划的很清晰。这一点值得我学习。实验中,我mq2的线程是按照文档要求做的,dht11的线程还是用的下载例程的方式,这也告诉我们创建线程方法的多样性。直接给出代码 ```/* mq2Ï̵߳ÄÈë¿Ú²ÎÊý */ /* ·µ»ØÖµ¼°²ÎÊýÒªÓëÏ̴߳´½¨º¯ÊýµÄ²ÎÊýÒ»Ö */ static void mq2_entry(void *parameter) { float mq2_data = 0; rt_uint16_t mq2_data_conversion = 0; while (1) { /* mq2Ï̴߳òÓ¡mq2´«¸ÐÆ÷²É¼¯µÄÑÌÎíÊý¾Ý ,µÍÓÅÏȼ¶ÔËÐÐ */ mq2_data = mq2_read_smoke(); mq2_data_conversion = (rt_uint16_t)(mq2_data *100); rt_kprintf("mq2 smoke sensor data is: %d.%02d
", mq2_data_conversion / 100, mq2_data_conversion % 100); rt_thread_mdelay(500); } } void mq2_init(void) { ret= mq2_hw_init(); tid1 = rt_thread_create("thread1", mq2_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); if (tid1 != RT_NULL) rt_thread_startup(tid1); }``` 3.贴出任务完成的截图吧 第二周任务完成心得,哪一天调外设的驱动毫无压力的时候就是功力又进一步的时候了。O(∩_∩)O~ ![作业2-1.jpg](https://oss-club.rt-thread.org/uploads/201909/03/205906v5ftf3gdfftqlflg.jpg) ![作业2-2.jpg](https://oss-club.rt-thread.org/uploads/201909/03/205906lxe1lzs18oqzexte.jpg)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
1k
关于作者
beebird
这家伙很懒,什么也没写!
提问
3
回答
16
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部