簡體   English   中英

如何設置LED從一開始就關閉(Arduino)

[英]How to set the LED to turn off from the start (Arduino)

所以......我是Arduino的新手,我現在正努力做到這一點......但是我已經這樣做了一個小時而運氣不在我的身邊......以下是我的總結我正在做:我有一個Gizduino + 644(Arduino的副本,其中有ATmega 644在這里),一個紅外接近傳感器(3個PIN - VCC,GRND,OUT),2個LED(紅色和黃色)和2個100ohms電阻。

到目前為止,這是我能做的:

  • 在Arduino IDE中,我有一個案例,如果我鍵入'QRIN' - 接近和紅色LED將打開...如果接近感測到其范圍內的東西..黃色LED將打開。 如果我輸入'QROUT' - 接近將立即關閉,紅色LED將開啟10秒鍾並將關閉..

這就是問題所在:

  • 如果是第一次運行,黃色LED總是打開(我的意思是我只需點擊IDE中的上傳按鈕)....這是一個非常大的問題......如果我輸入案例,它只會關閉:'QRIN'和'QROUT'..

在我的代碼中,名稱如下:

  • 紅色LED - 鎖定
  • 黃色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;
  }
}

將行放在setup()的末尾:

digitalWrite(PROX_SENSOR_LED, LOW);

此外, if (ANALOG = HIGH)是一個錯誤的語句,並為您的ANALOG分配HIGH。 將其更改為if (ANALOG == HIGH)

所有GPIO都將在高阻抗輸入狀態下啟動,以便對LED的控制是浮動的 - 在這種情況下LED的狀態將取決於LED驅動電路以及它是否具有上拉或下拉電阻。 也就是說這是硬件問題而不是軟件問題。

上載期間,Arduino引導加載程序正在運行,它不會初始化上載過程不需要的任何I / O. 如果您無法修復硬件設計以使其浮動到關閉狀態,那么您需要修改引導加載程序以便盡早關閉LED - (仍然會出現可能會或可能不會顯示的故障)。 這可能是一個壞主意,因為那時你有一個特定於應用程序的引導加載程序而不是通用引導加載程序,而對於其他應用程序來說,設置這個I / O引腳可能是完全不合需要的。

也就是說,目前還不完全清楚為什么LED在上傳過程中出現了問題,在大多數情況下,簡單地初始化setup()的輸出似乎是可以接受的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM