|
在使用arduino的analogRead()函数时,经常会遇到校准问题,就是将实际检测量和ARDUINO模拟输入量联系起来。
使用一元线性回归是一种比较好用的校准方式。
我写了一个实现半自动校准的库,发上来给大家分享。
程序用到了LCD1602,矩阵键盘这两个外设。
用到<LiquidCrystal.h><Keypad.h><EEPROM.h>三个ARDUINO官方库。
使用时请注意接线问题。
注意:
1.输入量个数不大于30,在库里可以更改。
2.需要提前定义一个长度为3的double数组用于存放a,b,r(按顺序存放)。
3.EEPROM默认存储地址从开始。(库里可以更改)
4.输入量不能大于1000.0,大于1000.0默认校准结束
5.注意屏幕上的提示。
6.不知道为什么,单片机计算出的线性回归结果与电脑计算出的略有不同,一般在有效数字第7,8位开始不一样,因此不影响使用。
7.EEPROM存储也会在有效数字7,8位开始与实际值有差别。
校准流程:
1.屏幕打印:"1:calib ELSE:pass"
输入“1”开始校准;
输入其他任意键不进行校准,使用上次校准结果(校准结果写入EEPROM,掉电不会丢失)
2.屏幕打印:“input value 1 ”
输入当前实际值,如何操作矩阵键盘见 http://www.geek-workshop.com/thread-29116-1-1.html
3.输入结束,单片机自动记录当前analogRead()读到的值,并在屏幕显示1s。
4.输入第二个数据。。。
5.。。。
6.如果想要结束输入,只要输入值大于1000.0即可,程序会自动舍弃该次测量结果。
7.自动计算a,b,r,显示并保存。
8.屏幕打印“write success”,校准结束。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|