距离控制指示灯

Distance controlled led

本文关键字:指示灯 控制 距离      更新时间:2023-10-16

我正在尝试创建一个距离控制的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);
    }
}

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

扳机看起来没问题,但脉冲时间长一点(比如 20 我们)以确保没有害处。回显的捕获看起来是正确的,除了我找到的数据表说除以 5.8,而不是 58.0,并且返回值是一个无符号的长整型,而不是浮点数。

但是您不应该在回显引脚上使用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);
}