zoukankan      html  css  js  c++  java
  • Android 对接硬件串口篇

    简介:硬件设备有IC卡片,指压测试仪(测试脉搏信号、心率、血压),经过串口获取硬件设备发送的数据。

    正文:第一步:获得硬件设备,应用市场下载串口调适软件,测试一下在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<ComBean> QueueList = new LinkedList<ComBean>(); @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(); }

      本次串口到此结束,本人技术有限,就不做详细的介绍,怕误人子弟。直接上能直接运行的代码。都能节省时间,至于原理,想了解的我不写也回去了解,不想了解的我写了也没人看

    需要的工具类我上传了,但是怎么和文章链接不知道

    找到了:::下载地址:https://files.cnblogs.com/files/leshen/Android%E5%AF%B9%E6%8E%A5%E4%B8%B2%E5%8F%A3.zip

    不能下载请告知

    里面有三个文件夹》

    样式是

    下一篇:打算写一个脉搏信号图

    有用请点赞、评论、推荐、关注,三克油

  • 相关阅读:
    .NET 中的Cache
    ASP.NET Forms身份认证
    深入浅出JavaScript (一)初识
    在线生成 Loading进度条图片网站
    放眼2011:中国管理软件四大趋势分析
    2011BI展望:移动商业智能决胜未来
    企业关注:国内BI市场将呈四大趋势发展
    安家啦
    清理SqlServer日志方法
    云计算添翼移动BI 企业决策运筹帷握
  • 原文地址:https://www.cnblogs.com/leshen/p/13327950.html
Copyright © 2011-2022 走看看