AdSense

ラベル Arduino の投稿を表示しています。 すべての投稿を表示
ラベル Arduino の投稿を表示しています。 すべての投稿を表示

2016年12月8日木曜日

ピクセルRGB LEDでクリスマスイルミネーションみたいなのを作る

AliExpressにて安価でピクセルRGB LEDストリップが購入できることが分かったので、arduinoで光らせてみました。


使うもの:

・ピクセルRGB LEDストリップ

      
 AliExpressで500円くらいのを使いました。
 ws2812bで探すとよいです。

・Arduino

      


使ったソフトウェア:

・光らせる用のサンプル

   https://github.com/adafruit/Adafruit_NeoPixel

・Aruduino Nano(互換品)用のUSBドライバ

※純正Arduinoを使う場合は必要ありません。
   http://www.wch.cn/download/CH341SER_ZIP.html


作り方:

1.サンプルコードを頼りに配線する

といっても、下記3つをつなぐだけ
  ・LEDの+5VをArduinoの+5VまたはVinにつなぐ
  ・LEDのGNDをArduinoのGNDにつなぐ
  ・LEDのDinまたはDoをArduinoの6番PINにつなぐ

2.プログラムをArduinoで実行する

上記のAdafruit_NeoPixelをzipのままArduinoのexampleに取り込み、実行するだけでOK。

できあがり:

10分とかからずに綺麗なイルミネーションが確認できました。



とても簡単なので、今後何に応用するか考えるのが楽しみです。

2016年10月23日日曜日

デルタ型3Dプリンターを作る記録(後編)

前回フレームと機構が組み上がりましたので、
今回は電装系をつけていきます。

やることは、メインの制御基板(Arduino互換機)組み立てと、
周辺デバイスの接続です。

メイン基板の組み立てとして、まずLCDを接続します。
ここでは接続する線の向きに注意します。
私の場合は、マニュアルが間違ってたので、基板のシルクで判断しました。


次に、モーター制御用のチップにヒートシンクを貼り付けます。
両面テープがついてるので、付けるだけです。
ただし、回路にくっつかないように注意します。



ヒートシンクをつけ終わったら、メイン基板に接続します。
ここまでできたら、接続図に従って配線していきます。

配線図ではスッキリしてますが、実際につなぐと下記のようにかなりごちゃごちゃになります。

配線を終えたら、メイン基板をフレームに付けます。


線はまだ束ねてませんが、すっかり3Dプリンタらしくなりました。


電源の種類がマニュアルと違ってたので、テスターでプラスマイナスと電圧を確認しておきます。


ここまでできたら、パソコンからメイン基板にファーム(Arduino SDKで書き込む)の書き込みます。
マニュアルには、ソフトを書き込まなくても初期画面がLCDに出るとありましたが、私の場合はでませんでした。気にせずファームを書き込んだら画面がでたので良しとします。




制御ソフトによる各軸の設定をします。
この辺はややこしいので、マニュアルやWebの情報をよく見て慎重に調整しました。
特にPronterfaceの設定はマニュアルだけは不十分であり、下記のサイトを参考にさせていただきました。
http://techbase.biz/Machines/Pronterface.htm


・ファーム(Arduinoで書くメイン基板の制御ソフト)の軸設定
・プリントソフト(Pronterface)の軸設定
・スライサーソフト(Cura)の設定

と、いずれも正確に設定する必要がありました。
設定を終えたらサンプルを試しプリント。




無事サンプルデータのプリント成功しました。

2015年11月29日日曜日

ミニ四駆をワイヤレス(Wi-Fi)で動かす④ 電池給電化

前回までの記事で、制御のワイヤレス化は実現できましたが、
バッテリーが電源からの給電だったので、今回電池給電にして完全なワイヤレスにしました。


これ迄の記事

http://mementomorisince2013.blogspot.jp/2015/11/esp-wroom-02.html
ワイヤレスモジュール(Wi-Fi)の使い方

http://mementomorisince2013.blogspot.jp/2015/11/drv8832arduino.html
モーターコントローラーの使い方

http://mementomorisince2013.blogspot.jp/2015/11/wi-fi.html
ミニ四駆に接続してワイヤレス化

