2016-10-21 5 views
0

機能:遅延の後にハイからローにArduinoの状態を切り替えることができない

アルドゥイーノ以下を使用します 1 IRセンサ 2. LEDライト 3. MotorFan

4リレー

したがって、近接センサが検出されたため、ユーザはIRセンサに近づくと '1'のシリアルプリントを出力します。これにより、LEDとモータファンの状態がLOWからHIGHに切り替わります。しかし、5秒後、motorfanの状態はHIGHからLOWに切り替わりますが、LEDの状態はHIGHのままで、serialPrintが '1'である限りHIGHのままです。

しかし、ユーザーがIRセンサーの近くを離れると、10秒後にLED状態がHIGHからLOWに切り替わります。私が行っている

コード:

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はLOWからHIGHに切り替わりますIRセンサ。しかし、私が直面している主な問題は、MOTORFANの状態が5秒後にHIGHからLOWに切り替わらないことです。ただし、両方の状態は、serialPrintが '0'のときのみLOWに切り替わります。

私は間違っていますか? pls help.thanks。

答えて

0

注意してください! Arduinoの最初の2つのピンは、シリアル通信に使用され、何か他のもののために使用すると破損します。より高いピン番号に切り替えると問題はなくなります。

+0

高いピン番号?あなたはarduinoのデジタルピンを参照していますか?リレーから2本のピン番号が使用されていて、それは問題ではありません – Luke

+0

私のマイクボードでは素早くチェックしましたが、ボードには必ずしも対応していないかもしれませんが、ここではピン0と1がシリアル通信に使用されます。あなたは、signalPinはピン1を使用していると書いています。これは確かにシリアルピンの1つです。それらを別のピンに切り替えると正常に動作するはずです(コードが正しい場合は、まだ確認していません)。 – PKG

+0

オハイオ州、しかし私はアナログPIN 1を使って読んでいます。それも重要ですか? – Luke

関連する問題