完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想计算红外传感器的移动平均值并设置 LED 的亮度,我从读取中获取输入值,我设置了一个定时器中断,每 100 毫秒触发一次,通过这个触发器我保存了读取将值转换为大小为 10 的数组。我的窗口大小为 10。当我运行时,这些值会非常快速地运行到无穷大。请帮忙。谢谢你。请检查移动平均线的定时器中断循环,我觉得那里有问题。
uint16_t读取; 浮动MA[10]; 浮点数=0; uint16_t我=0; uint16_tj =0; 而(1) { /* 用户代码结束 */ HAL_ADC_Start (&hadc1); HAL_ADC_PollForConversion (&hadc1, 100); 读 = HAL_ADC_GetValue (&hadc1); 如果(总和 >=2470 && 总和 <=2530){ __HAL_tiM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 1000); } 否则如果(总和>=999 && 总和<=2470){ __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 总和/5); } 否则如果(总和 >= 2530 && 总和 <= 4095){ __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, (5095-sum)/5);} } } } void HAL_TIM_PeriodElapsedCallback ( TIM_HandleTypeDef *htim){ 浮动窗口大小 = 10; 如果(htim->实例== TIM3){ MA[i%10] = 读取; 我=我+1; 对于(j=0;j<10;j++){ sum = sum + MA[j]/window_size; } } } |
|
相关推荐
1个回答
|
|
在计算运行平均值之前,您忘记将总和设置为 0。
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2655 浏览 1 评论
3216 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1790 浏览 1 评论
3619 浏览 6 评论
5997 浏览 21 评论
946浏览 4评论
1319浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
591浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1309浏览 3评论
1369浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 03:07 , Processed in 1.679900 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号