やったこと


まずは、電池だけで動くことを確認します。
電池BOXからの給電で動くことが確認できたので、モーターとモーターコントローラー側はシャシーに乗る電池をつかうことにします。

ただし、そのままつけるとモーターが直接電流を拾ってしまうので、エナメル線でモーターコントローラ経由になるように取り回します。

モーター側も絶縁ビニールテープで金具に接触しないようにします。



電池からもエナメル線で外に流します。



このように、元の場所に収まりますが、電気的には接触してません。



エナメル線を外に出します。


ワイヤレスモジュールのESP-WROOM-02は、単三乾電池(1.5V)を3つを直列につないで4.5Vにし、レギュレータで3,3Vにして流し込みました。ばっちり動いています。

これで完全にミニ四駆のワイヤレス化です。


モーターコントローラは後ろのバンパーに載せました。


シリアルのチップも載せてるので、ブレットボードの配線はまだごちゃごちゃしてます。
追々整理して小型化するとして、とりあえず動かしてみます。



無事動きました!
速度は、モーターコントローラで調整できます。

不恰好ではありますが、とりあえずミニ四駆のワイヤレス制御成功です。
ハードの知識があまり無いので試行錯誤でしたが、よい勉強になりました。



2015年11月3日火曜日

ミニ四駆をワイヤレス(Wi-Fi)で動かす③ モーターと無線を結合して確認

前回、前々回と、単体のモジュールは動かせたので、いよいよ組み合わせて
ミニ四駆をWi-Fiでリモートコントロールします。

前々回のWi-fiモジュール(ESP-WROOM-02)を動かした記事
http://mementomorisince2013.blogspot.jp/2015/11/esp-wroom-02.html

前回のDCモーター(DRV8832)を動かした記事
http://mementomorisince2013.blogspot.jp/2015/11/drv8832arduino.html


使ったもの
・ESP-WROOM-02

・DRV8832使用DCモータードライブキット
・ミニ四駆


とりあえず、前回、前々回の組み合わせだけで、
ミニ四駆のモーターを開始、停止、逆回転できました。

ESP-WROOM-02のIO13とIO14を、DRV8832のIN1とIN2に接続しています。
写真、動画では、IN1とIN2それぞれがHIGHになるとLEDを点灯させました。





動画はこちら



ソースコードはこちら


さて、今回はモーター、WifiそれぞれにUSBシリアルとArduinoから5V電源供給していますが、制御がワイヤレスでも、電源が有線では意味無いので、次は電池駆動を考えます。

続く。

ミニ四駆をワイヤレス(Wi-Fi)で動かす② モーターコントローラ(DRV8832)をArduinoで制御


ESP-WROOM-02を動かしてみる

上記の記事の続きです。
ミニ四駆wifi遠隔操作環境作成のため、モーター側の制御を確認します。

今回はDRV8832のDCモータードライブキットを使用します。




Arduinoで動かすスケッチをググって探すと、DRV8830の記事は見つかりますが、
DRV8832の記事が見つかりません。
どうやら品番間違って買ってたようです。

サンプルスケッチが無いけどめげません。
どうやら、DRV8830はI2Cタイプ、DRV8832はポート制御タイプのようです。

なので正転、逆回転の制御ですが、DRV8832はシンプルで、
IN1, IN2をHIGH, LOW設定することで制御できました。

●正転
 IN1 HIGH
 IN2 LOW
●逆回転
 IN1 LOW
 IN2 HIGH
●停止
 IN1 LOW
 IN2 LOW

で動きました。
とりあえずArduinoとシリアル通信でモーターの動きを確認します。

下記は、シリアルで上記PINをHigh/Lowして正転・逆回転・停止するだけのスケッチです。


とりあえず動いたので、これでミニ四駆作成を進めます。

2015年11月1日日曜日

ミニ四駆をワイヤレス(Wi-Fi)で動かす① Wi-Fiモジュール(ESP-WROOM-02)を動かしてみる

ESP8266が乗ってるESP-WROOM-02を動かした記録。DMM,makeのミニ四駆のwifi操作ワークショップにエントリーできなかったので、自前で部品買ってどこまで出来るか頑張ってみる。


