こんにちは.
はじめて投稿します.
Arduinoについての質問です.
私は今,加速度センサで読み取った値をSDカードに保存するという電子工作をしています.これまでにPC上で加速度の値を読み取ることは可能としましたが
,どうしてもSDカードに保存することが出来ません.
使用したものは以下のとおりです.
・Arduino UNO
・SD Card Shield
・三軸加速度センサ ADXL375
・I2Cバス用双方向電圧レベル変換モジュール
です.
私自身Arduino初心者なので,I2C通信を使いこなせていないことが原因だと考えています.
SDカードシールドのCSピンは4番,SSピンは10番です.
ハード側の4番,10番ピンには何もつないでいません.
以下にスケッチを掲載します.
このスケッチだと,SDの初期化には成功し,3軸の加速度もシリアルモニタに表示してくれますが,肝心のSDには保存してくれません.
お手数だとは思いますが,
添削のほどよろしくお願いいたします.
※以下スケッチ
ーーーーーーーーーーーーーーーーー
#include <SD.h>
#include <Wire.h>
//ファイル名をrecordFileで定義
File myFile;
//シールドの番号指定
const int chipselect = 4;
//デバイスアドレス(スレーブ)
uint8_t DEVICE_ADDRESS = 0x1D;
//XYZレジスタ用のテーブル(6byte)
uint8_t RegTbl[6];
void setup()
{
//SSピンを出力に設定
pinMode(SS,OUTPUT);
Serial.begin(9600);
//マスタとしてI2Cバスに接続する
Wire.begin();
//DATA_FORMAT(データ形式の制御)
Wire.beginTransmission(DEVICE_ADDRESS);
//DATA_FORMATのアドレス
Wire.write(0x31);
//最大分解能モードに「±200G」
Wire.write(0x0b);
Wire.endTransmission();
//POWER_TCL(節電機能の制御)
Wire.beginTransmission(DEVICE_ADDRESS);
//POWER_CTLのアドレス
Wire.write(0x2d);
//測定モードにする
Wire.write(0x08);
Wire.endTransmission();
//SDカードスロットのチップセレクト番号にてSDライブラリを初期化
//初期化に失敗したらエラーを出す
if(!SD.begin(chipselect))
{
Serial.println(F("カードが見つかりません."));
return;
}
//成功したら完了を表示する
Serial.println("カード初期化に成功しました");
}
void loop()
{
//XYZの先頭アドレスに移動する
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x32);
Wire.endTransmission();
//デバイスへ6byteのレジスタデータを要求する
Wire.requestFrom(DEVICE_ADDRESS,6);
//6byteのデータを取得する
int i;
for(i=0;i<6;i++)
{
while(Wire.available()==0){}
RegTbl[i]=Wire.read();
}
//データを各XYZの値に変換する(LSB単位)
int16_t x = (((int16_t)RegTbl[1]) << 8) | RegTbl[0];
int16_t y = (((int16_t)RegTbl[3]) << 8) | RegTbl[2];
int16_t z = (((int16_t)RegTbl[5]) << 8) | RegTbl[4];
//各XYZ軸の加速度(m/s^2)を出力
Serial.print("X: ");
Serial.print( x * 0.6533);
Serial.print(" Y: ");
Serial.print( y * 0.6533);
Serial.print(" Z: ");
Serial.print( z * 0.6533);
Serial.println(" m/s^2");
//ログを書き込むためにファイルを開く
myFile = SD.open("test.txt,FILE_WRITE");
if(myFile)
{
Serial.println("test.txtをSDに書き込んでいます");
myFile.print( x );
myFile.print( y );
myFile.println( z );
//myFile.close();
Serial.println("書き込みが完了しました");
}
else
{
Serial.println(F("error opening test.txt"));
}
delay(500);
}

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
退会済みユーザー
2018/02/10 11:25
2018/02/10 14:39
退会済みユーザー
2018/02/19 03:15