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.
Player