debiancdn

AWS, Content Delivery Network and Debian

カテゴリーアーカイブ: arduino

arduino-0015にしたらほんのちょっとだけだけどバイナリが小さくなったが,Wireライブラリがおかしい

0015 – 2009.03.26をみると

Reinstating use of core.a library in the build process, slightly shrinking compiled sketch sizes. (Thanks to William Westfield.)

とあったので試してみたら,手元のスケッチが17520->16798Bytesになった.4.1%,722バイトだがこれは大きいかもしれない.

とおもったら動かなくなったぞ.SDのライブラリかWireかがあやしいとふんでいるので近いうちに調べることにする.

で.調べてみた.SDは問題ない(AF_SDLog)のだが,WireのI2Oがちゃんと読めてないことがわかった.

hardware/libraries/Wire/Wire.o が 22848bytesでcompileされたのが配られてたので,消してやりなおしたらうまく動いた.compile後は22780bytesになった.

うーむ.配られてる*.o全部消したほうがいいんじゃねえか?..と思ったので,svnからとってきてbuildすることにする.

svnにやたら時間がかかったが,xcodebuildはわりとすぐおわった.自前でつくったarduino-0015では動作した.よかったよかった.

IR受信のつづきの続き

昨日の続き.

フィリップスのはRC5という名前らしいのだが,この資料を見る限り,国内各社のとはぜんぜん違う.ここのwebはとてもよくまとまっていて,NECのとかsonyのとかシャープのとかものっているのでこれで網羅できそう.

とりあえず手元のは日立のC-RL4と書いてあるリモコンなのだがこのリストによるとNEC方式のようだ.

とりあえずNEC方式の場合はHIGHシグナルの間隔で0/1を現わしているのでその間隔(単位はμ秒,実際にはいろいろ遅延があるので数字のようにはいかないはず)をとってみることに.

電源ボタンをいれたとき.

389 414 397 397 1510 397 1510 388 1502 1502 1511 1511 398 1504 389 1502 1512 1511 1502 389 1502 395 397 397 397 397 397 1502 388 1502 1507 1511

というかんじに.

規格では1のとき1690で0のとき565ということだが数字を調整すりゃ問題なく区別がつくので,おそらく

00001010 11110101 11101000 00010111

ということなんだろう.カスタムコード,その反転,データコード,その反転の順にならんでるのでちゃんととれてそう.

各社のコード比較してるページをみると無事日立で電源ボタンであるところがとれた.そりゃそうか.

まあそのうちライブラリにして出すか.

arduino IDEを使わないときは関数を先に宣言しとけという話

素直にIDEつかってればまったくはまらなかったのだが,emacsで書いてそれをmakeするとcompileできない問題にちょっとはまる.以前arduinoをemacsからというかコマンドラインで使うのを書いたけど,これだけでは足りなかったという話.

Blinkを一部改変した以下のコード.

int ledPin = 13;                // LED connected to digital pin 13
void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}
void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
  blink();
}
void blink()
{
}

arduino IDEからだと何の問題もなく,compileできるのだが,これはIDEが

#include "WProgram.h"
void setup();
void loop();
void blink();

のように

#include "WProgram.h"

に続いて

void setup();
void loop();
void blink();

という関数宣言を元のコードに補ってからcompileしているおかげでした.

とうぜん補っていないと

 error: 'blink' was not declared in this scope

とのようにおこられる.

以前arduinoをemacsからというかコマンドラインで使うに書いたMakefileでは make applet_files で

        test -d applet || mkdir applet
        echo '#include "WProgram.h"' > applet/$(TARGET).cpp
        cat $(TARGET).pde >> applet/$(TARGET).cpp

のように,単に Wprogram.hをincludeしただけだったのが原因でした.

まとめ.arduino IDEを使わないときは関数を先に宣言しとけ.ということで.

ubuntu上でemacsからArduinoを使う話

emacsからArduinoを使う話を書いたのはいいのだが,macosxでの話だったのでubuntuにつっこんだらいろいろとやることがありました.

