clodiuno - A Clojure API for the Firmata Protocol

Firmata is a protocol and a firmware for Arduino, it allows you to control Arduino via a serial protocol from any language that has serial port support. I had a lot of free time during the holidays so I started to implement the protocol, unfortunately protocol isn't well documented, so it took a while to get a hang of it.

You can grab a copy of clodiuno here. Of course no Arduino introduction is complete with out blinking something, below snippet should give you a feel for the API, there are more examples in the examples folder included with the project.

(ns sos
  (:use :reload-all clodiuno.core)
  (:use :reload-all clodiuno.firmata))

(def short-pulse 250)
(def long-pulse 500)
(def letter-delay 1000)

(def letter-s [0 0 0])
(def letter-o [1 1 1])

(defn blink [board time]
  (digital-write board 13 HIGH)
  (Thread/sleep time)
  (digital-write board 13 LOW)
  (Thread/sleep time))

(defn blink-letter [board letter]
  (doseq [i letter]
    (if (= i 0)
      (blink board short-pulse)
      (blink board long-pulse)))
  (Thread/sleep letter-delay))

(defn sos []
  (let [board (arduino :firmata "/dev/tty.usbserial-A900adPT")] 
    ;;allow arduino to boot
    (Thread/sleep 5000)
    (pin-mode board 13 OUTPUT)

    (doseq [_ (range 3)] 
      (blink-letter board letter-s)
      (blink-letter board letter-o)
      (blink-letter board letter-s))

    (close board)))

This will make your Arduino call for help. Result will be similar to the following but with a single LED.