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

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

ただいまの
回答率

88.60%

Arduino unoで超音波距離センサから取得したデータをSDカードに保存したい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,244

kumamusi

score 10

Arduino unoで超音波距離センサを用いて観測をしたいです。しかし、下記のコードで試してみたのですがうまくSDカードにデータを記録できませんでした。

コード
```#define echoPin 2 // Echo Pin

define trigPin 3 // Trigger Pin

double Duration = 0; //受信した間隔
double Distance = 0; //距離

include <SPI.h>

include <SD.h>

File myFile;

void setup() {
Serial.begin( 9600 );
pinMode( 2, INPUT );
pinMode( 3, OUTPUT );

// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

Serial.print("Initializing SD card...");

if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open("test.txt", FILE_WRITE);

// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
// close the file:
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
} 

// re-open the file for reading:
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");

// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
}
void loop() {
digitalWrite(3, LOW);
delayMicroseconds(2);
digitalWrite( 3, HIGH ); //超音波を出力
delayMicroseconds( 10 ); //
digitalWrite( 3, LOW );
Duration = pulseIn( 2, HIGH ); //センサからの入力
if (Duration > 0) {
Duration = Duration / 2; //往復距離を半分にする
Distance = Duration * 340 * 100 / 1000000; // 音速を340m/sに設定
Serial.print("Distance:");
Serial.print(Distance);
Serial.println(" cm");
}
delay(500);

}

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2018/10/18 17:26

    「うまくSDカードにデータを記録できませんでした」との事ですが、シリアル通信から何が出力されますか? loop()の中は"delay(1000);"だけにして、setup()の中もSerialの初期化とSDカードの初期化、読み、書きだけにして、動作を追ってみることをお勧めします。

    キャンセル

  • coco_bauer

    2018/10/18 17:38

    また、SDカードとArduino Unoとの接続はどうなっていますか? Arduino Uno自体にはSDカードスロットがついていないので、何らかの拡張ボード(シールド)か、ブレッドボードを使ってSDカードとつないでいると思うのですが。

    キャンセル

  • kumamusi

    2018/10/20 13:13

    WIRELESS SD SHIELDで接続しています。

    キャンセル

回答 1

0

現状のコードはどういう不具合があるのでしょうか。

ソースコードがわからないといわれても説明しようがないですが。

#SDカードの書き込みのコードが見当たりませんが

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/10/16 16:41

    #define echoPin 2 // Echo Pin
    #define trigPin 3 // Trigger Pin

    double Duration = 0; //受信した間隔
    double Distance = 0; //距離

    #include <SPI.h>
    #include <SD.h>

    File myFile;

    void setup() {
    Serial.begin( 9600 );
    pinMode( 2, INPUT );
    pinMode( 3, OUTPUT );

    // Open serial communications and wait for port to open:
    Serial.begin(9600);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
    }


    Serial.print("Initializing SD card...");

    if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
    }
    Serial.println("initialization done.");

    // open the file. note that only one file can be open at a time,
    // so you have to close this one before opening another.
    myFile = SD.open("test.txt", FILE_WRITE);

    // if the file opened okay, write to it:
    if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    Serial.println("done.");
    } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
    }

    // re-open the file for reading:
    myFile = SD.open("test.txt");
    if (myFile) {
    Serial.println("test.txt:");

    // read from the file until there's nothing else in it:
    while (myFile.available()) {
    Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
    } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
    }
    }
    void loop() {
    digitalWrite(3, LOW);
    delayMicroseconds(2);
    digitalWrite( 3, HIGH ); //超音波を出力
    delayMicroseconds( 10 ); //
    digitalWrite( 3, LOW );
    Duration = pulseIn( 2, HIGH ); //センサからの入力
    if (Duration > 0) {
    Duration = Duration / 2; //往復距離を半分にする
    Distance = Duration * 340 * 100 / 1000000; // 音速を340m/sに設定
    Serial.print("Distance:");
    Serial.print(Distance);
    Serial.println(" cm");
    }
    delay(500);

    }

    貼り付けるコードを間違えていました。すみません。正しいのは上記です。

    キャンセル

  • 2018/10/16 16:49 編集

    質問は編集できるので、そっちのほうを修正してください。
    ソースコードは、<code>ボタンを押して、’’’の枠の中に貼り付けてください
    このままでは見づらいでしょ

    また、聞きたいことは何でしょうか

    キャンセル

  • 2018/10/18 16:21

    得たデータをSDカードに記録するソースコードを教えていただきたいです。

    キャンセル

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

  • ただいまの回答率 88.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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