test of the simulator implementation

(ns clj-bots.hello-world.sim
  (:require [clj-bots.pin-ctrl :as pc]
            [clj-bots.pin-ctrl-simulator.implementation :as sim]))

Create a simulator board, vaguely modelling a small subset of a BBB's pins.

(def board
  (pc/create-board :simulator
                   {:board-class :onboard ; not too important yet
                    :pin-modes {[:P8 14] [:gpio :ain]
                                [:P8 15] [:ain :aout]
                                [:P8 16] [:gpio]}
                    :analog-bits {[:P8 14] 8
                                  [:P8 15] 8}}))

Now let's say we want to initialize pin 14 on header :P8 as a GPIO pin, and use it to control an LED that we'll blink.

(def pin-n [:P8 14])
(def pin (pc/get-pin board pin-n))
(pc/set-mode! pin :output)

Now let's set up some blinking

(def blink-thread
  (future
    (loop []
      (pc/toggle! pin)
      (Thread/sleep 1000)
      (recur))))

And while our write loop is running, let's monitor the state of the pin

(let [interval 200
      duration 10000
      steps    (/ duration interval)]
  (doseq [i (range steps)]
    (Thread/sleep 200)
    (println "Value at" (* i interval) (pc/read-value pin))))

Now that we're done, let's close up shop.

(future-cancel blink-thread)
(pc/set-mode! pin :off)