質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Arduino

    675questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Arduinoで3軸加速度データをSDに保存したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,572

delaxzone

score 2

こんにちは.

はじめて投稿します.
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);
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

myFile = SD.open("test.txt,FILE_WRITE");


myFile = SD.open("test.txt",FILE_WRITE);


の誤りでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/10 20:25

    ご回答ありがとうございます.
    直ちに修正したところ,シリアルモニタ上で表示に成功し,書き込みにも成功したとの表示が出ました.
    やった!と思い加速度センサを動かしてみると,今度はファイル書き込みにエラーが...
    SDカードを覗いてみると,テキストファイルの作成には成功していましたが,肝心のデータは記録されていませんでした.
    兎にも角にも,本当にありがとうございます.一歩前進することが出来ました!

    キャンセル

  • 2018/02/10 23:39

    //myFile.close();
    は何故?コメントアウトされています?

    キャンセル

  • 2018/02/19 12:15

    ご回答に対する返信が遅くなり申し訳ございません.
    ご指摘ありがとうございます.単純な誤りでした.

    早速修正してみたところ,LSB単位の数値がSDに保存されていました!
    ありがとうございます!もう少し修正を試みて完成に近づけたいと思います!

    キャンセル

同じタグがついた質問を見る

  • Arduino

    675questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。