欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

混合式应用开发之串口通讯(2)

程序员文章站 2022-04-30 23:24:50
发送指令与解析数据 Cordova插件 : https://github.com/xseignard/cordovarduino 安装:cordova plugin add cordovarduino 代码示例: 注意: 不知道插件的问题还是硬件的问题,本来应该一次返回的数据报文分了多次返回,所以在 ......

发送指令与解析数据

  

  Cordova插件 : https://github.com/xseignard/cordovarduino

  安装:cordova plugin add cordovarduino

  代码示例:

  

var opts = {
        baudRate: 115200
    };
    $scope.allData = [];
    serial.requestPermission(function success(res){
        console.log(res);
        serial.open(opts, function success(res){
            console.log(res);
        }, function error(err){
            console.log(err);
        });
    }, function error(err){
        console.log(err);
    });
    var view = [];
    serial.registerReadCallback(function success(res) {
                var lin = new Uint8Array(res);
                view = view.concat(Array.from(lin));//因为插件把一次数据分多次返回所以先进行拼接
                if (view.length == 35) {
                    //单卡
                    $scope.anaData(view);
                    console.log('单' + view)
                }else{
                        //多卡
                    if ((view.length-35)%20 == 0) {
                        console.log('多' + view)
                        $scope.anaDatas(view);
                    }
                }
            },function error(error) {
                console.log(error)
    }); 
    //发送指令
    $scope.sendOrder = function(){
        serial.writeHex(myOrderString, function success(res){
            console.log(res);
        }, function error(err){
            console.log(err);
        });
    }
    //接收数据
    //解析数据单个
     $scope.anaData = function(aaa){
        var bbb = aaa.slice(13,29);
        var ccc = '';
        var arr = [];
        var ddd = [];
        function topow(x) {
            return x.toString(16)
        };
        bbb.map(topow);
        ccc = String.fromCharCode.apply(null,bbb);
        for (var i = 0;i<ccc.length;i=i+2) {
            arr.push(ccc.substring(i,i+2));
        }
        arr.reverse();
        ddd = arr.join('')
        console.log(ddd);
        $scope.allData.push(ddd);
        $scope.$apply();
     };

   注意:

    不知道插件的问题还是硬件的问题,本来应该一次返回的数据报文分了多次返回,所以在监测回调接收数据的时候先把收到的数据拼接之后再进行下一步处理。如果你的设备正常可以去除这一步。