日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 硬件对接,Android 对接硬件串口篇

發布時間:2023/12/3 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 硬件对接,Android 对接硬件串口篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

private DispQueueThread DispQueue;

private AssistBean AssistData;

private SerialControl ComA;

@Override

public void initView() {

ComA = new SerialControl();//開啟串口

DispQueue = new DispQueueThread();//開啟線程實時獲取數據

DispQueue.start();//線程啟動

AssistData = getAssistData();//串口實體類

ComA.setPort("/dev/ttyS5");//串口號,需要向硬件工作人員要

ComA.setBaudRate("115200");//波特率,后臺要

OpenComPort(ComA);//發送指令

new Thread() {

@Override

public void run() {

executorService = Executors.newSingleThreadScheduledExecutor();

executorService.scheduleAtFixedRate(new Runnable() {

@Override

public void run() {

ComA.sendHex("fc0000000000");

}

}, 0, 500, TimeUnit.MILLISECONDS);

}

}.start();

private void endExecutorScan() {

if(executorService != null) {

executorService.shutdownNow();

}

executorService = null;//非單例模式,置空防止重復的任務

}

//這是沒有指令直接獲取硬件數據的方法,假如需要發送指令ComA.setHexLoopData(“指令”);

//假如,要求一秒獲取多次數據的情況,上面多出來的代碼就是,在需要開始發送的地方寫線程開啟,在需要關閉和OnDestiory里面條用關閉

//還有一種方法是用sleep不推薦使用,一般硬件要求比較嚴格sleep對于時間有一個累計的過程不提倡使用,在SerialHelper.Java里面有個方法也是做的一個自動發送功能,其原理就是sleep。SO,我這邊直接用的這個

}

private class SerialControl extends SerialHelper {//工具

public SerialControl() {

}

@Override

protected void onDataReceived(final ComBean ComRecData) {

//數據接收量大或接收時彈出軟鍵盤,界面會卡頓,可能和6410的顯示性能有關

//直接刷新顯示,接收數據量大時,卡頓明顯,但接收與顯示同步。

//用線程定時刷新顯示可以獲得較流暢的顯示效果,但是接收數據速度快于顯示速度時,顯示會滯后。

//最終效果差不多-_-,線程定時刷新稍好一些。

DispQueue.AddQueue(ComRecData);//線程定時刷新顯示(推薦)

}

}

private class DispQueueThread extends Thread {//線程

private Queue QueueList = new LinkedList();

@Override

public void run() {

super.run();

while (!isInterrupted()) {

final ComBean ComData;

while ((ComData = QueueList.poll()) != null) {

runOnUiThread(new Runnable() {

public void run() {

DispRecData(ComData);

}

});

// try

// {

// Thread.sleep(100);//顯示性能高的話,可以把此數值調小。

// } catch (Exception e)

// {

// e.printStackTrace();

// }

break;

}

}

}

public synchronized void AddQueue(ComBean ComData) {

QueueList.add(ComData);

}

}

private int count = 0;

private void DispRecData(ComBean ComRecData) {//獲取硬件數據的地方

StringBuilder sMsg = new StringBuilder();

sMsg.append(ComRecData.sRecTime);

sMsg.append("[");

sMsg.append(ComRecData.sComPort);

sMsg.append("]");

sMsg.append(MyFunc.ByteArrToHex(ComRecData.bRec));

count++;

String substring = MyFunc.ByteArrToHex(ComRecData.bRec).trim().replaceAll(" ", "").substring(MyFunc.ByteArrToHex(ComRecData.bRec).trim().replaceAll(" ", "").length() - 8);

long i = Long.valueOf(substring, 16);

Log.d("aaaaaaaaaa", "" + i);

if (ComA != null) {

ComA.stopSend();

ComA.close();

}

}

private AssistBean getAssistData() {

SharedPreferences msharedPreferences = getSharedPreferences("ComAssistant", Context.MODE_PRIVATE);

AssistBean AssistData = new AssistBean();

try {

String personBase64 = msharedPreferences.getString("AssistData", "");

byte[] base64Bytes = Base64.decode(personBase64.getBytes(), 0);

ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes);

ObjectInputStream ois = new ObjectInputStream(bais);

AssistData = (AssistBean) ois.readObject();

return AssistData;

} catch (Exception e) {

e.printStackTrace();

}

return AssistData;

}

private void OpenComPort(SerialHelper ComPort) {

try {

ComPort.open();

} catch (SecurityException e) {

ShowMessage("打開串口失敗:沒有串口讀/寫權限!");

} catch (IOException e) {

ShowMessage("打開串口失敗:未知錯誤!");

} catch (InvalidParameterException e) {

ShowMessage("打開串口失敗:參數錯誤!");

}

}

private void ShowMessage(String sMsg) {

Toast.makeText(this, sMsg, Toast.LENGTH_SHORT).show();

}

總結

以上是生活随笔為你收集整理的android 硬件对接,Android 对接硬件串口篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。