package com.alfeye.powerdemo;
|
|
import android.content.Intent;
|
import android.hardware.Sensor;
|
import android.hardware.SensorEvent;
|
import android.hardware.SensorEventListener;
|
import android.hardware.SensorManager;
|
import android.os.Bundle;
|
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.AppCompatActivity;
|
import android.util.Log;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.widget.AdapterView;
|
import android.widget.ArrayAdapter;
|
import android.widget.Button;
|
import android.widget.SeekBar;
|
import android.widget.Spinner;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.alfeye.a1io.A1IoDevBaseUtil;
|
import com.alfeye.a1io.A1IoDevManager;
|
import com.alfeye.seriallib.Listener.OnDistanceListener;
|
import com.alfeye.seriallib.SerialDevice.DistanceSensor;
|
import com.alfeye.seriallib.android_serialport_api.SerialPortFinder;
|
|
import java.io.BufferedWriter;
|
import java.io.FileWriter;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
import butterknife.BindView;
|
import butterknife.ButterKnife;
|
import butterknife.OnClick;
|
import io.reactivex.Observable;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.functions.Consumer;
|
import io.reactivex.schedulers.Schedulers;
|
|
public class MainActivity extends AppCompatActivity {
|
|
|
@BindView(R.id.bts_3D5)
|
Button bts3D5;
|
@BindView(R.id.btx_3D5)
|
Button btx3D5;
|
@BindView(R.id.bts_2B1)
|
Button bts2B1;
|
@BindView(R.id.btx_2B1)
|
Button btx2B1;
|
@BindView(R.id.bts_2A2)
|
Button bts2A2;
|
@BindView(R.id.btx_2A2)
|
Button btx2A2;
|
@BindView(R.id.bts_2A6)
|
Button bts2A6;
|
@BindView(R.id.btx_2A6)
|
Button btx2A6;
|
@BindView(R.id.bts_3D4)
|
Button bts3D4;
|
@BindView(R.id.btx_3D4)
|
Button btx3D4;
|
@BindView(R.id.bts_2B2)
|
Button bts2B2;
|
@BindView(R.id.btx_2B2)
|
Button btx2B2;
|
@BindView(R.id.bts_4A5)
|
Button bts4A5;
|
@BindView(R.id.btx_4A5)
|
Button btx4A5;
|
@BindView(R.id.bts_4D2)
|
Button bts4D2;
|
@BindView(R.id.btx_4D2)
|
Button btx4D2;
|
@BindView(R.id.bt_open)
|
Button btOpen;
|
@BindView(R.id.bt_close)
|
Button btClose;
|
@BindView(R.id.tv_jl)
|
TextView tvJl;
|
@BindView(R.id.seekBar_Open)
|
SeekBar seekBar_Open;
|
@BindView(R.id.seekBar_Close)
|
SeekBar seekBarClose;
|
@BindView(R.id.tv_Open)
|
TextView tvOpen;
|
@BindView(R.id.tv_Close)
|
TextView tvClose;
|
@BindView(R.id.spinner)
|
Spinner spinner;
|
@BindView(R.id.bts_Smt)
|
Button btsSmt;
|
@BindView(R.id.bts_Xmt)
|
Button btsXmt;
|
@BindView(R.id.bts_wBo)
|
Button btsWBo;
|
@BindView(R.id.bts_4A41)
|
Button bts4A41;
|
@BindView(R.id.bts_4A42)
|
Button bts4A42;
|
@BindView(R.id.bts_2A2s1)
|
Button bts2A2s1;
|
@BindView(R.id.bts_2A2s2)
|
Button bts2A2s2;
|
@BindView(R.id.bt_BtLight)
|
Button btBtLight;
|
@BindView(R.id.btn_config_system)
|
Button btnConfigSystem;
|
private StringBuilder stringBuilder;
|
private DistanceSensor sr04Device;
|
/**
|
* 距离感应器
|
*/
|
private boolean isOpen = false;
|
//开灯距离
|
private int MIN_SRDEV = 800;
|
//关灯距离
|
private int SRDEVNO = 1200;
|
//缓存集合
|
private List<Integer> integers = new ArrayList<>();
|
//最大缓存数量
|
private int MaxCacheNumber = 5;
|
private ArrayAdapter<String> arr_adapter;
|
private String port = "/dev/ttyUSB0";
|
private String[] allDevices;
|
private ActionBar actionBarBreak;
|
private SensorManager sensorManager;
|
private Sensor ligthSensor;
|
private boolean btLightFlag;
|
private A1IoDevBaseUtil basUtil;
|
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
basUtil.closeLED();
|
basUtil.closeDIST();
|
sr04Device.close();
|
}
|
|
|
@Override
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
if (event.getKeyCode() == 140) {
|
actionBarBreak.setBackgroundDrawable(getResources().getDrawable(R.color.colorAccent));
|
}
|
return super.onKeyDown(keyCode, event);
|
|
}
|
|
@Override
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
if (event.getKeyCode() == 140) {
|
actionBarBreak.setBackgroundDrawable(getResources().getDrawable(R.color.colorPrimary));
|
}
|
return super.onKeyUp(keyCode, event);
|
|
}
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_main);
|
ButterKnife.bind(this);
|
|
actionBarBreak = getSupportActionBar();
|
sr04Device = new DistanceSensor("/dev/ttyUSB0", new Sr04DeviceDate());
|
stringBuilder = new StringBuilder();
|
|
allDevices = new SerialPortFinder().getAllDevicesPath();
|
|
//适配器
|
arr_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, allDevices);
|
//设置样式
|
arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
//加载适配器
|
if (allDevices != null && allDevices.length > 0) {
|
spinner.setSelection(0, true);
|
}
|
spinner.setAdapter(arr_adapter);
|
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
|
|
@Override
|
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
|
if (allDevices != null && allDevices.length > 0) {
|
sr04Device.close();
|
sr04Device.setPort(allDevices[i]);
|
}
|
}
|
|
@Override
|
public void onNothingSelected(AdapterView<?> adapterView) {
|
|
}
|
});
|
|
seekBar_Open.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
@Override
|
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
|
MIN_SRDEV = i;
|
tvOpen.setText("开灯距离:" + i);
|
}
|
|
@Override
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
}
|
|
@Override
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
}
|
});
|
|
seekBarClose.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
@Override
|
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
|
SRDEVNO = i;
|
tvClose.setText("关灯距离:" + i);
|
|
}
|
|
@Override
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
}
|
|
@Override
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
}
|
});
|
|
//获取SensorManager对象
|
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
|
//获取Sensor对象
|
ligthSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
|
|
sensorManager.registerListener(new MySensorListener(), ligthSensor, SensorManager.SENSOR_DELAY_NORMAL);
|
|
basUtil = A1IoDevManager.initIOManager();
|
|
// startService(new Intent(this,MyService.class));
|
|
|
|
}
|
|
|
|
|
public class Sr04DeviceDate implements OnDistanceListener {
|
@Override
|
public void onRevData(final int i1) {
|
Log.e("---", "--->" + "----" + i1);
|
serialDeviceOpenLamp(i1);
|
showTextView(i1 + "");
|
}
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
|
}
|
|
|
/**
|
* 开灯
|
*
|
* @param distance
|
*/
|
private void serialDeviceOpenLamp(int distance) {
|
if (distance != 0) {
|
integers.add(distance);
|
if (integers.size() >= MaxCacheNumber) {
|
Collections.sort(integers);
|
if (integers.get(MaxCacheNumber - 1) <= MIN_SRDEV && !isOpen) {
|
isOpen = true;
|
basUtil.openLED(100);
|
} else if (integers.get(0) >= SRDEVNO && isOpen) {
|
isOpen = false;
|
basUtil.closeLED();
|
}
|
integers.clear();
|
}
|
} else {
|
//==0可能被按住
|
integers.clear();
|
}
|
|
}
|
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
}
|
|
int num = 10;
|
|
@OnClick({R.id.bts_3D5, R.id.btx_3D5, R.id.bts_2B1, R.id.btx_2B1, R.id.bts_2A2, R.id.btx_2A2, R.id.bts_2A6, R.id.btx_2A6, R.id.bts_3D4, R.id.btx_3D4, R.id.bts_2B2, R.id.btx_2B2, R.id.bts_4A5, R.id.btx_4A5, R.id.bts_4D2, R.id.btx_4D2
|
, R.id.bt_open, R.id.bt_close, R.id.bts_Smt, R.id.bts_Xmt, R.id.bts_wBo, R.id.bts_4A41, R.id.bts_4A42
|
, R.id.bts_2A2s1, R.id.bts_2A2s2, R.id.bt_BtLight, R.id.btn_config_system, R.id.bt_Weigen})
|
public void onViewClicked(View view) {
|
switch (view.getId()) {
|
case R.id.btn_config_system:
|
startActivity(new Intent(MainActivity.this, SystemConfigActivity.class));
|
break;
|
|
case R.id.bts_3D5:
|
//打开补光灯
|
basUtil.openLED(num);
|
num = (num + 10) >= 100 ? 100 : (num + 10);
|
break;
|
case R.id.btx_3D5:
|
//关闭补光灯
|
basUtil.closeLED();
|
num = 10;
|
break;
|
case R.id.bts_2B1:
|
//距感电源上电
|
basUtil.openDIST();
|
break;
|
case R.id.btx_2B1:
|
//距感电源下电
|
basUtil.closeDIST();
|
break;
|
case R.id.bts_2A2:
|
//红外灯光上电
|
basUtil.openIRDA();
|
break;
|
case R.id.btx_2A2:
|
//红外灯光下电
|
basUtil.closeIRDA();
|
break;
|
case R.id.bts_2A6:
|
//4G上电
|
basUtil.open4G();
|
break;
|
case R.id.btx_2A6:
|
//4G下电
|
basUtil.close4G();
|
break;
|
case R.id.bts_3D4:
|
//打开门铃
|
basUtil.openBELL();
|
break;
|
case R.id.btx_3D4:
|
//关闭门铃
|
basUtil.closeBELL();
|
break;
|
case R.id.bts_2B2:
|
//开锁
|
basUtil.openUNLOCK();
|
break;
|
case R.id.btx_2B2:
|
//关锁
|
basUtil.closeUNLOCK();
|
break;
|
case R.id.bts_4A5:
|
//串口上电
|
basUtil.openPORT();
|
break;
|
case R.id.btx_4A5:
|
//串口下电
|
basUtil.closePORT();
|
break;
|
case R.id.bts_4D2:
|
//U口上电
|
basUtil.openUK();
|
break;
|
case R.id.btx_4D2:
|
//U口下电
|
basUtil.closeUK();
|
break;
|
case R.id.bt_open:
|
//距感电源上电
|
basUtil.openDIST();
|
//打开距感
|
boolean open = sr04Device.open();
|
if (open) {
|
Toast.makeText(this, "打开成功", Toast.LENGTH_SHORT).show();
|
} else {
|
Toast.makeText(this, "打开失败", Toast.LENGTH_SHORT).show();
|
}
|
|
break;
|
case R.id.bt_close:
|
// 距感电源下电
|
basUtil.closeDIST();
|
// 关闭距感
|
sr04Device.close();
|
|
break;
|
case R.id.bt_Weigen:
|
startActivity(new Intent(MainActivity.this, WeiGenActivity.class));
|
break;
|
|
case R.id.bts_wBo:
|
startActivity(new Intent(MainActivity.this, TestDistanceActivitys.class));
|
break;
|
case R.id.bts_Xmt:
|
//扫描头下电
|
basUtil.CloseScanningHead();
|
break;
|
case R.id.bts_Smt:
|
//扫描头上电
|
basUtil.openScanningHead();
|
break;
|
case R.id.bts_4A41:
|
//预留 未定义
|
openPower("4A4", 0);
|
break;
|
case R.id.bts_4A42:
|
//预留 未定义
|
openPower("4A4", 1);
|
break;
|
case R.id.bts_2A2s1:
|
//预留 未定义
|
openPower("2A2", 0);
|
break;
|
case R.id.bts_2A2s2:
|
//预留 未定义
|
openPower("2A2", 1);
|
break;
|
case R.id.bt_BtLight:
|
if (btLightFlag) {
|
btLightFlag = false;
|
} else {
|
btLightFlag = true;
|
}
|
break;
|
default:
|
}
|
|
|
}
|
|
/**
|
* A1 IO控制
|
*
|
* @param flag 1为上电,0为下电
|
*/
|
private boolean openPower(String io, int flag) {
|
try {
|
BufferedWriter bufWriter = new BufferedWriter(new FileWriter("/sys/class/gpio_control/gpio/gpio_control"));
|
bufWriter.write(io + flag);
|
bufWriter.close();
|
return true;
|
} catch (IOException e) {
|
}
|
return false;
|
}
|
|
|
public class MySensorListener implements SensorEventListener {
|
|
@Override
|
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
|
}
|
|
@Override
|
public void onSensorChanged(SensorEvent event) {
|
if (btLightFlag) {
|
//获取精度
|
float acc = event.accuracy;
|
//获取光线强度
|
float lux = event.values[0];
|
showTextView(lux + "");
|
|
|
}
|
|
}
|
|
}
|
|
public void showTextView(String tl) {
|
Observable.just(tl)
|
.observeOn(Schedulers.io())
|
.observeOn(AndroidSchedulers.mainThread())
|
.subscribe(new Consumer<String>() {
|
@Override
|
public void accept(String s) throws Exception {
|
stringBuilder.insert(0, s + "\n");
|
tvJl.setText(stringBuilder + "");
|
if (stringBuilder.length() >= 80) {
|
stringBuilder.delete(stringBuilder.length() - 10, stringBuilder.length());
|
}
|
}
|
});
|
}
|
|
|
}
|
|
/**
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: DISPLAY=A1_V1.0_20181008
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: MODEL=A1
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: DEVICE=A1
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: java.lang.UnsatisfiedLinkError: No implementation found for java.io.FileDescriptor android_serialport_api.SerialPort.open(java.lang.String, int, int) (tried Java_android_1serialport_1api_SerialPort_open and Java_android_1serialport_1api_SerialPort_open__Ljava_lang_String_2II)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android_serialport_api.SerialPort.open(Native Method)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android_serialport_api.SerialPort.<init>(SerialPort.java:61)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at com.alfeye.ComAssistant.SerialHelper.open(SerialHelper.java:46)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at com.alfeye.SerialDevice.DistanceSensor.open(DistanceSensor.java:93)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at com.alfeye.alfeyeTools.onResume(alfeyeTools.java:80)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at com.example.tuniface.idface.tuniFaceDetectionlocalData.onResume(tuniFaceDetectionlocalData.java:605)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.Activity.performResume(Activity.java:6813)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3407)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3470)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2733)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread.-wrap12(ActivityThread.java)
|
* 10-10 17:30:41.797 2351 2351 E LogToFile: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
|
* 10-10 17
|
*/
|