使ったもの

・ESP-WROOM-02(wifiモジュール) ※リンクは参考
   https://amzn.to/46pspZ8
・FT232RL USBシリアル変換 ※リンクは参考
  https://amzn.to/3G5YZET
・3.3v レギュレーター
・47μF、0.1μFコンデンサ
・10k抵抗



秋月電子で購入。



所々のブログを参考に回路を組む。
どうやら、「ESP-WROOM-02ピッチ変換済みモジュール《シンプル版》」を使った例は少ない模様。PINに注意しながらブレッドボードに回路を組む。




USB挿した時点では、ESP-WROOM-02と通信できなかったが、
ESP-WROOM-02の3.3V入力を抜き差しすると、シリアル通信OK。

その後、ATコマンドでWifi接続OK。

こちらを参考にArduinoのスケッチアップロード設定。

途中で、
error : espcomm_open failed
となって書き込み失敗。

ググると、下記PIN設定必要なことがわかる。
GPIO 0 -> GND(PullDown)
GPIO 2 -> 3.3V(PullUp)

設定後は、書き込みOK。
ESP-WROOM-02だけ3.3V入力PIN挿し直してリセット。



無事プログラム書き込み成功。
webサーバとして動きました。

次回はモーターだ。


2015年8月30日日曜日

びんぼうでいいの with LCD [U3RLCD144]を動かす

Arduino互換機「びんぼうでいいの」でセットになっていた128*128のフルカラーLCDを動かしてみました。

びんぼうでいいの with LCD [U3RLCD144]
http://www.aitendo.com/product/10931

aitendoの上記ページの説明にある通り接続します。

手順通りに行くと、
Adafruit_GFX.h
と、
TFT_ILI9163C
のスケッチソースが必要なので、ググって入手します。

Adafruit-GFX-Library
ハイフン[-]があるとArduinoに認識されないのでAdafruit_GFXにフォルダをリネームする。

TFT_ILI9163C
aitendoのリンクのやつは古いっぽいので、上記からとってくる。
最新ソースは、サンプル数が倍くらいあります。

両方ともArduinoのライブラリに追加するとexampleのビルドが通るようになります。
そして実行すると、だいたい表示されるのですが、LCDの上の方が崩れてます。

理由がわからずググると、setRotation()をいれると解決することがわかります。
最新ソース(2015/08/30)だと、プログラムでのPINの指定はCSとDCだけです。

修正後ソース(変更部分抜粋):
#define __CS 10
#define __DC 9

TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC);

void setup() {
  tft.begin();
  tft.setRotation(2);
}



無事表示することができました。
いろんなサンプルがあるので、動かしてみると面白いです。



2015年8月23日日曜日

Arduino互換機をつくって動かす

半田付けの練習に、Arduino互換機を2つ作りました。



・びんぼうでいいの(左)
・ちびでぃ〜の(右)












「びんぼうでいいの」とは、aitendoさんで売っている、500円のArduinoの基盤です。
ただし、これだけでは部品が足りないので、部品パック(250円)とATMEGA328(230円)を買います。合計で1000円くらいです。
こまかい抵抗などはすでに実装済みなので、半田付けは簡単に出来ます。
見た目も本家に近いですね。



びんぼうでいいの
http://www.aitendo.com/product/10470

部品パック
http://www.aitendo.com/product/10471

ATMEGA328
http://www.aitendo.com/product/10415




「ちびでぃ〜の」は、Make Faire Tokyo 2015のちっちゃいものクラブさんで購入しました。こちらも1000円です。
小さい抵抗やこまかい半田付けが必要で、比較するとこちらの方が難しいです。
見た目はかなりメカメカしいです。

ちびでぃ〜の2
http://tiisai.dip.jp/?page_id=1296


本家のArduinoが3240円なのを考えると、とても安いですね。
なお、本家のArduino UNOは壊しても無償交換の保証が付いています。





今回は秋葉原のはんだづけカフェさんで作業しました。



どちらも無事にArdinoのスケッチが動かせました。





2015年8月2日日曜日

Arduino Nano 互換機を動かす

