今天把落灰已久的wifi小车拿了出来,试了试还能用,进度条问题依旧,正巧X1上前不久把ecllipse环境调试OK,打开代码,google搜索了一遍垂直进度条,发现已经有更简单的解决方案,于是重写了一个VerticalSeekBar,关键是如下函数:
protected void onDraw(Canvas c) {
c.rotate(-90);
c.translate(-getHeight(), 0);
super.onDraw(c);
}
然后在onTouchEvent中加入如下代码处理进度条变化:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (!isEnabled()) {
return false;
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
setProgress(getMax() - (int) (getMax() * event.getY() / getHeight()));
onSizeChanged(getWidth(), getHeight(), 0, 0);
break;
case MotionEvent.ACTION_CANCEL:
break;
}
return true;
}
至此,UI上没有问题了,但自从上次换了舵机,舵机方向与进度条就不一致了,然后又在main.java里更新了代码,把方向调整过来,增加了一个常量定义。
private final int MIN_GEAR_STEP = 2;//避免抖动,+-5左右
private final int MIN_GEAR_VALUE = 40;//need to fit the hardware
private final int MAX_GEAR_VALUE = 120;//need to fit the hardware
private final int INIT_GEAR_VALUE = 20;//初始值,need to fit the hardware
连接参数配置如下:
总结:
路由器:root@admin
wifi热点: wificar@无密码
服务器IP 192.168.10.1
网页控制 http://192.168.10.1/car.html
如果修改了wifi热点,需要同步修改常量WIFI_SSID_PERFIX
如果换了舵机,需要同步修改如下变量:
private final int MIN_GEAR_VALUE = 40;//need to fit the hardware
private final int MAX_GEAR_VALUE = 120;//need to fit the hardware
private final int INIT_GEAR_VALUE = 20;//初始值,need to fit the hardware
百度盘里有路由器的全部备份(我的资源/智能小车),有时间需要把单片机源码和编译环境备份出来
20180405更新:
增加北通手柄支持:
typeC口连接手柄接收器后,android就可以接受到KeyEvent,增加如下代码
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
mLogText.setText("get keyCode: " + keyCode + " Action:" + event.getAction());
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN://按向下键
sendCommand(COMM_BACKWARD);
break;
case KeyEvent.KEYCODE_DPAD_UP:// 按向上键
sendCommand(COMM_FORWARD);
break;
case KeyEvent.KEYCODE_DPAD_LEFT://按向左键
sendCommand(COMM_LEFT);
break;
case KeyEvent.KEYCODE_DPAD_RIGHT://按向右键
sendCommand(COMM_RIGHT);
break;
case KeyEvent.KEYCODE_BUTTON_7:
case KeyEvent.KEYCODE_BUTTON_8:
sendCommand(bLenon? COMM_LEN_OFF : COMM_LEN_ON);
bLenon = !bLenon;
break;
case KeyEvent.KEYCODE_BACK:
return super.onKeyDown(keyCode, event);
default:
break;
}
return true;//表示不再让系统处理按键
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN://按向下键
case KeyEvent.KEYCODE_DPAD_UP:// 按向上键
case KeyEvent.KEYCODE_DPAD_LEFT://按向左键
case KeyEvent.KEYCODE_DPAD_RIGHT://按向右键
case KeyEvent.KEYCODE_BUTTON_7://lleft
case KeyEvent.KEYCODE_BUTTON_8:
sendCommand(COMM_STOP);
break;
case KeyEvent.KEYCODE_BACK:
return super.onKeyUp(keyCode, event);//back建得保留
default:
break;
}
return true;
}
遗憾得是手柄支持摇杆,但android还是当成普通得前后左右了,有空再研究下,如果能拿到坐标,控制就可以更流畅了。