毕业设计--基于安卓的智能小车(三)

完成蓝牙连接,工作也就完成了一大半。剩下的就是控制命令了,我们假设发送A为向前命令,B为向后命令,C为向左命令,D为向右命令,E为停止命令。

1. 手动控制

    分别为四个操控按钮设立监听

    private BluetoothCarService mCarService = null;  
    Button BtnF;  
    Button BtnB;  
    Button BtnL;  
    Button BtnR;  
  
    private void setupControl() {  
        forwardcontrol();  
        backwardcontrol();  
        leftcontrol();  
        rightcontrol();  
    }  
        private void forwardcontrol() {  
        BtnF = (Button) findViewById(R.id.btnf);  
        BtnF.setOnTouchListener(new OnTouchListener() {  
  
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                int bnt_action = event.getAction();  
                switch (bnt_action) {  
                case MotionEvent.ACTION_DOWN:  
                    sendMessage("A");  
                    break;  
                case MotionEvent.ACTION_UP:  
                    sendMessage("E");  
                    break;  
                }  
                return false;  
            }  
        });  
    }  
  
    private void backwardcontrol() {  
        BtnB = (Button) findViewById(R.id.btnb);  
        BtnB.setOnTouchListener(new OnTouchListener() {  
  
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                int bnt_action = event.getAction();  
                switch (bnt_action) {  
                case MotionEvent.ACTION_DOWN:  
                    sendMessage("B");  
                    break;  
                case MotionEvent.ACTION_UP:  
                    sendMessage("E");  
                    break;  
                }  
                return false;  
            }  
        });  
    }  
  
    private void leftcontrol() {  
        BtnL = (Button) findViewById(R.id.btnl);  
        BtnL.setOnTouchListener(new OnTouchListener() {  
  
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                int bnt_action = event.getAction();  
                switch (bnt_action) {  
                case MotionEvent.ACTION_DOWN:  
                    sendMessage("C");  
                    break;  
                case MotionEvent.ACTION_UP:  
                    sendMessage("E");  
                    break;  
                }  
                return false;  
            }  
        });  
    }  
  
    private void rightcontrol() {  
        BtnR = (Button) findViewById(R.id.btnr);  
        BtnR.setOnTouchListener(new OnTouchListener() {  
  
            @Override  
            public boolean onTouch(View v, MotionEvent event) {  
                int bnt_action = event.getAction();  
                switch (bnt_action) {  
                case MotionEvent.ACTION_DOWN:  
                    sendMessage("D");  
                    break;  
                case MotionEvent.ACTION_UP:  
                    sendMessage("E");  
                    break;  
                }  
                return false;  
            }  
        });  
    }
	private void sendMessage(String message) {
		if (message.length() > 0) {
			byte[] send = message.getBytes();
			mCarService.write(send);
		}
	}

2. 重力感应

    这里通过一个ToggleButton控件来实现重力感应的开启与关闭。

ToggleButton toggleButton1;
	private SensorManager mSensorManager;
	private Sensor mAccelerometer;
	private SensorEventListener mSensorListener;
	private float x, y;
		toggleButton1 = (ToggleButton) this.findViewById(R.id.toggleButton1);
		toggleButton1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if (toggleButton1.isChecked()) {
					Toast.makeText(MainActivity.this, "开启重力感应",
							Toast.LENGTH_SHORT).show();
					BtnF.setEnabled(false);
					BtnB.setEnabled(false);
					BtnL.setEnabled(false);
					BtnR.setEnabled(false);
					mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
					mAccelerometer = mSensorManager
							.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
					mSensorListener = new SensorEventListener() {

						@Override
						public void onSensorChanged(SensorEvent event) {
							x = event.values[0];
							y = event.values[1];
							sensorcontrol();
						}

						@Override
						public void onAccuracyChanged(Sensor sensor,
								int accuracy) {
						}
					};
					mSensorManager.registerListener(mSensorListener,
							mAccelerometer, SensorManager.SENSOR_DELAY_GAME);

				} else {
					sendMessage("E");
					Toast.makeText(MainActivity.this, "关闭重力感应",
							Toast.LENGTH_SHORT).show();
					BtnF.setEnabled(true);
					BtnB.setEnabled(true);
					BtnL.setEnabled(true);
					BtnR.setEnabled(true);
					mSensorManager.unregisterListener(mSensorListener);
				}
			}
		});
	}
	public void sensorcontrol() {

		if (x < 3 && x > -3 && y < 3 && y > -3) {
			sendMessage("E");
		} else {
			if (x > 3) {
				sendMessage("C");
			} else if (x < -3) {
				sendMessage("D");
			}
			if (y > 3) {
				sendMessage("B");
			} else if (y < -3) {
				sendMessage("A");
			}
		}
	}






评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值