Arduino代码
如前几节所讨论的,我们的代码需要在两个“模式”之间交替,以读取位置和力。通过将引脚D3切换到输入模式,我们可以在测量位置时有效地断开参考电阻。
下面的草图读取位置和力,并在串行终端窗口中显示两者。如果在FSLP上未检测到力以避免刮水器浮动时出现虚假位置值,则不会向终端写入报告。
下载代码:LinearPotExample.zip
代码:
/**********************************************************************************************************
*项目:LinearPotExample.ino
*签署人:Chris Wittmier@Sensitronics LLC
*上次修订日期:2014年7月28日
*描述:力传感线性电位器的基本演示,随附网络教程。
*相对力和位置读数输出到串行终端。
**********************************************************************************************************/
/**********************************************************************************************************
*固定定义/宏
**********************************************************************************************************/
#定义PIN_RIGHT 2
#定义销雨刮器A0
#定义引脚参考3
#定义串行波特率115200
#定义每个周期的延迟25
#定义触摸阈值25
/**********************************************************************************************************
*全球性的
**********************************************************************************************************/
/**********************************************************************************************************
*设置()
**********************************************************************************************************/
无效设置()
{
串行开始(串行波特率);
pinMode(PIN_RIGHT,输出);
pinMode(PIN_参考,输入);
pinMode(PIN_WIPER,输入);
}
/**********************************************************************************************************
*循环()
**********************************************************************************************************/
无效循环()
{
/***初读力***/
pinMode(PIN_参考,输出);
digitalWrite(PIN_REFERENCE,LOW);/接地参考分压电阻器
digitalWrite(PIN_RIGHT,HIGH);//pot两端为+5V
延迟(1);
int force_reading=模拟读取(PIN_WIPER);
/***现在读取位置***/
pinMode(PIN_REFERENCE,INPUT);//有效断开参考分压电阻器
digitalWrite(PIN_RIGHT,LOW);//pot的左端在+5V,右端在GND
延迟(1);
int position_reading=1023-analogRead(PIN_WIPER);//减去相对于左端的输出位置
位置_reading-=512;//减去半刻度读数;传感器中心为位置0,左为-512,右为+512
/***如果读数有效,则输出位置和力***/
如果(力读数>=触摸阈值)//在传感器没有力的情况下,雨刮器是浮动的,则位置读数是假的
{
串行打印(“位置:”);
打印固定(位置读数,3,真);
串行打印(“强制:”);
打印修复(强制读取,3,错误);
Serial.println();
}
其他的
{
Serial.println(“位置:力:0”);
}
延迟(每周期延迟);
}
/**********************************************************************************************************
*printfired()-带有空格填充的串行打印,用于在终端中保持一致的位置。可选正负号
**********************************************************************************************************/
void printFixed(整型值,整型数字位,布尔型显示符号)
{
如果(值<0)
{
串行打印(“-”);
值=abs(值);
}
else if(显示符号)
{
串行打印(“+”);
}
int比较=10;
对于(int i=0;i
{
if(值<比较)
{
串行打印(“”);
}
比较*=10;
}
串行打印(值);
}
随着代码上传和运行,我们应该做生意