You are reading a single comment by @Gordon and its replies. Click here to read the full conversation.
  • Hi Gordon! my OS is Window10, and programming language is Javascript.
    I refer to this example, my frontend framework is Vue.js. I share some of codes of page.

       bangleCode: `Bangle.setLCDPower(1);
            Bangle.setLCDTimeout(0);
            Bangle.setHRMPower(1);
            var hrmInfo, hrmOffset = 0;
            var hrmInterval;
            var btm = g.getHeight()-1;
            
            function onHRM(h) {
              if (counter!==undefined) {
                // the first time we're called remove
                // the countdown
                counter = undefined;
                g.clear();
              }
              hrmInfo = h;
              /* On 2v09 and earlier firmwares the only solution for realtime
              HRM was to look at the 'raw' array that got reported. If you timed
              it right you could grab the data pretty much as soon as it was written.
              In new firmwares, '.raw' is not available. */
              if (hrmInterval) clearInterval(hrmInterval);
              hrmInterval = undefined;
              if (hrmInfo.raw) {
                hrmOffset = 0;
                setTimeout(function() {
                  hrmInterval = setInterval(readHRM,41);
                }, 40);
              }
            
              var px = g.getWidth()/2;
              g.setFontAlign(0,0);
              g.clearRect(0,24,239,80);
              g.setFont("6x8").drawString("Confidence "+hrmInfo.confidence+"%", px, 75);
              var str = hrmInfo.bpm;
              g.setFontVector(40).drawString(str,px,45­);
              px += g.stringWidth(str)/2;
              g.setFont("6x8");
              g.drawString("BPM",px+15,45);
            }
            Bangle.on('HRM', onHRM);
            /* On newer (2v10) firmwares we can subscribe to get
            HRM events as they happen */
            Bangle.on('HRM-raw', function(v) {
              hrmOffset++;
              if (hrmOffset>g.getWidth()) {
                hrmOffset=0;
                g.clearRect(0,80,239,239);
                g.moveTo(-100,0);
              }  
              y = E.clip(btm-v.filt/4,btm-10,btm);  
              g.setColor(1,0,0).fillRect(hrmOffset,btm­, hrmOffset, y);
              y = E.clip(170 - (v.raw/2),80,btm);
              g.setColor(g.theme.fg).lineTo(hrmOffset,­ y);
              if (counter !==undefined) {
                counter = undefined;
                g.clear();
              }
            });
            
            // It takes 5 secs for us to get the first HRM event
            var counter = 5;
            function countDown() {
              if (counter) {
                g.drawString(counter--,g.getWidth()/2,g.­getHeight()/2, true);
                setTimeout(countDown, 1000);
              }
            }
            g.clear().setFont("6x8",2).setFontAlign(­0,0);
            g.drawString("Please wait...",g.getWidth()/2,g.getHeight()/2 - 16);
            countDown();        
            
            var wasHigh = 0, wasLow = 0;
            var lastHigh = getTime();
            var hrmList = [];
            var hrmInfo;
            
            function readHRM() {
              if (!hrmInfo) return;
            
              if (hrmOffset==0) {
                g.clearRect(0,100,239,239);
                g.moveTo(-100,0);
              }
              for (var i=0;i<2;i++) {
                var hrmData = hrmInfo.raw[hrmOffset];
                hrmOffset++;
                y = E.clip(170 - (hrmData*2),100,230);
                g.setColor(g.theme.fg).lineTo(hrmOffset,­ y);
                var print = ["HRM", hrmData ];
                 Bluetooth.println(
                   print.join(",")
                   );
              }
            }
            Bangle.on('accel',function(a) {
              var d = [
                "ACC",
                Math.round(a.x*100),
                Math.round(a.y*100),
                Math.round(a.z*100)
                ];
              Bluetooth.println(d.join(","));
            })
            `,
    
    connectWatch1(state) {
                let connection1;
                // disconnect if connected already
                if (connection1) {
                    connection1.close();
                    connection1 = undefined;
                    state.watch1.connect = false
                }
    
                // Connect
                Puck.connect(function(c) {
                    if (!c) {
                        // alert("Couldn't connect!");
                        // return;
                        state.watch1.connect = false
                        this.connectWatch1()
                    }
                    connection1 = c;
                    state.watch1.connect = true
                        // console.log(connection)
                        // Handle the data we get back, and call 'onLine'
                        // whenever we get a line
                    var buf = "";
                    connection1.on("data", function(d) {
                        buf += d;
                        var l = buf.split("\n");
                        buf = l.pop();
                        l.forEach(
                            (line) => {
                                var d = line.split(',')
                                if (d[0] == 'ACC') {
                                    // we have an accelerometer reading
                                    state.watch1.accelX = parseInt(d[1]) / 100
                                    state.watch1.accelY = parseInt(d[2]) / 100
                                    state.watch1.accelZ = parseInt(d[3]) / 100
                                } else if (d[0] == 'HRM') {
                                    // we have an accelerometer reading
                                    state.watch1.hrm = parseInt(d[1])
                                }
    
                                // console.log("RECEIVED:" + state.watch1);
                            }
                            // console.log('RECEIVED:' + line)
                        );
                    });
                    // First, reset the Bangle
                    connection1.write("reset();\n", function() {
                        // Wait for it to reset itself
                        setTimeout(function() {
                            // Now upload our code to it
                            connection1.write(
                                "\x03\x10if(1){" +
                                state.bangleCode +
                                "}\n",
                                function() {
                                    console.log("Ready...");
                                }
                            );
                        }, 1500);
                    });
                });
            },
    

    thank you for your good source of reconnect!😀

About

Avatar for Gordon @Gordon started