本app基于匿名开源小四轴app( http://www.anotc.com/Product/Overview/8 )改编。匿名小四轴接上串口蓝牙模块后,可直接使用本app控制。其它飞控修改通信协议后方可使用。本app改编后可用于控制蓝牙智能小车,感兴趣的小伙伴可以试试看。使用飞行器测试时,请千万注意安全。
蓝牙连接界面,需打开手机蓝牙才可进行下一步操作。上面文本框显示当前蓝牙连接状况;中间大图是我们的logo;左下蓝牙图标,单击可选择要连接的串口蓝牙设备;右下六边形图标,单击可跳转至下图飞行器控制界面。
中上三个全表盘飞机图标,动画实时显示飞行器当前横滚角、航向角和俯仰角;中间半表盘指针图标,显示飞行器当前油门值;中下图标,单击可解锁飞控,再次单击可锁定飞控,如此反复;两侧文本框,实时显示飞控的加速度计和陀螺仪数值;左侧箭头图标,上下为油门加、减,左右控制横滚角;右侧箭头图标,上下控制俯仰角,左右控制航向角。
控制部分源码:
package com.example.seuxiaosi;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Paint;
importandroid.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.annotation.SuppressLint;
public class MyControl extends Activity {
//用于图像旋转的变量
privateImageView mImageView_yaw;
privateImageView mImageView_rol;
privateImageView mImageView_pit;
privateImageView mImageView_thr;
privateMatrix mMatrix = new Matrix();
privatefloat mAngle_thr = 0;
BitmapmBitmap;
Paintpaint = new Paint();
privateint thrTF = 0;//
//自定义按键监听事件类
mImageListentermImageButtonListener = new mImageListenter();
//设置油门, yaw,pit,rol的初始值
privateint VAL_THR = 1000;
privateint VAL_YAW = 1500, VAL_ROL = 1500, VAL_PIT = 1500;
//数据显示
TextView acc_x_show , acc_y_show , acc_z_show ,
gyr_x_show , gyr_y_show , gyr_z_show ;
//图片按钮变量
privateImageButton image;
//飞控解锁 LOCK=0——锁定,LOCK=1——解锁
privateint LOCK = 0;
//时间管理器
Timersend_timer = new Timer();
privatefinal Handler myHandler = new Handler();
//handler可以分发Message对象和Runnable对象到主线程中
//handler中的执行时间过长会出错!!!!!!!!!!
privatefinal Runnable myRunable = new Runnable() {
@Override
publicvoid run() {
//TODO Auto-generated method stub
//0.1秒后调用此Runnable对象,用于控制数据的更新
myHandler.postDelayed(this,100);
//控制界面数据的更新
acc_x_show.setText("X:" + MainActivity.VAL_ACC_X);
acc_y_show.setText("Y:" + MainActivity.VAL_ACC_Y);
acc_z_show.setText("Z:" + MainActiv