距离控制领导

时间:2014-11-14 22:58:01

标签: c++ arduino distance sensor

我试图创建一个距离控制的LED,它会在一定距离处关闭。我使用的是arduino Leonardo和距离传感器。当我插入我的电路板时,LED会永久保持不动,并且当距离缩短时不会关闭。请告诉我需要改变哪些才能使其正常工作?

const int TrigPin = 2;
const int EchoPin = 3;
float cm;
int ledPin = 12; //define ledPin12 is the output port of led’s level.
int val = 0; //define original of val.
void setup() 
{
    Serial.begin(9600);
    pinMode(TrigPin, OUTPUT);
    pinMode(EchoPin, INPUT);
    pinMode(ledPin, OUTPUT); //set ledPin output
}
void loop()
{
    digitalWrite(TrigPin, LOW); //Low-high-low level sent a short time pulse to TrigPin
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);
    cm = pulseIn(EchoPin, HIGH) / 58.0; //Echo time converted into cm
    cm = (int(cm * 100.0)) / 100.0; // retain two decimal places
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    delay(1000);

    val = analogRead(EchoPin); //get the value from sensor
    if(val<=1)
    {
        //512=2.5V, if want the sensor be more sensitive, increase the number, or lese low the number.
        digitalWrite(ledPin, HIGH); //when the value of val is less than 512(2.5V), light up led lamp
    }
    else
    {
        digitalWrite(ledPin, LOW);
    }
}

1 个答案:

答案 0 :(得分:0)

我猜测传感器类似于SRF005。您应该在问题中包含该详细信息。

触发器看起来没问题,但是确保使用20美元的脉冲时间不会有任何伤害。回波的捕获看起来是正确的,除了我发现的数据表除以5.8而不是58.0,并且返回值是无符号长,而不是浮点数。

但是你不应该在echo引脚上使用analogRead()。那时它将是0。相反,您已经在cm变量中有距离。

(有些传感器使用引脚电压来指示距离,但它们没有触发和回声引脚。你实际使用哪种?)

void loop()
{
    int cm = 0;

    digitalWrite(TrigPin, LOW); //Low-high-low level sent a short time pulse to TrigPin
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10); // <<<<<<<<<<<<<<<<<<<<<<<< Change to 20
    digitalWrite(TrigPin, LOW);
    cm = (int)(pulseIn(EchoPin, HIGH) * 10 / 58); //Echo time converted into cm <<<<<<<<< 5.8 ????
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();


    if(cm < 50)
    {
        digitalWrite(ledPin, HIGH); 
    }
    else
    {
        digitalWrite(ledPin, LOW);
    }

    delay(1000);
}