2016-12-16 80 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

PINCPORTC是相同的寄存器。

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 
}