2017-03-10 16 views
0

こんにちは私は超音波距離センサーからの距離を読み取り、以前と現在の読み取り値が異なる(20cm)場合にのみデータを送信するスケッチを書こうとしています。以下は私のスケッチです。Arduinoで最後の読み込みを保存する

const int TRIG_PIN = 12; 
const int ECHO_PIN = 11; 

#include <SoftwareSerial.h> 
SoftwareSerial BTserial(2, 3); // RX | TX 
// Anything over 400 cm (23200 us pulse) is "out of range" 
const unsigned int MAX_DIST = 23200; 

void setup() { 

    // The Trigger pin will tell the sensor to range find 
    pinMode(TRIG_PIN, OUTPUT); 
    digitalWrite(TRIG_PIN, LOW); 

    // We'll use the serial monitor to view the sensor output 
    Serial.begin(9600); 
    BTserial.begin(9600); 
} 

void loop() { 

    unsigned long t1; 
    unsigned long t2; 
    unsigned long pulse_width; 
    float cm; 
    float inches; 
    float lastcm; 
    float diff; 

    // Hold the trigger pin high for at least 10 us 
    digitalWrite(TRIG_PIN, HIGH); 
    delayMicroseconds(10); 
    digitalWrite(TRIG_PIN, LOW); 

    // Wait for pulse on echo pin 
    while (digitalRead(ECHO_PIN) == 0); 

    // Measure how long the echo pin was held high (pulse width) 
    // Note: the() microscounter will overflow after ~70 min 
    t1 = micros(); 
    while (digitalRead(ECHO_PIN) == 1); 
    t2 = micros(); 
    pulse_width = t2 - t1; 

    // Calculate distance in centimeters and inches. The constants 
    // are found in the datasheet, and calculated from the assumed speed 
    //of sound in air at sea level (~340 m/s). 
    cm = pulse_width/58.0; 
    diff = cm - lastcm; 
    lastcm = cm; 

    // Print out results 
    if (pulse_width > MAX_DIST) { 
    BTserial.write("Out of range"); 
    lastcm = cm; 
    } else { 
    Serial.println(diff); 
    Serial.println("Or act value"); 
    Serial.println(cm); 
    lastcm = cm; 
    if (abs(diff)>20) { 
     BTserial.println(cm); 
     } 


    } 

    // Wait at least 60ms before next measurement 
    delay(150); 
} 

しかし、これは正しく2つの値の間の差を計算されていません - シリアルモニターはちょうど

29.24 
Or act value 
29.24 
29.31 
Or act value 
29.31 
28.83 
Or act value 
28.83 

任意の考えを返すよう?

+0

どのセンサーを使用していますか?それがHC-SR04(コードから来たものだと思う)ならば、あなたの問題はあなたがパルス幅を望まないということです。エコー・ピンがハイになるまでパルスを送信したいときがあります(受信時)。あなたが別のセンサーを使用している場合でも、あなた自身のパルスを送信させるセンサーは、おそらく距離をパルス幅として出力するわけではありません。 – anonymoose

答えて

3

変数 'lastcm'はループ関数内で宣言されています。あなたには2つの選択肢があります。ループの外側に宣言するか、それを静的に宣言します(いずれの場合も、それに含まれる最初の無効な読みに対処する必要があります)

関連する問題