Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Arduino UNO系でも動くLISP実装 uLISP その2:Digital/Analog Pinを扱う

Arduinoの上で動いているので、DigitalやAnalogも使えます。
公式リファレンスによると以下のような関数があります。

Arduino interface
millis, for-millis, with-i2c, restart-i2c, with-serial, with-spi, with-sd-card, pinmode, digitalread, digitalwrite, analogread, analogwrite, delay, note

今回は、このうちDigital PinとAnalog Pinの扱いについて

実際のところ

pinmode

13番ピンを出力(=1 or t)に。

;; OUT :: 1 or t
 (pinmode 13 t) 

;; IN :: 0 or nil
 (pinmode 13 nil)

digitalread

D4を入力に。番号はボードを参照してください。

(digitalread 4)

digitalwrite

13番をHIGH/LOWに

;; OUT :: 1 or t
(digitalwrite 13 t)

;; IN :: 0 or nil
(digitalwrite 13 nil)

analogread

UNOのA3(3番)を読むのは以下の通り。
結果はt (HIGH) または nil (LOW)でかえってきます。

(analogread 3)

公式によると、"A0"等の記法を使いたいのなら変数を使え……とのこと。
たとえばArduino ZeroでA0は15番なので

(defvar A0 15)

analogwrite

PWMでアナログ出力を実行します。

;; 3番に512を
(analogwrite 3 512)

ピンの対応関係はArduino IDEでやるときと同じ筈……ですが、一応確認してから使ってください。
uLisp - Language reference
Arduino Reference