当前位置:首页 > 公众号精选 > 嵌入式云IOT技术圈
[导读]    最近几天有文章的读者反馈,本平台发布的文章只是讲了一些基础知识,并没有谈到具体应用,根据各位的反馈,我也做了相应的思考,所以咱们还是需要理论和实践结合来写比较好。等时机成熟,也会将具体的应用编写成一本全新的书籍。     前面写的测试案例看

    最近几天有文章的读者反馈,本平台发布的文章只是讲了一些基础知识,并没有谈到具体应用,根据各位的反馈,我也做了相应的思考,所以咱们还是需要理论和实践结合来写比较好。等时机成熟,也会将具体的应用编写成一本全新的书籍。

    前面写的测试案例看似有点泛泛,可能各位看完也不知道具体用到哪里,接下来我们来看一个具体的应用案例吧!以下程序运行在秉火STM32F103霸道的开发板上,参考官方提供的程序demo,经过个人修改而来。

   用DS18B20温度传感器,设置4个窗值,找最大值,由于温度带有小数,所以类型应是浮点型数据:

#include "stm32f10x.h"

#include "bsp_usart.h"

#include "bsp_SysTick.h"

#include "bsp_ds18b20.h"

#define NR(x) (sizeof(x)/sizeof(x[0]))

static float find_buffer_max(float buffer_value_max,u32 size,float *buffer);

int main(void)

{

int i = 0;

float temp_max;

//设置温度保存的缓存有4个窗值,可以更改 

float temp_buffer[4] ;

uint8_t uc, ucDs18b20Id [ 8 ];

SysTick_Init();

USART_Config();

while( DS18B20_Init() )

printf("\r\n no ds18b20 exsit \r\n");

DS18B20_ReadId ( ucDs18b20Id  );          

 

for ( uc = 0; uc < 8; uc ++ )            

printf ( "%.2x", ucDs18b20Id [ uc ] );

while(1)

{

//当计数等于测试窗值时,则从4个窗值找温度的最大值 

if(i == NR(temp_buffer))

{

temp_max = find_buffer_max(0.0,NR(temp_buffer),temp_buffer);

printf"温度的最大值为:%.1f\n",temp_max);

//清计数器 

i = 0 ;

}

//将当前温度保存到窗值数组

temp_buffer[i] = DS18B20_GetTemp_MatchRom (ucDs18b20Id); 

Delay_ms(1000);

printf("当前温度值为:%.1f\n",temp_buffer[i]);

i++ ;

}  

        return 0 ;


}

 

//找最大值 

static float find_buffer_max(float buffer_value_max,u32 size,float *buffer)

{

u8 count = 0 ; 

float max = buffer_value_max ;

for(count = 0 ; count < size ; count++)

{

if(buffer[count] > max)

max = buffer[count];

}

return max ; 

}

运行结果:

    根据现实的工程应用情况,我们可能会对一个传感器的数据进行长时间的观察就需要用到这样的方法。

    又如,像光强值,加热值,声音值等模拟量也是可以用这样的方法。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