arduinoのpageからlinux用のarduino-0012-linux.tgz をとってきて展開しただけでは使えないので,必要なjava関係とAVRのbuild環境をとってきていれる.

 apt-get install avrdude sun-java6-jre sun-java6-fonts sun-java6-plugin gcc-avr avr-libc

そしたらMakefileをcopyする.

 ~/working-dir/arduino-0012/hardware/cores/arduino/Makefile .

んでubuntuにあわせていろいろ変更.

  • シリアルデバイス位置を指定する

  • AVR関係のtoolをubuntuのを使うように指定する

  • パス修正

そのdiffをはっておく.

$ diff -u Makefile.orig Makefile
--- Makefile.orig	2009-01-01 12:44:21.000000000 +0900
+++ Makefile	2009-01-01 12:37:24.000000000 +0900
@@ -35,8 +35,10 @@
 # $Id$
 
 TARGET = $(notdir $(CURDIR))
-INSTALL_DIR = /Users/dmellis/Source/arduino/trunk/build/macosx/build/work
-PORT = /dev/tty.usb*
+## INSTALL_DIR = /Users/dmellis/Source/arduino/trunk/build/macosx/build/work
+INSTALL_DIR = $(HOME)/working-dir/arduino-0012
+PORT = /dev/ttyUSB*
 UPLOAD_RATE = 19200
 AVRDUDE_PROGRAMMER = stk500v1
 MCU = atmega168
@@ -46,7 +48,8 @@
 # Below here nothing should be changed...
 
 ARDUINO = $(INSTALL_DIR)/hardware/cores/arduino
-AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin
+## AVR_TOOLS_PATH = $(INSTALL_DIR)/hardware/tools/avr/bin
+AVR_TOOLS_PATH = /usr/bin
 SRC =  $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
 $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
 $(ARDUINO)/wiring_pulse.c $(ARDUINO)/wiring_serial.c \
@@ -93,7 +96,7 @@
 # Programming support using avrdude. Settings and variables.
 AVRDUDE_PORT = $(PORT)
 AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex
-AVRDUDE_FLAGS = -V -F -C $(INSTALL_DIR)/hardware/tools/avr/etc/avrdude.conf \
+AVRDUDE_FLAGS = -V -F -C $(INSTALL_DIR)/hardware/tools/avrdude.conf \
 -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \
 -b $(UPLOAD_RATE)

emacsがArduinoをつかうためのtips 2つ.

2つある.Makefileの用意と,emacsを楽にするもの.

まずひとつめ.2008-05-12 – cinnamonbear’s diary をみていたらarduinoをいじるMakefileのいじりかたが書いてあった.

次にコピーしてきた Makefile の一部を以下のように書き換えます.
TARGET = Example
INSTALL_DIR = /opt/arduino-0011

と書いてあったので試してみたけど,arduino-0012ではかわったようで,TARGETのほうはいじる必要がなさげ.ようするに,

 ~/working-dir/arduino-0012/hardware/cores/arduino/Makefile

をとってきてから,

INSTALL_DIRをこんなかんじにいじるだけですんだ.(自分は ~/working-dir/arduino-0012以下にインスコしている)

 INSTALL_DIR = /Users/yaar/working-dir/arduino-0012

emacsを楽にするためには

arduino-mode

を導入.

 git clone git://github.com/bookest/arduino-mode.git

としてarduino-mode.elを適当なとこにcopyして,.emacsに追記.

