首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟后无法将Arduino状态从高到低切换

延迟后无法将Arduino状态从高到低切换
EN

Stack Overflow用户
提问于 2016-10-21 14:57:32
回答 1查看 298关注 0票数 0

functionality:

Arduino利用以下功能: 1. IR传感器2. LED灯3. MotorFan 4.继电器

因此,当用户接近红外传感器时,它将给出一个'1‘的serialPrint,因为它已经检测到接近,然后这将切换状态的LED和电风扇从低到高。然而,5s后,发动机风扇状态将切换到低从高,而发光二极管的状态仍将保持高,并将保持高,只要serialPrint是'1‘。

然而,当用户离开近距离的红外传感器,LED状态将切换到低从高后10s。

我所做的:

我所做的代码:

代码语言:javascript
复制
const int signalPin = 1; //wire pin to analog for IR Sensor 


//Motor-Fan Relay
byte FanRelay = 4;
byte LightRelay = 6;

int IRSignal; //variable signal, will hold the analog value read by Arduino


 long duration;
int distance;
unsigned long Timer;
unsigned long Interval = 10000; //teh repeat Interval
unsigned long MotorFanOff = 5000;

void setup() 
{
  //Execute only once at startup 

  //pinMode (FanPin , OUTPUT) ; // Set pinMode for FanPin as OUTPUT, display  
  pinMode (signalPin, INPUT);  //infared sensor line will be an input to the Arduino
  pinMode(FanRelay, OUTPUT);
  pinMode(LightRelay, OUTPUT);
   Serial.begin(9600); // Open serial port to communicate with the Ultrasaonic Sensor
}

void loop() 
{

  //execute multiple times in a loop

  IRSignal = analogRead(signalPin); //arduino reads the value from the infared sensor
  distance = 9462 / (IRSignal -16.92);
  if(distance < 30 && distance > 0)
  {
     Timer = millis(); 
     // Write a pin of HIGH
     Serial.println("1");
    //Set motor-fan to operate

    digitalWrite (FanRelay, HIGH);
    digitalWrite (LightRelay, HIGH);

     //After a delay of 5s, MotorFan will toggle to LOW
    //Toggle MotorFan to LOW after 5s
    if ((millis()-Timer)>MotorFanOff){

       digitalWrite (FanRelay, LOW);
    }
  }
  else
  {

     Serial.println("0");
     //Check if Timer is longer than 10s

     if ((millis()-Timer)>Interval){

        digitalWrite (LightRelay, LOW);
        digitalWrite (FanRelay, LOW);
     }

  }
  delay(1000);
}

发行:

在这一点上,当serialPrint是从红外传感器'1‘时,LED和马达风扇的状态将从低切换到高。但是,我面临的主要问题是,MOTORFAN的状态在5秒后不会从高切换到低,但是这两种状态只有在serialPrint为'0‘时才会切换到低。

因此,我做错了什么?请help.thanks.

EN

回答 1

Stack Overflow用户

发布于 2016-10-21 15:00:04

注意!Arduino上的前两个引脚用于串行通信,如果您将它们用于其他用途,则中断它们。切换到更高的引脚号码,这个问题就会消失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40179847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档