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. For now not every thing is supported, I have implemented digital read/writes and analog read.

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))

 (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 "/dev/tty.usbserial-A6008nhh")] 
     ;;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.