Make Faire2015にて、 ちっちゃいものくらぶさんで、
Arduino Nano互換機を500円(!)で購入したので動かしてみた。 

必要なのは、説明通りCH340のUSBドライバ。

こちらからCH341SER.ZIPを入手。
http://www.wch.cn/download/CH341SER_ZIP.html

Nanoを接続したまま、インストールで認識しました。

書き込みは
  ツール - マイコンボード - Arduino Nano w/ATmega328
を選択して無事サンプルのBlinkを書き込めました。

ファイル - スケッチの例 - 01.Basics - Blink

 

本物Arduino Nanoはこちら。
https://amzn.to/3I9SkKr

2015年4月25日土曜日

Androidでアルコールチェッカーをつくる

アルコールセンサー(MQ-3)をもっと簡単に使いたいと思い、
Arduino経由でAndroidとつなげてみることにしました。


使うもの

・Android端末(Nexus6)
・Arduino UNO
・アルコールセンサー(MQ-3)



まず参考にしたのは、
Androidで簡単にArduinoと接続できるライブラリ

Physicaloid Library
https://github.com/ksksue/PhysicaloidLibrary

それを使ってアルコールセンサーを動かしているPocketDuinoです。

PocketDuino
http://www.physicaloid.com/wiki/doku.php?id=hardware:pocketduino


PocketDuinoがあれば良かったのだけど、既に販売終了しているようなので、
諦めてArduinoでやってみることにしました。



作業開始メモ

1.PysycaloidをEcripseに取り込んでサンプルソフトを実行する。
 しかしながら、シリアルのOpenが出来ない。Arduinoを認識していない模様。

 デバッグしようにも、Android端末のUsbがArduinoでふさがってる。
 なので、Wifiデバッグを試してみる。

 Wifiデバッグのやりかた
 ・PCのとAndroidをUSBで接続し、下記コマンドをうつ
  $ adb tcpip 5555
  $ adb connect 192.168.1.1:5555     ※IPアドレスはAndroidのやつを指定
 ・USBを抜いても、普通にログだしたりできます。
  $ adb shell logcat

 もとに戻すにははadb usbでOK

 無事デバッグ可能になりました。超簡単。

で、ログを見てみると、
UsbHostManagerはデバイス認識しているのだけど、UsbAccessorがpermissionで弾かれている?
デバイス接続が出来ない。


ログ
04-25 13:29:07.970: I/ActivityManager(812): START u0 {flg=0x10000000 cmp=com.android.systemui/.usb.UsbPermissionActivity (has extras)} from uid 1000 on display 0
04-25 13:29:07.973: V/WindowManager(812): addAppToken: AppWindowToken{3c1d4ade token=Token{162dfa19 ActivityRecord{2b414560 u0 com.android.systemui/.usb.UsbPermissionActivity t592}}} to stack=1 task=592 at 0
04-25 13:29:07.995: D/UsbAccessor(13195): Doesn't have permission device(0) : UsbDevice[mName=/dev/bus/usb/003/002,mVendorId=9025,mProductId=67,mClass=2,mSubclass=0,mProtocol=0,mManufacturerName=Arduino (www.arduino.cc),mProductName=null,mSerialNumber=A4139373630351102081,mConfigurations=[


http://developer.android.com/guide/topics/connectivity/usb/host.html
こちらを参考に、intent-filterとか設定してみる。
 →右USBを刺した時に起動されるようになった。そうじゃない。

Permissionが必要なのか?
 →SystemアプリじゃないとUSBのPermissionは設定出来ない。エラーになる。

ソースを解析する。
getPermission()にて、初回起動時はPermissionが無いので、ここでRequest permissionする。

