2014-02-25 62 views
0

我正在使用Arduino Uno並嘗試將兩部分的學校項目編碼在一起。兩個部分單獨工作良好,但合併後,只有部分1工作。 第1部分:涉及1個按鈕開關,2個LED,其中一個保持打開狀態,另一個保持關閉狀態,該按鈕將變爲打開或關閉狀態。 第二部分:伺服電位器控制Arduino編碼問題:兩部分組合不起作用

我確定伺服器只有在按下按鈕時纔會結束工作,這不應該發生,電位器/伺服代碼不應該依賴於代碼爲LED。我絕對是一個初學者,並且不太瞭解代碼的功能,所以請原諒我的任何冗餘。任何幫助深表感謝。

#include <Servo.h> 
Servo myServo; 
int const potPin = A0; 
int potVal; 
int angle; 
int switchState; 
int lastSwitchState = 0; 
const int bluePin = 3; 
const int yellowPin = 4; 
const int button = 2; 
int bluelight = LOW; 
int yellowlight = HIGH; 

void setup(){ 
    pinMode(bluePin, OUTPUT); //blue LED 
    pinMode(yellowPin, OUTPUT); //yellow LED 
    pinMode(button, INPUT); //switch 
    myServo.attach(9); 
    Serial.begin(9600); 
} 
void loop(){ 
    // PART 1 - this is the only part that seems to be working now? 
    switchState = digitalRead(button); 
    while (digitalRead(button)==LOW); 
    if (digitalRead(button)==LOW){ 
    bluelight=!bluelight; 
    digitalWrite(bluePin, bluelight); 
    digitalWrite(yellowPin, yellowlight); 
    } 
    else{ 
    if (switchState=!lastSwitchState) { 
    yellowlight=!yellowlight; 
    bluelight=!bluelight; 
    digitalWrite(yellowPin, yellowlight); 
    digitalWrite(bluePin, bluelight); 
    } 
    } 
    // PART 2 - Only works when button is pressed? 
    potVal = analogRead(potPin); 
    Serial.print("potVal: "); 
    Serial.print(potVal); 
    angle = map(potVal, 0, 1023, 0, 179); 
    Serial.print(", angle: "); 
    Serial.println(angle); 
    myServo.write(angle); 

    delay(250); //wait for a quarter second 
    } 

回答

0

在If else語句中進行更正。檢查條件時出現問題。並且與pinPin(A0)相互依賴的bluePin & yellowPin。所以他們個人工作得很好。

0

你正在做的:

while (digitalRead(button)==LOW); 

代碼將停止的每一個執行,直到digitalRead成真,使語句後的代碼被執行按鈕就變成HIGH

我後ONLY可能會不確定,因爲下面的IF已經是在LOW或HIGH讀數的情況下應該怎麼做的。 延遲(250);似乎是將阻止你的執行,一旦同時被刪除的代碼只是一部分,所以我認爲這是你唯一的聯鎖錯誤:)

+0

當我拿出while語句,其工作代碼它不起作用,所以我不確定我在if語句中做了什麼錯誤。有什麼建議要改變它,以便開關切換哪個燈保持點亮? – user3350391

+0

現在你必須糾正你的if語句。如果按鈕爲低電平,則不進行任何操作,如果高電平切換LED狀態。請注意,如果持續按下led按鈕,將持續打開和關閉。按鈕邏輯也可能倒置,取決於wh。 – Lesto

0

這是你的錯誤:

而(digitalRead(按鈕)== LOW);

程序停留在這個循環中所有的時間這BUTTOM它不是壓制,那麼當你按下它繼續,但進入此按鈕時它的高(真)