我需要一个带按钮的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循环。当我按下按钮时,程序将启动,当我再次按下按钮时,程序将停止。
答案 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
对不起,我现在不能给你写一个示例代码。工作第一。如果你不能这样做,直到一天结束,也许我可以稍后来这个帖子来帮助你。