使用HC-SR04和android IOIO板实现超声波测距的功能

可能是我在实现计时部分的逻辑实现的不够好,误差较大。
同样接好电路
开始编写代码,功能比较单一,因此代码也比较简单:
public class MainActivity extends IOIOActivity {
Button button;
private DigitalOutput led_;
private DigitalOutput vout;
private AnalogInput vin;
private TextView tv;
int flag,i;
long start,end;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
tv=(TextView)findViewById(R.id.textView2);
}
class Looper extends BaseIOIOLooper {
@Override
protected void setup() throws ConnectionLostException {
led_ = ioio_.openDigitalOutput(0,true);
vout= ioio_.openDigitalOutput(1,true);
vin=ioio_.openAnalogInput(40);
}
@Override
public void loop() throws ConnectionLostException, InterruptedException {
//Thread.sleep(1);
vout.write(true);
if(vin.read()>0.5)
{
if(i==1)
{
start=System.nanoTime();
}
led_.write(true);
flag=2;
i++;
}
else
{
led_.write(false);
flag=flag-1;
end=System.nanoTime();
}
if(flag==1)
{
float time=end-start;
setNumber(time*340/2000000000);
flag=0;i=1;
}
}
}
@Override
protected IOIOLooper createIOIOLooper() {
return new Looper();
}
public void bt_Click(View v) throws ConnectionLostException{
led_.write(false);
vout.write(false);
flag=0;
i=1;
}
private void setNumber(float f) {
final String str = String.format("%.2f", f);
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText("声波传递时间约为"+Float.parseFloat(str)*2000000000/340+"毫微秒,估算距离为"+str+"米");
}
});
}
}