04-25 15:24:48.562: D/UsbAccessor(23353): Request permission : UsbDevice[mName=/dev/bus/usb/003/002,mVendorId=9025,mProductId=67,mClass=2,mSubclass=0,mProtocol=0,mManufacturerName=Arduino (www.arduino.cc),mProductName=null,mSerialNumber=A4139373630351102081,mConfigurations=[


で、画面にPermission許可するダイアログがでる。ここで許可する。
04-25 15:32:16.609: I/ActivityManager(812): START u0 {flg=0x10000000 cmp=com.android.systemui/.usb.UsbPermissionActivity (has extras)} from uid 1000 on display 0

しかし、その後のログで、

04-25 15:25:21.747: D/UsbAccessor(23353): Doesn't have permission device(0) : UsbDevice[mName=/dev/bus/usb/003/002,mVendorId=9025,mProductId=67,mClass=2,mSubclass=0,mProtocol=0,mManufacturerName=Arduino (www.arduino.cc),mProductName=null,mSerialNumber=A4139373630351102081,mConfigurations=[

が出る。許可したはずなのに、Permissionが無いことになる。
↑嘘でした。ちゃんとダイアログでPermissionを許可してやれば大丈夫。xmlのパーミッション許可とか不要。


で、再度Debugで動かして、mSerialのmDeviceをみると、Arduinoがちゃんと接続されていることがわかる。

ただし何故かSerialが開けない。


Physicaloid.javaにて、mSerial openでfalseになる。これが原因ぽい。

ソースを潜ると
UsbCdcConnection.javaのopen()にて、falseを返しているのがおかしい。

どうも、既にOpenになっている場合は、else側に行くのだが、そっちだとFalseを返してしまうようだ。
なので、すでにOpenの場合もTrueを返すようにする。

UsbCdcConnection.javaを下記に修正


すると今度はInitのcontrolTransfer()で失敗する。

http://android.ohwada.jp/archives/tag/mbed
ここを参考にさせてもらうと、
Arduino Uno では、CDC ACM は、Interface 0 固定らしい。
元のソースでは変数mInterfaceNumになってて、これが1だったのが間違い。
これも0にしてやる。

2箇所でcontrolTransfer()が使われてるので、どちらも0にする。


UartCdcAcm.java



これでようやくSerialがOpenできるようになる。
こうして無事アルコールセンサーの値がとれました。

組み合わせだけでいけると思ってましたが、意外に時間がかかりました。

まとめ:

1.AndroidアプリはPocketDuino用に作られたのを流用させてもらう

https://github.com/ohwada/PocketDuino

2.AndroidからArduinoを認識させるためにPhysicaloid Libraryをつかう

https://github.com/ksksue/PhysicaloidLibrary/tree/master/SampleProjects

 ただしこのままでは動かない。Arduino Uno用に上述した変更が必要。

3.ArduinoのスケッチもPocketDuino用に作られたのを流用。

https://github.com/ohwada/PocketDuino

  Sparkfunのサンプルでも良い
  http://wiring.org.co/learning/basics/airqualitymq135.html

4.アルコールセンサーはこちら

https://www.sparkfun.com/products/8880

  回路図は下記を参考
  http://wiring.org.co/learning/basics/airqualitymq135.html
  http://bildr.org/2013/10/mq3-arduino/


無事、簡易アルコールチェッカーができました。

Androidの電源だけで、Arduinoとアルコールセンサが動いています。


2014年8月24日日曜日

Arudino Procesing Funnel環境構築

コマンドポート:サーバの起動中…
コマンドポート:サーバが起動しました:9000
I/Oモジュールと接続中です…
java.lang.UnsatisfiedLinkError: C:\Users\xxx\Documents\Processing\libraries\funnel\library\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: C:\Users\xxx\Documents\Processing\libraries\funnel\library\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1807)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1732)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at gnu.io.CommPortIdentifier.(CommPortIdentifier.java:83)
at funnel.FirmataIO.begin(FirmataIO.java:513)
at funnel.ArduinoIO.(ArduinoIO.java:36)
at funnel.FunnelServer.connect(FunnelServer.java:354)
at funnel.FunnelServer.connect(FunnelServer.java:325)
at funnel.FunnelServer.(FunnelServer.java:226)
at processing.funnel.IOSystem.waitingServer(IOSystem.java:159)
at processing.funnel.Arduino.startingServer(Arduino.java:107)
at processing.funnel.IOSystem.(IOSystem.java:80)
at processing.funnel.Firmata.(Firmata.java:22)
at processing.funnel.Arduino.(Arduino.java:46)
at processing.funnel.Arduino.(Arduino.java:69)
at Blink.setup(Blink.java:36)
at processing.core.PApplet.handleDraw(PApplet.java:2117)
at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:193)
at processing.core.PApplet.run(PApplet.java:2020)
at java.lang.Thread.run(Thread.java:662)

