2017-04-07 97 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 –