Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 距离控制led_C++_Arduino_Distance_Sensors - Fatal编程技术网

C++ 距离控制led

C++ 距离控制led,c++,arduino,distance,sensors,C++,Arduino,Distance,Sensors,我试图创建一个距离控制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 or

我试图创建一个距离控制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);
    }
}
const int TrigPin=2;
常数int EchoPin=3;
漂浮厘米;
int-ledPin=12//定义led引脚12是led电平的输出端口。
int-val=0//定义val的原始值。
无效设置()
{
Serial.begin(9600);
引脚模式(TrigPin,输出);
pinMode(EchoPin,输入);
引脚模式(LED引脚,输出);//设置LED引脚输出
}
void循环()
{
digitalWrite(TrigPin,低);//低-高-低电平向TrigPin发送了一个短时间脉冲
延迟微秒(2);
数字写入(TrigPin,高);
延迟微秒(10);
数字写入(TrigPin,低电平);
cm=脉冲强度(EchoPin,高)/58.0;//回波时间转换为cm
cm=(int(cm*100.0))/100.0;//保留两位小数
连续打印(cm);
连续打印(“cm”);
Serial.println();
延迟(1000);
val=analogRead(EchoPin);//从传感器获取值

如果(val我猜传感器类似于SRF005。您应该在问题中包含该细节

触发器看起来没问题,但脉冲再长一点(比如说20 us)也没什么害处。回波的捕获看起来不错,只是我找到的数据表上说是除以5.8,而不是58.0,返回值是无符号长的,不是浮点数

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

(有些传感器也使用引脚电压来指示距离,但它们没有触发器和回波引脚。您实际使用的是哪种类型?)

void循环()
{
int-cm=0;
digitalWrite(TrigPin,低);//低-高-低电平向TrigPin发送了一个短时间脉冲
延迟微秒(2);
数字写入(TrigPin,高);

delayMicroseconds(10);//StackOverflow不是一个调试器。你遇到了什么错误?你用常量值测试过你的逻辑吗?为什么注释似乎与代码不匹配?它没有给我任何错误,只是没有像我希望的那样工作。pulseIn()和analogRead()是什么意思do?在同一个引脚上快速连续调用这两种功能是否有效?cm打印的输出是什么?@TonyPark这两种功能都是标准的Arduino功能。
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);
}