Skip to content

Latest commit

 

History

History
121 lines (90 loc) · 3.07 KB

README.md

File metadata and controls

121 lines (90 loc) · 3.07 KB

Root Robot Bluetooth Low Energy Protocol Implementation in Javascript

This is a basic Javascript implementation of the Root Robot Bluetooth Low Energy (BLE) protocol documentation.

The protocol was shared by Root Robotics, the creators of the Root robot.

Setup

You can just inclide the minified Javascript file and then you're ready to so.

<script type="text/javascript" src="js/root.min.js"></script>

Init root Object

Works in all browsers supporting navigator.bluetooth.requestDevice (e.g. Chrome).
This is the minimum code to access the Javascript protocol implementation.
You need to trigger the Bluetooth Low energy device coupling by a user event.
That's a limitation of the browsers access to BLE devices.

As a result of this code snippet, you'll have a root Object,
which offers all documented protocol functions as of version 1.1

var bleDevice = new BleDevice(Root.identifier, Root.services);
bleDevice.addEventListener('connected', function(e) {
  var root = new Root(bleDevice);
  root.setup(function (root) {
    root.device.sound.sayPhrase('Hello world!', console.log);
    console.log('start using root', root);
    window.root = root;
  });
});

// ble device coupling needs a user event to be triggered
document.addEventListener('pointerup', function() {
  bleDevice.scanAndConnect();
});

API

See our API documentation, what methods, evemts and properties are offered by this Root Robot protocol implementation.

Examples

Some very basic examples, how to use the protocol implementation (API).

A simple queue for robot commands

function runQueue(arr) {
  var fnc = arr.shift();
  var next = function () { runQueue(arr); };
  if (arr.length<=0) {
    next = function () { console.log('done'); }
  }
  fnc(next);
}

Motor usage

Drive along a 15 centimeters square rectangle.

var go15cm = function (next) {
  root.device.motors.driveDistance(150, next);
}

var turn90deg = function (next) {
  root.device.motors.rotateAngel(900, next);
}

runQueue([go15cm, turn90deg, go15cm, turn90deg, go15cm, turn90deg, go15cm, turn90deg]);

Sound

Play notes of a scale.

var notes = {
  'C4': 261,
  'D4': 293,
  'E4': 329,
  'F4': 349,
  'G4': 392,
  'A4': 440,
  'B4': 493,
  'C5': 523
}

var playNote = function (note) {
  return function (next) {
    root.device.sound.playNote(notes[note], 400, next);
  }
}

runQueue([playNote('C4'), playNote('D4'), playNote('E4'), playNote('F4'), playNote('G4'), playNote('A4'), playNote('B4'), playNote('C5')]);

Sound and touch usage

Play different sounds, when touching the four quadrant touch areas on top of root.

root.device.touchSensors.addEventListener('touch', function (e) {
  if (e.frontLeft) { playNote('A4')(); }
  if (e.frontRight) { playNote('B4')(); }
  if (e.rearLeft) { playNote('D4')(); }
  if (e.rearRight) { playNote('E4')(); }
});

Enable Logging

window.LOG = 1; // enable logging