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;
 
}
 
串行打印(值);
 
}
 
随着代码上传和运行,我们应该做生意