2016-10-12 5 views
1

私はArduinoに新しいです、私は現在この作業をしようとしています..しかし、私はすでにこれを1時間行っています私の側には運がありません... ここに私がやっていることの要約があります:私は、Gizduino + 644(ATmega 644のPhilでここにArduinoのコピー)、IR近接センサー(3 PIN - VCC 、GRND、OUT)、2個のLED(赤と黄色)、2個の100オームの抵抗。LEDを最初からオフに設定する方法(Arduino)

これまでのところ、これは私が何ができるかです:ArduinoのIDEで

  • 、私は「QRIN」を入力するとした場合持っている - 近接および赤色LEDがオンになりますが...もしその範囲内の近接感があります。黄色のLEDが点灯します。私は「QROUT」と入力した場合 - 近接はすぐにオフになり、赤のLEDが10秒間点灯し、...

をオフにし、これが問題です:

  • 黄色のLED (IDEのアップロードボタンをクリックするだけです)、非常に大きな問題です...ケースを入力するとオフになります: 'QRIN'と 'QROUT '..

私のコードでは、名前は次のとおりです。

  • レッドLED - LOCK
  • 黄色のLED - PROX_SENSOR_LED
  • 近接 - PROX

これはIDEで私のコードです:

int LOCK = 13; //RED LED, in pin 13 
int PROX = 12; //PROXIMITY, in pin 12 
int ANALOG = 0; //OUT of Proximity, in Analog 0 
int PROX_SENSOR_LED = 7; //Yellow LED, in pin 7 
int val = 0; //value to store 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(LOCK, OUTPUT); //set the pin # as output (VCC of the hardware) 
    pinMode(PROX, OUTPUT); //set the pin # as output (VCC of the hardware) 
    pinMode(PROX_SENSOR_LED, OUTPUT); //set the pin # as output (VCC of the hardware) 
} 

void loop() 
{ 
    digitalWrite(PROX_SENSOR_LED, LOW); //sets the output pin initially to LOW (but doesnt work.. T_T) 
    val = analogRead(ANALOG); //read the input pin 0 to 1023 
    if (val > 800) //if the sensor value is higher threshold set OUTPUT HIGH 
    { 
    digitalWrite(PROX_SENSOR_LED, HIGH); //sets output pin HIGH 
    delay(100); //waits for .1 second 
    } 

    char data = Serial.read(); //read 9600 

    switch (data) //start of case... like 'ON' 'OFF' 
    { 
    case 'QRIN': //this is my 'ON' 
       digitalWrite(PROX, HIGH); //turn the proximity to ON 
       digitalWrite(LOCK, HIGH); //turn the lock to ON 
       break; 
    case 'QROUT': //this is my off 'OFF' 
       digitalWrite(PROX, LOW); //turn the proximity to OFF 
       digitalWrite(LOCK, HIGH); //turn the lock to ON 
       delay(10000);    //for 10 seconds 
       digitalWrite(LOCK, LOW); //then off 
       if (ANALOG = HIGH) // I need this 'if' condition because if 
       { //this is not here... the Yellow LED is turn ON... 
        digitalWrite(PROX_SENSOR_LED, LOW); //I don't know why.. T_T 
       } 
       break; 
    } 
} 

答えて

0

セットアップの終わりにラインを入れて():

digitalWrite(PROX_SENSOR_LED, LOW); 

またif (ANALOG = HIGH)は間違った文であり、あなたのANALOGにHIGHを割り当てます。それをif (ANALOG == HIGH)と変更します。

+0

また、シリアルケースの読み込みに問題がないかどうかを確認するために、プリントをスイッチケースに入れてください。 – cagdas

+0

リセット後、出力はトライステートになり、出力をデフォルトにロウに設定すると、セットアップに余分なコードを追加する必要はありません。おそらくループの最初の回ではアナログ0から読み込み、800より大きい値をとり、アナログ1からの読み取りに続いて(ANALOG = HIGHエラー、HIGHが1であるため)、値が大きくなることはありません800より大きいので、次の質問はなぜ> 800の値ですか - センサーの出力が反転しているのでしょうか? –

+0

@PeteKirkhamはい、あなたはanalog readがおそらく5vを1024として割り当てられると思います。だから私は、ユーザに余分なデバッグ行をswitch文に入れるようにしたいと思います。 – cagdas

0

すべてのGPIOは高インピーダンス入力状態で起動し、LEDへの制御がフローティングになります。その場合のLEDの状態は、LEDドライブ回路に依存し、プルアップまたはプルダウンプルダウン抵抗。つまり、ハードウェアの問題ソフトウェアの問題ではありません。

アップロード中 Arduinoブートローダが実行されており、アップロード処理に必要ないI/Oは初期化されません。ハードウェア設計を修正してオフ状態にすることができない場合、LEDをできるだけ早くオフにするためには、modify the bootloaderが必要です(まだ表示されているかどうかは不明です)。それはおそらく悪い考えです。アプリケーション固有のブートローダではなく、汎用のブートローダを使用するためです。このI/Oピンを設定する他のアプリケーションでは、完全に望ましくない可能性があります。

つまり、アップロード中にLEDが点灯していて、単にsetup()の出力を初期化するのは、ほとんどの場合、問題ないとは思われません。

関連する問題