2016-12-16 4 views
0

私は超音波距離検出器の作成に取り組んでいます。私は現在、センサーが適切に機能していることを確認するためにセンサーをテストしています。エコーピンとトリガーピンをそれぞれPC4とPC5に接続しました。このコードを実行すると理想的には私のディスプレイに6を送るでしょう。しかし、それは0を表示しています。これは、コードがセンサーと正しくインターフェースしていないと私に信じさせます。助けてください。AVRの超音波センサー

#define F_CPU 16000000UL 

#include <avr/io.h> 
#include <util/delay.h> 
#include <avr/interrupt.h> 

void DisplayIt(int i); 

int main(void) 
{ 

    while(1) 
    { 
     DDRC = 0xFF; 
     int i = 0; 
     PORTC = 0b00000000; 
     _delay_us(2); 
     PORTC = 0b00100000; 
     _delay_us(10); 
     PORTC = 0x00; 

     DDRC = 0x00; 
     if (PINC == 0b00010000) 
     { 
      i = 6; 
     } 
     DisplayIt(i); 
    } 

} 

答えて

0

PINCおよびPORTCは同じレジスタである。

PORTC = 0x00;は、読み込む直前にこのレジスタの内容を0に設定します。

+0

:ここ

は、コードのですか? –

+2

センサーの種類を示す質問を編集する必要があります。それはHC-SR04ですか?その場合、あなたは早すぎるエコーを読んでいます。タイミング図を参照してください。パルスをトリガする。パルスが送信されるのを待ちます。ピンの高さの時間。パルスが送信される前にピンを読み取っています。それがまだ低い理由です。利用可能なこのセンサーのチュートリアルとコードサンプルがたくさんあります。 Sparkfunには、データシートだけでなく、Arduinoの簡単なコードもあります。 – UncleO

0

どのような超音波センサーを使用したのですか?しかし、センサーがエコー信号を受信するまで待たずに済んでいると思います。私が今まで使用してきた超音波センサ、SRF04に基づいて、それがこのようなタイミング図があります

enter image description here

センサーがで物体を検出するとき、それは「6」を印刷する機能を持つことになりますので、私はあなたのコードを変更しますその前面(エコー信号の到着からそれを知る)。私はトリガを停止するためにそれをクリアする必要があるので、だから私はどのようにすることを修正すればよい

while(1) { 
    DDRC = 0xFF; // Configure all Port C pins as an output 
    int i = 0; 

    PORTC = 0b00100000; // Write 1 (high) to PORTC.5 (trigger pin) 
    _delay_us(10); // Keep PORTC.5 to give high signal output for 10us 
    PORTC = 0x00; // Write 0 (low) to PORTC.5 

    // The code above completes Trigger Input To Module (see Timing Diagram image) 

    DDRC = 0x00; // Configure all Port C pins as an input 
    while (PINC.4 == 0); // Wait until PINC.4 (echo pin) has 1 (high) value 
    if(PINC.4 == 1) i = 6; // Once PINC.4 is high, while loop will break and this line will be executed 

    DisplayIt(i); 

    _delay_ms(10); // Allow 10ms from End of Echo to Next Trigger Pulse 
} 
関連する問題