Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何控制加速度计及其在安卓远程控制汽车中的应用_Android_Bluetooth_Accelerometer_Dtmf - Fatal编程技术网

Android 如何控制加速度计及其在安卓远程控制汽车中的应用

Android 如何控制加速度计及其在安卓远程控制汽车中的应用,android,bluetooth,accelerometer,dtmf,Android,Bluetooth,Accelerometer,Dtmf,我想用安卓手机开一辆遥控车。 我用蓝牙耳机作为接收器。 我的手机发送双音多频音,当耳机接收到双音多频音时,手机会对其进行分析 微控制器,用于打开/关闭汽车电机 我用加速度计检测手机的运动。。。(前/左/右/后) 在每个乐章上,它都会播放特定的DTMF音调 这一切都可行,但存在一个问题: 当传感器值不断变化时,会播放大量音调 问题是:我怎样才能使音调只播放一次??(如守则所述) 代码如下: X = (TextView)findViewById(R.id.x); Y = (TextView

我想用安卓手机开一辆遥控车。 我用蓝牙耳机作为接收器。 我的手机发送双音多频音,当耳机接收到双音多频音时,手机会对其进行分析 微控制器,用于打开/关闭汽车电机

我用加速度计检测手机的运动。。。(前/左/右/后) 在每个乐章上,它都会播放特定的DTMF音调

这一切都可行,但存在一个问题:

当传感器值不断变化时,会播放大量音调

问题是:我怎样才能使音调只播放一次??(如守则所述)

代码如下:

 X = (TextView)findViewById(R.id.x);
    Y = (TextView)findViewById(R.id.y);
    Z = (TextView)findViewById(R.id.z);

    toneGenerator= new ToneGenerator(AudioManager.STREAM_DTMF,ToneGenerator.MAX_VOLUME);



    sel = new SensorEventListener(){  
public void onAccuracyChanged(Sensor sensor, int accuracy) {

        }  

        public void onSensorChanged(SensorEvent event) {  

              float[] values = event.values; 
              float x = values[0];  
              float   xx = Math.round(x) ;
              float y = values[1]; 
              float   yy = Math.round(y) ;
              float z = values[2];  
              float   zz = Math.round(z) ;

              X.setText("x:" + xx);  

              Y.setText("y:" + yy);
              Z.setText("z:" + zz);

              if (xx>-1 & xx<1 & zz>3 & zz<8 ) {
                state.setText ("normal");

                toneGenerator.startTone(ToneGenerator.TONE_DTMF_5);


                   new CountDownTimer(50, 500) { 
                    public void onTick(long millisUntilFinished) { } 
                    public void onFinish() { 
                     toneGenerator.stopTone();
                  }}.start();
              }

              if (xx>-1 & xx<1 & zz>8 ) {

                state.setText ("front");

                     toneGenerator.startTone(ToneGenerator.TONE_DTMF_2);
                       new CountDownTimer(50, 500) { 
                        public void onTick(long millisUntilFinished) { } 
                        public void onFinish() { 
                         toneGenerator.stopTone();
                      }}.start();
X=(TextView)findViewById(R.id.X);
Y=(TextView)findViewById(R.id.Y);
Z=(TextView)findViewById(R.id.Z);
toneGenerator=新的toneGenerator(AudioManager.STREAM\u DTMF、toneGenerator.MAX\u VOLUME);
sel=新的SensorEventListener(){
精度更改时的公共无效(传感器,int精度){
}  
SensorChanged上的公共无效(SensorEvent事件){
float[]值=event.values;
浮点x=值[0];
浮点xx=数学四舍五入(x);
浮动y=值[1];
浮点yy=数学圆(y);
浮动z=数值[2];
float zz=数学四舍五入(z);
X.setText(“X:+xx”);
Y.setText(“Y:+yy”);
Z.setText(“Z:+zz”);
如果(xx>-1&xx3&zz-1&xx8){
state.setText(“front”);
toneGenerator.StartOne(toneGenerator.TONE_DTMF_2);
新倒计时(50500){
公共void onTick(长毫秒直至完成){}
public void onFinish(){
toneGenerator.stopTone();
}}.start();

有什么建议吗?

这有点困难,因为人类不能100%地站在身体的任何部位


你试过把手机放在桌子上看会发生什么吗?

但是哪些值?加速计值还是指南针值?加速计的值…我从他们那里得到的值是在SensorChanged(事件)上…我将它们四舍五入以避免微小的变化,但传感器会不断更新值…即使值没有变化,它仍会播放音调。您使用哪些值?我认为使用指南针、定义“限制”和使用加速计来确定改变手机位置的速度会更容易。