//********************************************************************
//超音波センサを2個同時に使って距離をserialとLCD表示するプログラム
//計算を早くするため、mm以下の精度は出さないとした。
//音波が戻ってこない場合、0mm と出力する。
//********************************************************************
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7); //lcdタイプの変数を定義
const long serialBps = 115200; //シリアル通信レート
const int pinTrig[2] = {2,11}; //トリガーパルス出力用ピン番号 [x]要素番号がセンサー番号
const int pinEcho[2] = {3,12}; //エコーパルス入力用ピン番号 [x]要素番号がセンサー番号
long Duration[2] ; //測定したエコーパルス幅 usec [x]要素番号がセンサー番号
long Distance[2] ; //測定した距離 mm [x]要素番号がセンサー番号
//unsigned long startTime; //パルス長を測り始める時間
//SETUP*****************************
void setup() {
// LCDの行と列を設定
lcd.begin(16, 2);
//シリアルポート使用開始
Serial.begin(serialBps);
//pin modeの設定
pinMode( pinTrig[0], OUTPUT);
pinMode( pinTrig[1], OUTPUT);
pinMode( pinEcho[0], INPUT);
pinMode( pinEcho[1], INPUT);
}
//MAIN LOOP*************************
void loop() {
for (int i=0; i<2;i++){
//超音波を出力(トリガーパルスの出力)
digitalWrite( pinTrig[i], HIGH ); //HIGHを出す
delayMicroseconds( 10 ); //10usec
digitalWrite( pinTrig[i], LOW ); //LOWに戻す
//時間を測定
Duration[i] = pulseIn( pinEcho[i], HIGH ,40000); //パルス幅測定 usec単位。タイムアウト=40ms
Distance[i] = Duration[i]*340/2/1000; //距離(単位mm)を求める。 音速を340m/sとする.往復距離を半分にする
//2つ測定の間に時間を空ける
delay(10);
}
//シリアルに時間を出力
Serial.print("Duration:");
Serial.print(Duration[0]);
Serial.print("usec ");
Serial.print(Duration[1]);
Serial.print("usec ");
//シリアルに距離を出力
Serial.print("Distance:");
Serial.print(Distance[0]);
Serial.print("mm ");
Serial.print(Distance[1]);
Serial.println("mm");
//LCDへ時間を表示
lcd.home(); // カーソル位置を1行目に設定
lcd.print("T:");
lcd.setCursor(3,0);
lcd.print(" us");
lcd.setCursor(3,0);
lcd.print(Duration[0]);
lcd.setCursor(9,0);
lcd.print(Duration[1]);
//LCDへ距離を出力
lcd.setCursor(0, 1); // カーソル位置を2行目に設定
lcd.print("D:");
lcd.setCursor(3,1);
lcd.print(" mm");
lcd.setCursor(3,1);
lcd.print(Distance[0]);
lcd.setCursor(9,1);
lcd.print(Distance[1]);
//0.5秒毎に計測
//delay(500);
}
0 件のコメント:
コメントを投稿