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
如何使用Arduino在一定距离上打开LED_Arduino_Ping_Led - Fatal编程技术网

如何使用Arduino在一定距离上打开LED

如何使用Arduino在一定距离上打开LED,arduino,ping,led,Arduino,Ping,Led,我正在做一个Arduino项目,但我无法让它工作 只要有人离传感器5英寸远,程序就会打开。问题是,每当我启动程序时,无论发生什么情况,LED都会熄灭。这是我的节目 const int pingPin =7 ; const int ledPin = 13; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { long duration, inches, cm;

我正在做一个Arduino项目,但我无法让它工作

只要有人离传感器5英寸远,程序就会打开。问题是,每当我启动程序时,无论发生什么情况,LED都会熄灭。这是我的节目

const int pingPin =7 ;
const int ledPin = 13;

void setup() {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
}

void loop() {
    long duration, inches, cm;

    pinMode(pingPin,OUTPUT);
    digitalWrite(pingPin,LOW);
    delayMicroseconds(2);
    digitalWrite(pingPin,HIGH);
    delayMicroseconds(5);
    digitalWrite(pingPin,LOW);

    pinMode(pingPin,INPUT);
    duration =pulseIn(pingPin,HIGH);

    inches = microsecondsToInches(duration);
    cm = microsecondsToCentimeters(duration);

    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    delay(100);

    while (true) {
        if (inches <= 5) {
            digitalWrite(ledPin, HIGH);
        }
        else {
            digitalWrite(ledPin, LOW);
        }
    }
}

long microsecondsToInches(long microseconds)
{
    return microseconds /74/2;
}

long microsecondsToCentimeters(long microseconds)
{
    return microseconds /29/2;
}
const int pingPin=7;
常数int ledPin=13;
无效设置(){
Serial.begin(9600);
引脚模式(LED引脚,输出);
}
void循环(){
长持续时间,英寸,厘米;
pinMode(pingPin,输出);
数字写入(pingPin,低电平);
延迟微秒(2);
数字写入(pingPin,高);
延迟微秒(5);
数字写入(pingPin,低电平);
pinMode(pingPin,输入);
持续时间=脉冲强度(pingPin,高);
英寸=微秒(持续时间);
cm=微秒秒(持续时间);
连续打印(英寸);
序列号。打印(“,”);
连续打印(cm);
连续打印(“cm”);
Serial.println();
延迟(100);
while(true){

如果(英寸仔细查看代码的最后一部分:

while (true) {
  if (inches <= 5) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}
while(true){

如果(英寸)非常感谢!我真不敢相信我没有看到现在唯一的问题是它随机闪烁,当它打开时,LED随之亮起并开始随机闪烁。闪烁是一个单独的问题。我不知道你使用的是哪种传感器-因此可能存在核心问题(它是如何设置的,它的读数有多少波动,等等)。延迟微秒+延迟(100)是怎么回事?我发现噪音传感器(或环境)有助于读取一些读数(每个
循环()
)并对它们进行平均以确定最终值。此外,打印语句需要一些时间来处理,因此对于真正的测试,请将它们注释掉(除非项目需要它们)。别介意我让它工作了!我所做的只是将距离(以英寸为单位)缓存到一个变量中,如果(英寸<距离),则执行顺便说一句:写
digitalWrite(ledPin,英寸)要短得多