LeJOS学习(6):Sensor的API研究-TouchSensor

来源:互联网 发布:判断素数c语言 9是素数 编辑:程序博客网 时间:2024/05/17 07:28

继续研究传感器,因为我手上是Home版,所以只有触碰、颜色和红外三个感应器,今天先从最简单的TouchSensor开始吧。就是它了:
这里写图片描述

TouchSensor只有两个状态,压下或没压下。所以代码非常简单,lejos提供了两种方法来操作传感器,一一道来。

方法一:使用lejos.hardware.sensor

在这个硬件包下有大量的传感器类,其中就有我们需要的EV3TouchSensor:

        //触碰传感器接到1号口        EV3TouchSensor sensor = new EV3TouchSensor(SensorPort.S1);        SensorMode mode =  sensor.getTouchMode();        float[] samples = new float[mode.sampleSize()];        System.out.println("====samples size is "+samples.length);        while( true ){            sensor.fetchSample(samples, 0);//          for(int i=0;i<samples.length;i++)//              log.echo("sample["+i+"] = "+samples[i]+",");            //如果samples[0]==1.0,说明被触碰了。            if( samples[0]==1.0){                break;            }            Delay.msDelay(1000);        }        sensor.close();

从上面代码是lejos对传感器封装的典型流程,

  1. 构造,并指定端口,注意这里的端口与Motor中使用的不一样了。
  2. 获得传感模式,对于TouchSensor来说,只可能有一个模式,即触碰模式。
  3. 构造一个数组用于存放采样数据,数组大小应该等于mode.sampleSize()。
  4. 进入采集状态,利用mode.fetchSample函数采样,结果存在上面那个数组中。
  5. 不同的传感器,采样得到的数据含义也是不同的,根据需要使用。

对于触碰而言,只有一个采样数据,所以sampleSize=1,得到的采样值也只有两个,0表示没有被压下,1表示被压下了。

方法二:使用lejos.robotics中的适配器

lejos为我们提供了更为简便的适配器类,比如触碰就有TouchAdapter,可以大量简化上面的代码。

        TouchAdapter adapter = new TouchAdapter(new EV3TouchSensor(SensorPort.S1));//      while(true){//          //          log.echo("touch status is "+adapter.isPressed());//              //          if( adapter.isPressed() ) break;//          Delay.msDelay(1000);//      }        synchronized (adapter) {             while ( !adapter.isPressed() )                try {                    log.echo("status="+adapter.isPressed());                    adapter.wait(500);                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }         }

构造Adapter需要一个Sensor,然后它就简单到只需要一个 adapter.isPressed()就可以判断是否被按压下。

0 0