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.