こんなエラーになってProceesingメイクできない。
で、64bit環境のドライバになってないぽいので、64bit環境のをとってきて入れてみる

http://www.cloudhopper.com/opensource/rxtx/
ここから64bitのやつダウンロード

ch-rxtx-2.2-20081207-win-x64.zip


で、「rxtxSerial.dll」をエラーが出てた「C:\Users\xxx\Documents\Processing\libraries\funnel\library」
にいれる。元あったやつは名前変えておく。

で実行すると、無事成功!

========


コマンドポート:サーバの起動中…
コマンドポート:サーバが起動しました:9000
I/Oモジュールと接続中です…
Stable Library
=========================================
Native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net
Java lib Version = RXTX-2.1-7
WARNING: RXTX Version mismatch
Jar version = RXTX-2.1-7
native lib Version = RXTX-2.2-20081207 Cloudhopper Build rxtx.cloudhopper.net
Firmata Protocol Version: 2.3
I/Oモジュールと接続が完了しました://./COM28, 57600
Pin 0:
Pin 1:
Pin 2: Input, Output, Servo
Pin 3: Input, Output, PWM, Servo
Pin 4: Input, Output, Servo
Pin 5: Input, Output, PWM, Servo
Pin 6: Input, Output, PWM, Servo
Pin 7: Input, Output, Servo
Pin 8: Input, Output, Servo
Pin 9: Input, Output, PWM, Servo
Pin 10: Input, Output, PWM, Servo
Pin 11: Input, Output, PWM, Servo
Pin 12: Input, Output, Servo
Pin 13: Input, Output, Servo
Pin 14: Input, Output, Analog
Pin 15: Input, Output, Analog
Pin 16: Input, Output, Analog
Pin 17: Input, Output, Analog
Pin 18: Input, Output, Analog, I2C
Pin 19: Input, Output, Analog, I2C
Total configurable pins: 20
opened host address 127.0.0.1
コマンドポート:127.0.0.1がサーバに接続しました
I/Oモジュールを再起動中です…
I/Oモジュールは正常に再起動しました
Firmata Protocol Version: 2.3
reboot OK
configureation OK
addModule() Arduino -> 0
funnelServiceThread start
notify thread start
OscServiceThread start

Arduinoと赤外線センサー&LEDでSharpのテレビを制御できた

赤外線コード
http://akizukidenshi.com/download/k4174_manual.pdf

赤外線リモコン受信モジュール
SparkFun SEN-08554
http://www.switch-science.com/catalog/129/

赤外線LED
長い方が+です

AQUOSのTVはパナソニックの赤外線プロトコルと同じでした。

Decoded PANASONIC - Address: 555A Value: F148688B (48 bits)
Raw (100): 14092 3500 -1500 600 -250 550 -1100 600 -250 550 -1100 600 -250 550 -1100 600 -250 550 -1100 550 -300 550 -1100 550 -300 550 -1100 550 -1100 600 -250 550 -1100 550 -300 550 -1100 550 -1100 550 -1100 600 -1050 600 -250 600 -250 550 -300 550 -1100 550 -300 550 -1100 550 -250 600 -250 600 -1050 600 -250 600 -250 550 -300 550 -300 550 -1100 550 -1100 600 -250 550 -1100 550 -300 550 -250 600 -250 600 -1050 600 -250 600 -250 550 -300 550 -1100 550 -300

2013年6月25日火曜日

Arduinoと赤外線LEDでPanasonicのテレビをリモコン操作できた

Arduinoと赤外線LEDでPanasonicのテレビをリモコン操作できた。
シリアルで任意のコマンド送信。
btn1Zとか(Zはコマンド末尾の意)

------------------------------------------------
#include <HashMap.h>
#include <IRremote.h>

IRsend irsend;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

#define PanasonicAddress 0x4004   // Panasonic address (Pre data)

