Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
空气质量分析仪 第3周作业
发布于 2019-11-02 21:09:24 浏览:1365
订阅该版
这次真是怀疑人生了,怎一个 了得。也不知道怎么过来的。 先是,标志位,设了个int,没有传递成功。后来仔细看要求,参考帖子,设置了函数入口参数惨传递成功。 事件。1个事件也可以的! PM25在读取数据时,同步led闪烁。老是显示,event多重定义了,后来经高人指路,加了extern. 搞定。 邮件,本来应该是最难的,可是模块相对独立。参考了。后面我还要完善。 我还买了个甲醛的,都没来及弄。一定补上来。 这个3周作业可以吗? 我在帖子回复里,贴代码。。。。。。 ![333.png](https://oss-club.rt-thread.org/uploads/201911/02/210918ms20be0z0hgl9hjg.png)
查看更多
5
个回答
默认排序
按发布时间排序
iseariver
2019-11-02
这家伙很懒,什么也没写!
int main(void) { key_init(); led_init(); //temp_humi_init(); pm25_init(); mylog_init(); } —————————————————————— led_alert.c static rt_thread_t tid1; struct rt_event led_event; /* led 初始化 */ void led_init(void) { rt_pin_mode(LED0_PIN,PIN_MODE_OUTPUT); /* led脚 可以输出 */ rt_pin_write(LED0_PIN,PIN_LOW); /* led脚 低 */ rt_pin_write(LED0_PIN, PIN_HIGH); /* 初始化位高电平,不亮*/ rt_pin_write(LED1_PIN, PIN_HIGH); rt_err_t result; result = rt_event_init(&led_event,"event",RT_IPC_FLAG_FIFO); /*创建 事件集 */ if (result != RT_EOK) { rt_kprintf("init event failed.\n"); } tid1 = rt_thread_create("led_tid", led_entry, RT_NULL, 256, RT_MAIN_THREAD_PRIORITY+1, 20 ); if(tid1!= RT_NULL) rt_thread_startup(tid1); } /* led0亮 */ void led_on(int ee) { switch(ee) { case 0: rt_pin_write(LED0_PIN, PIN_LOW); break; case 1: rt_pin_write(LED1_PIN, PIN_LOW); break; default: break; } } /* led0 灭 */ void led_off(int ee) { switch(ee) { case 0: rt_pin_write(LED0_PIN, PIN_HIGH); break; case 1: rt_pin_write(LED1_PIN, PIN_HIGH); break; default: break; } } /* led0闪烁 */ void led0_blink(void) { led_on(0); rt_thread_mdelay(500); led_off(0); rt_thread_mdelay(500); } /* led1闪烁 */ void led1_blink(void) { led_on(1); rt_thread_mdelay(100); led_off(1); rt_thread_mdelay(100); } /* led0闪烁入口函数 */ void thread_led0_blink_entry(void *parameter) { rt_uint8_t i; for(i = 0; i<2; i++) { led_on(0); rt_thread_mdelay(100); led_off(0); rt_thread_mdelay(100); } } /* led闪烁入口函数 */ void thread_led1_blink_entry(void *parameter) { rt_uint8_t i; for(i = 0; i<2; i++) { led_on(1); rt_thread_mdelay(100); led_off(1); rt_thread_mdelay(500); } } /* LED灯事件集判断 */ static void led_entry(void*parameter ) { rt_uint32_t e; while(1) { if(rt_event_recv(&led_event, EVENT_FLAG_PM25, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR , RT_WAITING_FOREVER, &e) == RT_EOK) { if(e & EVENT_FLAG_PM25) led0_blink(); rt_thread_mdelay(500); // if(e & EVENT_FLAG_HUMI) // thread_led1_blink_entry(RT_NULL); } } }
iseariver
2019-11-02
这家伙很懒,什么也没写!
pm25.c extern struct rt_event led_event; static rt_uint8_t PM25_ON_OFF; static rt_thread_t pm25_tid = RT_NULL; void pm25_entry(void *parameter) { float dens = 0; rt_thread_mdelay(500); while(1) { if(PM25_ON_OFF) { dens = gp2y_read_pm25(); if(dens==0) { led_on(0); } else { mylog("GP2Y",dens); rt_event_send(&led_event,EVENT_FLAG_PM25) ; rt_thread_mdelay(500);} } } } /* 函数 */ void pm25_init(void) { // gp2y_hw_init(); pm25_tid = rt_thread_create("pm25_tid", pm25_entry, RT_NULL, 256, RT_MAIN_THREAD_PRIORITY+1 , 20 ); if(pm25_tid != RT_NULL) rt_thread_startup(pm25_tid); } void key0_PM25_contr(rt_uint8_t value) { PM25_ON_OFF = value; if(!PM25_ON_OFF) led_off(0); }
iseariver
2019-11-02
这家伙很懒,什么也没写!
int key0odd=0; void key_init(void) { rt_err_t status; /* 初始化key0为上拉输入*/ rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT_PULLUP); rt_pin_mode(KEY1_PIN, PIN_MODE_INPUT_PULLUP); /* 绑定中断,边沿触发模式,回调函数为key0_cb */ status = rt_pin_attach_irq(KEY0_PIN, PIN_IRQ_MODE_FALLING, key0_cb, RT_NULL); if(status != RT_EOK) { rt_kprintf("attach_irq key0_cb error\n"); return; } /* 绑定中断,边沿触发模式,回调函数为key1_cb */ /*status = rt_pin_attach_irq(KEY1_PIN, PIN_IRQ_MODE_FALLING, key1_cb, RT_NULL); if(status != RT_EOK) { rt_kprintf("attach_irq key1_cb error\n"); return; }*/ /* 使能中断 */ rt_pin_irq_enable(KEY0_PIN, PIN_IRQ_ENABLE); rt_pin_irq_enable(KEY1_PIN, PIN_IRQ_ENABLE); rt_kprintf("key irq init complete\n"); rt_thread_mdelay(500); } /* key0回调函数 */ void key0_cb(void *args) { if (key0odd &0x01) { key0_PM25_contr(0); key0odd=1; rt_kprintf("key0 odd.\n"); rt_thread_mdelay(500); } else { key0_PM25_contr(1); key0odd=0; rt_kprintf("key0 even..\n"); rt_thread_mdelay(500);}; }
iseariver
2020-04-28
这家伙很懒,什么也没写!
//51key.c回调函数的使用 一会把头文件写过来。 #include "51key.h" void key_cb(void *args) { rt_thread_mdelay(50); if(rt_pin_read(k1_pin)==PIN_HIGH) { rt_kprintf(" You have kit a K 1 !"); } else { rt_kprintf(" You have done nothing"); } } void key_init(void) { rt_err_t status; rt_pin_mode(k1_pin, PIN_MODE_INPUT_PULLUP); status=rt_pin_attach_irq(k1_pin,PIN_IRQ_MODE_RISING,key_cb,RT_NULL); if (status!=RT_EOK) { rt_kprintf("attach irq error \n"); } rt_pin_irq_enable(k1_pin,PIN_IRQ_ENABLE); rt_thread_mdelay(3000); } —————————————————————————————— #ifndef APPLICATIONS_51KEY_H_ #define APPLICATIONS_51KEY_H_ //包含头文件 743 #include
#include
#include
//类型定义 //宏定义 #ifndef k1_pin #define k1_pin GET_PIN(C,13) #endif //扩展变量 //函数声明 void key_init(void); //void key_cb(void *args); #endif /* APPLICATIONS_51KEY_H_ */
iseariver
2020-04-28
这家伙很懒,什么也没写!
写了一个串口输入,另一个串口输出的小程序。记录下 // 实现 从一个口接收到数据,产生一个信号发令, 通过另一个口,把数据发出来。中间暂存 的数据 放在? #include "51uart.h" //接收信号量 static struct rt_semaphore rx_sem; static rt_device_t serial,serial444; //接收数据回调函数 static rt_err_t uart_input(rt_device_t dev, rt_size_t size) { //串口接收到数据后产生中断,调用此回调函数,然后发送接收信号 rt_sem_release(&rx_sem); return RT_EOK; } static void serial_thread_entry(void *parameter) { char ch; while(1) { //从串口读取一个字节的数据,没有读取到则等待接收信号量 while(rt_device_read(serial,-1,&ch,1)!=1) { //阻塞等待接收信号量,等到信号量后再次读取数据 rt_sem_take (&rx_sem, RT_WAITING_FOREVER); } //读取到的数据通过串口错位输出 //ch=ch+1; rt_device_write(serial444, 0, &ch, 1); } } void uart_51(void) { //rt_err_t ret = RT_EOK; char uart_name[RT_NAME_MAX]; //8个最多的串口数量 char str[] = "HELLO sir!!!\r\n"; //字符数组,存储 //查找系统中的串口设备 serial = rt_device_find("uart1"); serial444=rt_device_find("uart2"); if (!serial) {rt_kprintf("find %s faild!! \n", uart_name); } //return RT_ERROR; //初始化信号量 rt_sem_init(&rx_sem,"rx_sem",0,RT_IPC_FLAG_FIFO); //以中断接收 及 轮询发送模式打开串口设备 rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); //设置接收回调函数??可以发送了! rt_device_set_rx_indicate(serial, uart_input); //发送字符串 rt_device_open(serial444, RT_DEVICE_FLAG_INT_RX); rt_device_write (serial444,0,str,(sizeof(str)-1)); //创建serial 线程 rt_thread_t thread=rt_thread_create("serial",serial_thread_entry,RT_NULL,1024,25,10); //创建成功则启动线程 if (thread != RT_NULL) { rt_thread_startup(thread); } // else { // ret=RT_ERROR; // } //return ret; }
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
iseariver
这家伙很懒,什么也没写!
提问
7
回答
13
被采纳
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
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
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
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
15
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部