(setq load-path (cons "~/.emacs.d/elisp" load-path))
(load "arduino-mode")
(setq auto-mode-alist (cons '("\\.pde$" . arduino-mode) auto-mode-alist))

まあこれだけのことなんだが.これで楽にemacsでいじって,書いたら,

 make && make upload

してやればArduinoのIDEを使わなくてもokと.

make @ osakaに参加してきた

前半は小林さんのチュートリアル.後半はこないだのMake02のレポート,船田戦闘機さんと小林さんによるトークと続く.

とりあえずメモ.たいていのセミナーは自分の力がついた気になるものですが,今回のも実にいい会でした.こんな機会を用意してくれた小林さん,船田戦闘機さん,オライリーさん,KYORITSUさんに感謝だな.

  • 自分が事前に小林さんに質問していた,ArduinoやGainerの耐久性とRADの話も含めてくれた.
    • 耐久性は事実上問題ない.学生もほとんどこわしたことない.AVR丈夫.
    • RADはけっきょくscriptであるrubyのよさが生かせないのではないか
  • 本邦初公開 Arduino言語リファレンスの日本語訳ver11と12がまじっているが,まちがいもみつけたので直しているとのこと.12の目玉はethernetシールド(つかいやすいけど,下のレイヤのサポートであって,あまり期待しすぎないほうがいい. Telnet程度)Fermataもある.この解説では,CとC++がまじってたりする説明になっているのに注意.Arduino言語はそのへんがまじっているので,良くCを知っている人は気持わるいかもしれないけど,そのへんは妥協して読むこと.
  • lilypad arduinoをつかったトートバックみつばちトートhttp://www.mitsubachi-tote.com/news/make_tokyo_meeting_02.phpの話がおもしろい.何をやりたいか,ではなくて先にlilypadを使いたい,lilypadかわいいからね,という話だったらしい
  • 以下船田さんが小林さんに質問する形ですすめられたトーク.
    • 小林さんは,このへんでもっとすごいプロセッサにして決定版にしたほうがいいと思っているでしょうか?
      • 今はあるていどシンプルなのがいい.間にサーバがあったりしてやりたいことができちゃえばokだと考えている.プロトタイプならそれでいいんじゃない.
    • 32K版のarduinoはメモリがあるのでいい?
      • いくつかの場で議論はされている.オソハードウェア万歳
    • sanguinoはどう? http://sanguino.cc/
      • メモリはさらにでかい64Kでいいかも.
    • chumbyとかいろいろオソハードがあるけどarduinoがいちばんハデなんでは
      • そのとおり.arduinoは30種類くらいあるけど,それぞれ思想があっておもしろい.
    • chumbyはオソハードとしてのおもしろさには至っていない
      • プロの力が必要ですよね.かっちりしすぎ? オソハードが動いてる事例としてはarduinoが一番な気がする.
    • 小林さんはwirelessに集中してるけどなんで?
      • 無線はいろんな問題がおこるから大変だけど,線がなくなったときの体験が重要だと思っているからがんばっている.ZigBeeがもっと安くなってくれないかな.XBeeはいいバランス.
    • Lilypadの人も言ってたけどバッテリーが一番むずかしい?
      • どの電池にするのかがむずかしい.けっきょく安全装置のはいったリチウムポリマかな.コイン電池もけっこう怖い.バッテリーを安全にあつかうモジュールが増えてほしい.
    • マテリアルコンピューティングを言ってやろうと考えている.
      • なんとかコンピューティングと言う人はいろいろかんがえているのでうまくいくといい.http://ambient.media.mit.edu/materialcomputing/
    • 世代論があるがどうか.
      • 電子工作の世代論.秋葉や工作自体がおもしろい人が第一.
      • そのあと何ができるか,という人がいる.
      • 最近は美大とかで興味を持つ人がいる.美大の女性は得.いろんなことを秋葉の店がおしえてくれる.
    • 鈴商の親父は,これからは女の子だな,と言っている.
      • 鈴商の上のロボをやる店とかでも,組立に興味があるのは男,つかいかたは女性だといっていた.
    • 女性は感性,見た目で部品を選ぶ.電子工作は手段でしかない人が出てきている.LED売り場に女性はよくいる.
      • 秋葉がかわっていくとおもしろい.というか,かわりつつある.
  • Junichi KANEBAKOさんの発表Mountain Guitar – Protoyping with GAINERIAMASのGangu Projectで誰でもつくれる楽器玩具としてはじめる.6代目.12/25-27 AXIS GalleryというところでIAMASの発表をする
  • 質疑
    • 省電力がんばってる人はいないの?
      • センサからPCにとばす,とかあるのであまりそれ自体はいないかな
    • なぜusではなくてeuからでてきたのか
      • べつに国境はない.プロジェクトの解散とかいろいろあったけど.でもやっぱり物理制約があるので,だいぶ障壁はさがったとはいえ大変