2016-02-27 39 views
1

編輯︰我得到程序來完成循環,現在它只是它在完成循環之前給了我一堆0 - 所以這裏是我的代碼的更新版本。Arduino在完成循環之前停留了一段時間

試圖創建一個程序,先打開一個LED,一旦它們全部亮起 - 一個接一個地關閉它們,並不斷打開和關閉它們。我已經成功點亮了它們並關閉了它們,但是當程序在完成循環並重新開始之前將它們全部關閉時,程序似乎停滯了一下。

int t=1000; 
unsigned long time; 
int pin; 
int value; 
int a; 
int b; 

void setup() { 
    // put your setup code here, to run once: 
    for(pin=2; pin<8; pin++){ 
    pinMode(pin, OUTPUT); 
    } 

    Serial.begin(9600); 

} 

void more(){ 
    for(int i=1; i<8; i++){ 
    for(pin=i; pin<8; pin++){ 
     digitalWrite(pin,HIGH); 
     a=bitRead(PORTD,7); 
     b=bitRead(PORTD,2); 

     for(pin=2; pin<8; pin++){ 
     value=bitRead(PORTD,pin); 
     if(value==1){ 
      Serial.print("1 "); 
     } 
     else{ 
      Serial.print("0 "); 
     } 
     } 
     Serial.println(); 
     Serial.println(); 
     delay(t); 
    } 
    } 
} 
void less(){ 
    for(int j=7; j>=2; j--){ 
    for(int p=j; p>1; p--){ 
     digitalWrite(p,LOW); 
     a=bitRead(PORTD,7); 
     b=bitRead(PORTD,2); 

     for(pin=2; pin<8; pin++){ 
     value=bitRead(PORTD,pin); 
     if(value==1){ 
      Serial.print("1 "); 
     } 
     else{ 
      Serial.print("0 "); 
     } 
     } 
     Serial.println(); 
     Serial.println(); 
     delay(t); 
    } 
    } 
} 

void loop() { 
    // put your main code here, to run repeatedly: 
    Serial.print("Time: "); 
    time=millis(); 
    Serial.println(time); 

    a=bitRead(PORTD,7); 
    b=bitRead(PORTD,2); 

    do{ 
    more(); 
    }while(a==0); 

    do{ 
    less(); 
    }while(b==1); 
} 
+0

我不確定你爲什麼要讀取這些引腳而不是讓代碼存儲它們的狀態。我也不確定你可以讀寫一個我認爲設置爲輸出模式的引腳。 – snoopen

+0

其實你編輯2是非常有意義的。 http://stackoverflow.com/questions/6160963/how-can-i-digitalread-a-pin-that-is-in-pinmode-output – snoopen

+0

好吧,我對這一切都很陌生,所以感謝提示! @snoopen – enirt

回答

1

a=0永遠是假的,因爲他們做的分配和評估什麼是分配b=1總是正確的。

使用==運算符來比較數字。

+0

謝謝!我會改變這個數據 – enirt

相關問題