2016-10-02 5 views
0

私の論文には助けが必要です。スイッチ1、スイッチ2、スイッチ3の動作が完全に動作しています。アルドゥイノの操作の有効/無効スイッチまたはピン

フローチャートに見られるように、スイッチ1とスイッチ2を中断しないように、スイッチ2と3を無効にする必要があります。次に、最初にスイッチ1をオンにし、スイッチ1の動作が終了した直後にスイッチ1をディセーブルにし、スイッチ2をイネーブルにする必要があります。スイッチ2をイネーブルにした後

、それはスイッチ2の操作を中断することができないように1と3は無効のままにすべき、とスイッチ2がオフになっているときに、それが無効になった後、有効にした後スイッチ3.

を有効にする必要があります切り替えますスイッチ3、スイッチ1およびスイッチは無効になり、スイッチ3の動作を中断できません。スイッチ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); 
} 
関連する問題