2017-04-07 66 views
-1

我需要arduino uno r3中的按鈕幫助。通過使用寄存器而不使用pinMode,digitalWrite,digitalRead if-else和switch-case。Arduino按鈕

int led1=2, led2=3, led3=4, led4=5; 
int led5=8, led6=9, led7=10, led8=11; 
int button=12; 
int i,j,k; 

void setup() { 
    DDRB=DDRB|B00001111; 
    DDRD=DDRD|B00111100; 

    Serial.begin (9600); 
} 

void loop() { 
    int f=0; 
    for(int s=0;s<16;s++){ 
     int k=0; 
     int i=0b00001; 
     int j=0b0011; 
     PORTB=f; 
     f +=1; 
     if (f==64){f=0;} 
     PORTD=0; 
     for(k=0;k<7;k++){ 
      delay(250); 
      PORTD=i; 
      delay(250); 
      PORTD=j; 
      i=(i<<1); 
      j=(j<<1); 
     } 
     j=(j>>1); 
     for(int d=0; d<9; d++){ 
      delay(250); 
      PORTD=i; 
      delay(250); 
      PORTD=j; 
      i=(i>>1); 
      j=(j>>1);  
     } 
    } 
} 

這是代碼。那我需要的是爲按鈕做一個while循環。當我按下按鈕時,程序將開始,當我再次按下按鈕時,程序將停止。

+0

什麼是你要求的「程序」,一個定義好的程序,或者你想打開/關閉Arduino? –

+0

一個定義的例程,led將通過使用端口操作打開 – Thearnavut

回答

0

那麼,你可以用2種方法做到這一點。

首先一個

簡單之一被寫入和直接讀取一個字節進入/ FOM EEPROM。每次按下按鈕時,都需要先閱讀並驗證該值。讓字節意味着0關閉,1打開。所以,如果你按下按鈕,已保存的字節爲0,所以你需要將其更改爲1

你要編寫使用此: https://www.arduino.cc/en/Tutorial/EEPROMWrite

這種管理後,您將需要閱讀這個字節不斷地在你的循環語句中。如果字節是1,那麼你的線程可以被執行。

你會使用這個閱讀:https://www.arduino.cc/en/Tutorial/EEPROMRead

這是一炮殺死蚊子,但以後可以重複使用,以管理其他類型的信息的。您將使用相同的邏輯,但保存更詳細或複雜的值。我們正在談論某種數據庫。

http://playground.arduino.cc/Code/DatabaseLibrary

我很抱歉,但我現在不能給你寫一個示例代碼。工作第一。如果你不能這樣做,直到一天結束,也許我可以晚點來,並通過這篇文章來幫助你。

+0

我怎麼做一個開/關按鈕 – Thearnavut

+0

我不明白。一個按鈕不能保持一個狀態,如果他按下一次,他只是發出一個信號。你需要選擇你要用這個信號做什麼。 https://www.arduino.cc/en/tutorial/pushbutton –