jack 發問時間: 電腦與網際網路程式設計 · 6 年前

arduino程式問題

小弟想設計一個4輸入4輸出的arduino程式.

就是根據sw3,4的輸入端的結果來改變led1,2,3,4端的輸出,但sw1,2則是不管sw3,4端輸入為何,led1,2,3,4端強制輸出結果.

以下是我的概略表(低電壓=0,高電壓=1,不參考=x)

sw1 sw2 sw3 sw4 => led1 led2 led3 led4

======================================

1 0 x x => 0 1 0 1

0 1 x x => 0 1 1 0

0 0 0 0 => 1 0 0 0

0 0 1 0 => 0 1 0 1

0 0 0 1 => 0 1 1 0

0 0 1 1 => 1 0 1 1

以下是我試寫的程式,但怎樣驗證都不對,有高手大大能幫我嗎?

const int sw1=2,sw2=3,sw3=4, sw4=5; //定義按鍵為數位第N腳位

const int led1=6, led2=7,led3=8,led4=9; //定義LEDn為數位第N腳位

int val;

void setup() //初始化變數,設定接腳模式

{

pinMode(sw1,INPUT); //設定數位第2腳為輸入模式

digitalWrite(sw1,LOW); //開起數位第2腳的內部下拉電阻

(重複定義....)

pinMode(led1,OUTPUT); //設定數位第6腳為輸出模式

(重複定義....)

void loop()    //迴圈

{

int val1=digitalRead(sw1); //讀取開關狀態

int val2=digitalRead(sw2);

int val3=digitalRead(sw3);

int val4=digitalRead(sw4);

if(val1==HIGH||val2==HIGH) //代表sw1,2其中有一個是HIGH

{ //判斷sw1,2哪個是HIGH

if(val1==HIGH)

digitalWrite(led1,LOW);

digitalWrite(led2,HIGH);

digitalWrite(led3,LOW);

digitalWrite(led4,HIGH);

if(val2==HIGH)

digitalWrite(led1,LOW);

digitalWrite(led2,HIGH);

digitalWrite(led3,HIGH);

digitalWrite(led4,LOW);

}

else if(val3==LOW&&val4==LOW) //代表sw1,2都是LOW,判斷sw3,4

{

digitalWrite(led1,HIGH);

digitalWrite(led2,LOW);

digitalWrite(led3,LOW);

digitalWrite(led4,LOW);

}

(重複else if.....)

}

(發表字數有限請多包涵)

2 個解答

評分
  • 6 年前
    最佳解答

    mmm ..... 因為我身邊沒有材料和板子,所以我無法得知是否真的正確,但是編譯過了,而且以我的邏輯判斷,我寫的程式應該沒問題,如果真的有問題的話,第一點先檢查你自己的接線有無錯誤,再來檢查有沒有短路的問題(按鈕、接線等等),最後再來懷疑我的程式XDD

    題目解析:

    一開始所有的電位都是LOW,所以不需要特別把他write成LOW,(1、4),(2、5)的結果是一樣的,只要比免掉其他可能性,這個程式最多只需要4個判斷就可以出來了

    還有下一次請把錯誤訊息也寫出來,你貼你不完全的程式我也不知道你真正的問題是出在哪

    開始:

    int sw1=2,sw2=3,sw3=4, sw4=5; //定義按鍵為數位第N腳位

    int led1=6,led2=7,led3=8,led4=9; //定義LEDn為數位第N腳位

    void setup()

    {

    pinMode(sw1,INPUT); //設定數位第2腳為輸入模式

    pinMode(sw2,INPUT);

    pinMode(sw3,INPUT);

    pinMode(sw4,INPUT);

    pinMode(led1,OUTPUT); //設定數位第6腳為輸出模式

    pinMode(led1,OUTPUT);

    pinMode(led1,OUTPUT);

    pinMode(led1,OUTPUT);

    }

    void loop()

    {

    int val1=digitalRead(sw1); //讀取開關狀態

    int val2=digitalRead(sw2);

    int val3=digitalRead(sw3);

    int val4=digitalRead(sw4);

    if(val3==HIGH && val4==HIGH && val1==LOW && val2==LOW)

    {

    digitalWrite(led1,HIGH);

    digitalWrite(led2,LOW);

    digitalWrite(led3,HIGH);

    digitalWrite(led4,HIGH);

    }

    else if(val1==HIGH || val3==HIGH && val2==LOW)

    {

    digitalWrite(led1,LOW);

    digitalWrite(led2,HIGH);

    digitalWrite(led3,LOW);

    digitalWrite(led4,HIGH);

    }

    else if(val2==HIGH || val4==HIGH && val1==LOW)

    {

    digitalWrite(led1,LOW);

    digitalWrite(led2,HIGH);

    digitalWrite(led3,HIGH);

    digitalWrite(led4,LOW);

    }

    else if (val1==LOW && val2==LOW && val3==LOW && val4==LOW)

    {

    digitalWrite(led1,HIGH);

    digitalWrite(led2,LOW);

    digitalWrite(led3,LOW);

    digitalWrite(led4,LOW);

    }

    }

    這是我的Line: rrwnag8387 如果有程式、網路上面的問題的加我,我會很樂意幫你解答

    2015-06-07 17:30:31 補充:

    抱歉!! 在set的地方,

    pinMode(led1,OUTPUT); //設定數位第6腳為輸出模式

    pinMode(led1,OUTPUT);

    pinMode(led1,OUTPUT);

    pinMode(led1,OUTPUT);

    請把他改成

    pinMode(led1,OUTPUT); //設定數位第6腳為輸出模式

    pinMode(led2,OUTPUT);

    pinMode(led3,OUTPUT);

    pinMode(led4,OUTPUT);

    複製的太順手,忘了改了:P

    2015-06-08 00:42:19 補充:

    我不懂你所謂每個PIN的HIGH 差異很大是什麼意思ㄟ,是說有些LED燈很亮,有些很暗的意思嗎??

    參考資料: 自己
  • 6 年前

    本人嘗試過各種方法

    但只有設定為led1的輸出腳位為HIGH的時候

    輸出電壓有4.5V

    其餘的輸出腳位為HIGH時

    輸出電壓只有1.4V

    (不管led1換到任何腳位都是一樣的結果)

    電路沒有問題

    不知道這樣要如何解決?

還有問題?馬上發問,尋求解答。