Arduinoが届いた.そしてSDカードアクセス.
スイッチサイエンスさんのところから,Arduinoが届いたので,早速GPSモジュールをさしてみたけど,
なんかGPSを全然測位してくれなくて涙目なので,SDカードアクセスを試みる.
#サンプルスケッチ通り,ピンアサインも確認もしたけど,ずっと受信データが全てのパラメータ0のまま,時刻だけ表示されているオワタ
こんな感じorz
0 0 0 0 0 0
2009 9 16 13 18 36 0
0 0 0 0 0 0
2009 9 16 13 18 37 0
0 0 0 0 0 0
2009 9 16 13 18 38 0
とりあえずArduinoのSDカードアクセスと言ったらこれ!と言われているような,SDCardライブラリをゲット!
SD card read/write with Arduino
"The library can be downloaded here:"って書いてあるところだお.
そしたら,解凍したフォルダを\hardware\librariesディレクトリに入れるー.
んでもって,サンプルスケッチ(ディレクトリ内のarduino sd card example.cpp)をコンパイルしようとしたらエラーが起こる.
#error "no sd/mmc pin mapping available!"とか言ってる.
どうやら,Arduino Duemilanove 328がなかったころのライブラリだったと結論.
識別子__AVR_ATmega328P__をSDカードに対するピンマップ宣言っぽいところに追加してあげればいいっぽい気がしたので,
ライブラリフォルダ内のsd_raw_config.hを編集してあげる.
#if defined(__AVR_ATmega8__) || \ defined(__AVR_ATmega48__) || \ defined(__AVR_ATmega88__) || \ defined(__AVR_ATmega168__) || \ defined(__AVR_ATmega328P__) #define configure_pin_mosi() DDRB |= (1 << DDB3) #define configure_pin_sck() DDRB |= (1 << DDB5) #define configure_pin_ss() DDRB |= (1 << DDB2) #define configure_pin_miso() DDRB &= ~(1 << DDB4) #define select_card() PORTB &= ~(1 << PORTB2) #define unselect_card() PORTB |= (1 << PORTB2)
こんな雰囲気になるように書きかあえてあげてね!
書き換えているのは__AVR_ATmega328P__を追加しているのと,PB2をPORTB2に書き換えているあたり.
ほかの識別に影響しそうだけど,Arduino Duemilanove 328しかもってないからいっかー.
この変更後,サンプルスケッチをコンパイルしたら通ったー,やったー!
んで,このGPSシールドはJ7の/SSだけ結線されてなかったような気がしたので,ジャンピンぐワイヤでJ3にある10ピンにつなげておいた.
そいで,アップロードして実行すると,シリアル経由でなんか出力された.
- -
Data sampling system
send r to read disk
send s to start sampling
send q to stop sampling
Ready.....
- -
rev: 32
serial: 0xA275C196
date: 3
8
size: 2013265920
copy: 0
wr.pr.: 0/0
format: 0
free:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0Sampling..
444
347
351
357
357
353
350
351
357
357
355
どうやら無事動いているようだ,よかた.
FAT16だからSDカードは2GBまで対応しているらしく,しっかり2GBさしておいたら,認識してsizeがいい感じで2GBぐらいになってる.
#勘違い.このライブラリは低レベルなインターフェースだけ提供していて,ファイルシステムは提供してなかった.
GPSが動かないことにくじけ始めたので,書き込みとかはまたあとでやることにしよう.
はぁ.