2016-10-02 21 views
0

我需要我的論文一些幫助。我得到了開關1,2和3的操作完美。Arduino操作啓用/禁用開關或引腳

如流程圖所示,我需要禁用開關2和3,以便它不會中斷開關1的操作,並且與其他開關相同。然後,我需要先打開開關1,然後在開關1的操作結束後立即禁用開關1並啓用開關2。

開關2被使能後,開關1和3應保持禁用,以便它不能中斷開關2的操作,然後當開關2關斷時,它應被禁用,然後啓用開關3

使後開關3,開關1和開關被禁用,所以我不能中斷開關3的操作。開關3關閉後,應該返回到開始位置。

我編碼的Arduino兆2560

enter image description here

這裏是我的代碼

void loop() { 
// put your main code here, to run repeatedly: 
buttonState1 = digitalRead(buttonPin1); 
buttonState2 = digitalRead(buttonPin2); 
buttonState3 = digitalRead(buttonPin3); 
if (buttonState1 == HIGH && buttonState2 == LOW && buttonState3 == LOW && counter == 1) { 
plantMode(); 
} else if (buttonState1 == LOW && buttonState2 == HIGH && buttonState3 == LOW && counter == 2) { 
maintenance(); 
} else if (buttonState1 == LOW && buttonState2 == LOW && buttonState3 == HIGH && counter == 3) { 
harvestMode(); 
} else { 
if (counter == 1) { 
    lcd.setCursor(0, 0); 
    lcd.print(" SWITCH ON "); 
    lcd.setCursor(0, 1); 
    lcd.print(" PLANTING MODE "); 
    digitalWrite(valve, HIGH); 
    delay(500); 
} else if (counter == 2) { 
    lcd.setCursor(0, 0); 
    lcd.print(" SWITCH ON "); 
    lcd.setCursor(0, 1); 
    lcd.print("MAINTENANCE MODE"); 
    digitalWrite(valve, HIGH); 
    delay(500); 
} else { 
    lcd.setCursor(0, 0); 
    lcd.print(" SWITCH ON "); 
    lcd.setCursor(0, 1); 
    lcd.print(" HARVEST MODE "); 
    digitalWrite(valve, HIGH); 
    delay(500); 
} 
} 
} 
+0

你的代碼現在做什麼,你準確地粘在哪裏?如果你想讓別人爲你做調試和/或爲你寫信,我擔心你會感到失望。 – halfer

回答

0

做了一個狀態機,以及每個狀態按鈕檢查你做的。

我還沒有編譯代碼,但我相信它會工作。

int state = 1 

void loop() { 
    switch(state){ 
    case 1: 
     if (digitalRead(buttonPin1)){ 
     plantMode(); 
     state = 2; 
     } 
     break; 
    case 2: 
     if (digitalRead(buttonPin2)){ 
     maintenance(); 
     state = 3; 
     } 
     break; 
    case 3: 
     if (digitalRead(buttonPin2)){ 
     maintenance(); 
     } 
     else{ 
     state = 4; 
     } 
     break; 
    case 4: 
     if (digitalRead(buttonPin3)){ 
     harvestMode(); 
     state = 5; 
     } 
     break; 
    case 5: 
    if (digitalRead(buttonPin2)){ 
     harvestMode(); 
     } 
     else{ 
     state = 1; 
     } 
     break; 
    } 
    else{ 
    lcdPrint(state); 
    delay(500); 
    } 
} 

void lcdPrint(int state){ 
    lcd.setCursor(0, 0); 
    lcd.print(" SWITCH ON "); 
    lcd.setCursor(0, 1); 
    switch(state){ 
     case 1: 
     lcd.print(" PLANTING MODE "); 
     break; 
     case 2: 
     lcd.print("MAINTENANCE MODE"); 
     break; 
     case 3: 
     lcd.print(" HARVEST MODE "); 
     break; 
     default: 
     lcd.print(" UNKOWN MODE "); 
    } 
    digitalWrite(valve, HIGH); 
}