Arduino按钮

时间:2017-04-07 16:55:18

标签: arduino-uno

我需要一个带按钮的arduino uno r3的帮助。通过使用寄存器而不使用pinMode,digitalWrite,digitalRead if-else和switch-case。

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循环。当我按下按钮时,程序将启动,当我再次按下按钮时,程序将停止。

1 个答案:

答案 0 :(得分:0)

嗯,你可以用2种方式做到这一点。

第一个

简单的是直接在/ fom eeprom中写入和读取一个字节。每次按下按钮,都需要先读取它并验证该值。假设您的字节意味着0表示关闭,1表示打开。因此,如果按下按钮并且已保存的字节为0,则需要将其更改为1.

你打算用这个写: https://www.arduino.cc/en/Tutorial/EEPROMWrite

在此管理之后,您将需要在循环语句中不断读取此字节。如果byte为1,那么你的线程就可以执行了。

您将阅读使用此内容:https://www.arduino.cc/en/Tutorial/EEPROMRead

第二

这是一种杀死蚊子的大炮,但可以在以后重复使用以管理其他类型的信息。您将使用相同的逻辑,但保存更详细或更复杂的值。我们正在谈论某种数据库。

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

对不起,我现在不能给你写一个示例代码。工作第一。如果你不能这样做,直到一天结束,也许我可以稍后来这个帖子来帮助你。