Help us understand the problem. What is going on with this article?

ClojureでArduino〜Lチカ〜

More than 1 year has passed since last update.

はじめに

今回は、Clojureを使ってArduinoでLチカをしてみたいと思います。
使用するClojure APIはClodiunoです。

Clodiuno - Clojure API for Arduino
clodiuno(Github)

Arduino側の準備

Arduino IDEを起動し、ファイル -> スケッチの例 -> Firmata -> Standard Firmataを選択し、出てきたスケッチをそのままArduinoへ書き込みます。

書き込み終わると、Arduino IDEの下の画面にたくさん情報が表示されると思います。
その中からUsing Portの記載箇所を探し、その値を覚えておきます。
(おそらく、ツール -> シリアルポートでの設定と同じだと思いますが・・・)

avrdude: Version 6.3, compiled on Jan 17 2017 at 11:00:16
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

(〜中略〜)

         Using Port                    : /dev/ttyACM0  ;; <= ここ
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us

(〜後略〜)

Clodiunoを使う準備

.lein/profiles.clj[clodiuno "0.0.4-SNAPSHOT"]を追記
自分の場合は、以下のような感じになりました。

.lein/profiles.clj
{:user
 {:plugins [[cider/cider-nrepl "0.18.0-SNAPSHOT"]
            [clodiuno "0.0.4-SNAPSHOT"]]  ; <= ここに追記
  :dependencies [[org.clojure/tools.nrepl "0.2.12"]
                 [cljfmt "0.5.7"]]}}

プロジェクト作成

新規プロジェクトを作成し、中に入ります。

sudo lein new blinking
cd blinking

プロジェクト内のproject.cljにも[clodiuno "0.0.4-SNAPSHOT"]を追記。

project.clj
(defproject blinking "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [clodiuno "0.0.4-SNAPSHOT"]])  ; <= ここに追記

Lチカプログラム

src/blinking/core.cljにプログラムを記載します。

core.clj
(ns blinking.core
  ;; Clodiunoを使用する。
  (:require [clodiuno.core    :refer :all])
  (:require [clodiuno.firmata :refer :all]))

;; NoSuchPortExceptionが出る場合は、以下を追記する必要があります。
;; ※ ここで2番めの引数にUsing Portの値を使用
(System/setProperty "gnu.io.rxtx.SerialPorts" "/dev/ttyACM0")

;; Clodiunoのarduinoメソッドを使ってboardを定義
;; ※ ここでもUsing Portの値を使用
(def board (arduino :firmata "/dev/ttyACM0"))

;; 待機時間(ms)
(def delay-time 250)

;; 13ピンを出力モードに設定
(pin-mode board 13 OUTPUT)

;; Lチカプログラム
(defn blink []
  (dotimes [n 10]                   ; 10回ループ
    (digital-write board 13 HIGH)   ; 13ピンをHightへ
    (Thread/sleep delay-time)       ; 待機
    (digital-write board 13 LOW)    ; 13ピンをLowへ
    (Thread/sleep delay-time)))     ; 待機

最後に

このClodiunoというClojure APIは5年ほど前から更新が止まっていたので使えるか心配でしたが、今でも使えるみたいで安心しました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away