Home

Awesome

footballbot

A module to control the football bot for NodeBots of London's International NodeBots Day celebrations.

You should install the following sketch on the Dagu mini driver board:

const byte MOTOR_SPEED = 0xF0;
const byte MOTOR_DIRECTION = 0xF1;
const byte DIGITAL_WRITE = 0xF2;

void setup()
{
  Serial.begin(9600);

  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop()
{
  if(Serial.available() == 3) {
    digitalWrite(13, HIGH);

    byte command = Serial.read();
    byte pin = Serial.read();
    byte value = Serial.read();

    if(command == MOTOR_SPEED) {
      analogWrite(pin, value);
    } else if(command == MOTOR_DIRECTION || command == DIGITAL_WRITE) {
      digitalWrite(pin, value);
    }
  }
}

Then execute a node script that looks something like:

var FootballBot = require('footballbot')

var footballBot = new FootballBot('/dev/tty.linvor-DevB')
footballBot.on('ready', function() {
  var left = footballBot.attach(new FootballBot.Motor({
    pins: {
      pwm: 9,
      dir: 7
    }
  }))

  var right = footballBot.attach(new FootballBot.Motor({
    pins: {
      pwm: 10,
      dir: 8
    }
  }))

  this.repl.inject({
    left: left,
    right: right
  })

  // pull pin 13 high
  this.digitalWrite(13, this.HIGH)

  // turn both motors on
  left.start()
  right.start()

  setTimeout(function() {
    // turn left
    left.speed(255)
    right.speed(0)
  }, 1000)

  setTimeout(function() {
    // full reverse!
    left.reverse()
    left.speed(255)
    right.reverse()
    right.speed(255)
  }, 2000)

  setTimeout(function() {
    // stop
    left.stop()
    right.stop()
  }, 3000)
})

Constructor options

The board constructor supports an options argument. The default values for this are:

var footballBot = new FootballBot('/dev/tty.linvor-DevB', {
  // create a repl and expose it as footballBot.repl
  repl: true
})

The FootballBot.Motor class supports a similar API to the Johnny-Five equivalent.