const byte HASH_SIZE = 30;
HashType<String,long> hashRawArray[HASH_SIZE];
HashMap<String,long> hashMap = HashMap<String,long>( hashRawArray , HASH_SIZE );

void setup() {
    sethashMap();
    Serial.begin(9600);  // 9600bpsでシリアルポートを開く
    irrecv.enableIRIn();  // Start the receiver
}
char a;

void loop() {
    char str[20]; // 数字(文字列)の受信用配列
    String s;

    recvStr(str);
    s = str;
    long a = atol(str);
    Serial.println(s);
 
    for (int i = 0; i < 3; i++) {
      //irsend.sendPanasonic(0x4004, 0x1008485);
      irsend.sendPanasonic(PanasonicAddress, hashMap.getValueOf(s));

      delay(40);
    }
    irrecv.enableIRIn(); // Start the receiver
 
    if (irrecv.decode(&results)) {
      Serial.println(results.value, HEX);
      irrecv.resume(); // Receive the next value
    }
}

void recvStr(char *buf)
{
  int i = 0;
  char c;

  while (1) {
    if (Serial.available()) {
      c = Serial.read();
      buf[i] = c;
      if (c == 'Z') {
        buf[i] = '\0';
        break; // 文字列の終わりはZで判断
      }
      i++;
    }
  }
}

void sethashMap(){
hashMap[0]("btn1" ,0x1900697);
hashMap[1]("btn2" ,0x1908617);
hashMap[2]("btn3" ,0x19046D7);
hashMap[3]("btn4" ,0x190C657);
hashMap[4]("btn5" ,0x19026B7);
hashMap[5]("btn6" ,0x190A637);
hashMap[6]("btn7" ,0x19066F7);
hashMap[7]("btn8" ,0x190E677);
hashMap[8]("btn9" ,0x1901687);
hashMap[9]("btn10" ,0x1909607);
hashMap[10]("btn11" ,0x19056C7);
hashMap[11]("btn12" ,0x190D647);
hashMap[12]("chaUp" ,0x1002C2D);
hashMap[13]("chaDown" ,0x100ACAD);
hashMap[14]("volUp" ,0x1000405);
hashMap[15]("volDown" ,0x1008485);
hashMap[16]("power" ,0x100BCBD);
hashMap[17]("degital" ,0x1402E6F);
hashMap[18]("BS" ,0x1400E4F);
hashMap[19]("CS" ,0x140AEEF);
hashMap[20]("keyUp" ,0x1005253);
hashMap[21]("keyRig" ,0x100F2F3);
hashMap[22]("keydown" ,0x100D2D3);
hashMap[23]("keyLef" ,0x1007273);
hashMap[24]("Set" ,0x1009293);
hashMap[25]("back" ,0x1002B2A);
hashMap[26]("blue" ,0x100CECF);
hashMap[27]("red" ,0x1000E0F);
hashMap[28]("yellow" ,0x1008E8F);
hashMap[29]("green" ,0x1004E4F);
}


2012年10月24日水曜日

Arduino LeonardoでLCD(LMB0820)


LMB0820はサンプルコードがSeeedStudioにありますが、
そのままでは正常に使えません。

LCDのサイズに合わせて初期化メソッドを呼ぶこと。

lcd.begin(8, 2);

詳しくはこちら
http://garretlab.web.fc2.com/arduino/make/lcd_display/index.html

Pin1のVssはArduinoのGNDへ
Pin2のVddはArduinoの5Vへ
Pin3は可変抵抗を挟んでGNDへ(コントラスト調整)
Pin4はArduinoの1へ
Pin5はArduinoの2へ
・・・
Pin14はArduinoの11へ
Pin15は3Vへ
Pin16はGNDへ

----------------
#include

//8 bit: RS, RW, EN, D0, D1, D2, D3, D4, D5, D6, D7
//RS-->PC0
//RW-->PC1
//EN-->PC2

//LiquidCrystal lcd(14, 15, 16, 8, 9, 10, 11, 4, 5, 6, 7);
LiquidCrystal lcd(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);

void setup()
{
lcd.begin(8, 2);
}
void loop()
{
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("hello");
lcd.setCursor(0,1);
lcd.print("world!!");
}