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

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

ただいまの
回答率

88.34%

arduinoで超音波センサを用いて距離を計測する際に受信した超音波の電圧の大きさを距離と同時に表示したい。

解決済

回答 2

投稿

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

hogeegoh

score 12

前提・実現したいこと

Arduinoで超音波センサを用いて距離を計測する際に受信した超音波の電圧の大きさを距離と同時に表示したい。

発生している問題・エラーメッセージ

loopの中に電圧の大きさの表示のさせ方がわからない。

###

 #define USS_T_PIN 7      // 送信側センサー接続のピン番号(デジタル接続)
 #define USS_R_PIN 0      // 受信側センサー接続のピン番号(アナログ接続)


//  電源起動時とリセットの時だけのみ処理される関数(初期化と設定処理)
void setup() {
  Serial.begin(9600);    // 9600bpsでシリアル通信のポートを開きます
}
//  繰り返し実行される処理の関数(メインの処理)
void loop() {
     int ans ;

     ans = UsonicMeasurRead(USS_T_PIN,USS_R_PIN,20,30) ;
     Serial.print(ans) ;                // 表示を行う
     Serial.println("mm") ;
     delay(500) ;                       // 500ms後に繰り返す
}
// 超音波センサーから距離を得る処理
// txpin=送信接続ピン  rxpin=受信接続ピン  temp=周辺温度  correction=距離補正
// 距離をmmで返す(検出できない場合は0を返す)
int UsonicMeasurRead(int txpin,int rxpin,int temp,int correction)
{
     unsigned long t , t2 ;
     int ans , val ;

     ans = 0 ;
     tone(txpin,40000) ;                // 送信センサーに40KHz信号を200us出力
     delayMicroseconds(200) ;
     noTone(txpin) ;                    // 40KHz信号停止
     t = micros() ;                     // 現在の時間を記憶する
     while(1) {
          val = analogRead(rxpin) ;     // 受信センサーの値を読む
          t2 = micros() - t ;           // 時間をカウントする
          if (val >= 205) break ;       // 受信値の電圧が2V以上なら反射信号とする
          if (t2 >= 30000) break ;      // 反射信号が返って来なかった場合の処理
     }
     if (t2 < 30000) {
          t = 331500 + (600 * temp) ;   // 音波の伝搬する速度を求める
          t = (t * t2) / 1000000 ;      // 距離の計算
          ans = t / 2 ;                 // 往復なので÷2
          ans = ans + correction ;      // 距離の補正値を加える
     }
     return ans ;
}

補足情報(言語/FW/ツール等のバージョンなど)

超音波センサの回路やスケッチは以下のURLを参考に作成しました。
http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/USS/USS.htm

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

0

UsonicMeasurReadの中のvalをloopに渡して表示したいということでしょうか?

でしたらloopでUsonicMeasurReadを呼び出す際にポインタを渡して値を受け取るか、ansとvalの両方を格納できる構造体を定義して、そのインスタンスをreturnするかのどちらかになると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/06/07 15:21

    : UsonicMeasurReadの中のvalをloopに渡して表示したいということでしょうか?
    はい。そのようにしたいです。

    すいませんC言語も初心者でして、お手数ですが詳しく教えていただけないですか...?

    キャンセル

  • 2016/06/07 15:36

    int UsonicMeasurRead(int txpin,int rxpin,int temp,int correction, int *voltage) {
    ...
    *voltage = val;
    ...
    }


    void loop() {
    int ans, voltage;
    ans = UsonicMeasurRead(USS_T_PIN,USS_R_PIN,20,30, &voltage);
    ...
    }

    値渡しの引数はスコープを抜けると破棄されますがポインタを渡してloop内で宣言した変数の値を書き換えることで値を受け取れます。

    C言語の基礎ができていないとマイコンを扱うのは難しいと思いますので、入門書などで一通り勉強してからの方が良いと思います。

    キャンセル

0

関数から"ふたつ(以上)ある値の組"を返したい、ってことでしょうか?

struct pair {
  int voltage;
  int distance;
};

struct pair UsonicMeasurRead(int txpin,int rxpin,int temp,int correction) {
  struct pair result;
  ...
  result.voltage = xxx;
  result.distance = yyy;
  return result;
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/06/07 17:52

    そういうことです。
    解決できました。
    ご回答ありがとうございます。

    キャンセル

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

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

関連した質問

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

  • トップ
  • C++に関する質問
  • arduinoで超音波センサを用いて距離を計測する際に受信した超音波の電圧の大きさを距離と同時に表示したい。