像Arduino里的MAP函数,应用在STM32单片机上。
简介:
如果大家玩过Arduino,想必知道MAP();函数了,这是一个很好用的映射函数,下面程序列举如下:
int val = analogRead(0); //读取0口的值
val = map(val, 0, 1023, 0, 255);//从0-1023映射到0-255
analogWrite(9, val); //把映射后的值写给9口
像上面3行代码表达意思是:将ADC0口的数值读到 val 变量上, 再通过map函数将变化值从0-1024 映射成变化区间为0-255,再传给val。 再在9号端口输出对应的PWM值。
Arduino其实是将函数封装了一遍,如果想在STM32上使用该好用的函数,可以自己写一遍,下面程序列举如下:
//输入值分别是:输入值,输入最小值,输入最大值,输出最小值,输出最大值
float map(float val, float I_Min, float I_Max, float O_Min, float O_Max)
{
return(((val-I_Min)*((O_Max-O_Min)/(I_Max-I_Min)))+O_Min);
}
将上面代码写入程序中,就可以调用MAP();函数了。
- map函数可以负向映射,如:ADC_UP_MAP = map(ADC_ConvertedValue[1],1900,1500,0,255); 就是将ADC_ConvertedValue[1]读到的值从1900-1500,映射成0-255.
- 还值得注意的一点是加入ADC_ConvertedValue[1]的值没在输入最大值最小值范围内也会对应的映射,如加入ADC_ConvertedValue[1]的值是2061,则映射的是约为:103。