阿杜诺。计算按钮按下的次数然后播放序列
Arduino. count the number of button press then play sequence
帮我编写这个程序
- 当我按下按钮一次时,序列 s1() 开始播放。
- 当我按下按钮两次时,序列 s2() 开始播放。
- 当我按三次按钮时,序列 s3() 开始播放。
- 当我按下按钮 4 次时,序列 s4() 开始播放。
//code
const int buttonPin = 10;
int buttonState = 0;
void setup(){
Serial.begin(9600);
//initialize pin 2 - 9 as output
for(int i=2;i<=9;i++){
pinMode(i,OUTPUT);
}
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
s1();
s2();
s3();
s4();
}
}
void s1(){
int i = 2 ;
for(int z=0;z<=1;z++){
for(int x=i;x<=9;x++){
digitalWrite(i,HIGH);
digitalWrite(x-1,LOW);
delay(500);
i = i + 1;
}
i = 2;
if(i = 2){
digitalWrite(9,LOW);
}
}
}
void s2(){
int y = 9;
for(int i=0;i<=1;i++){
for(int x=2;x<=5;x++){
if(y>=1){
digitalWrite(x,HIGH);
digitalWrite(y,HIGH);
delay(500);
y = y - 1;
}
}
off();
y = 9;
delay(500);
}
}
void s3(){
for(int i=0;i<=2;i++){
for(int z=2; z<=9;z++){
if(z % 2 == 0){
digitalWrite(z,HIGH);
}
}
delay(500);
for(int z=2; z<=9;z++){
if(z % 2 == 0){
digitalWrite(z,LOW);
}
}
delay(500);
for(int z=2; z<=9;z++){
if(z % 2 != 0){
digitalWrite(z,HIGH);
}
}
delay(500);
for(int z=2; z<=9;z++){
if(z % 2 != 0){
digitalWrite(z,LOW);
}
}
delay(500);
}
}
void s4(){
for(int i=0;i<=2;i++){
for(int x=2;x<=9;x++){
digitalWrite(x,HIGH);
delay(500);
}
off();
delay(500);
}
}
void off(){
for(int i=2;i<=9;i++){
digitalWrite(i,LOW);
}
}
你是说类似的意思吗?我使用内部上拉和按钮作为低电平有效开关,所以我使用了与 LOW 进行比较:
const int btn = 4;
byte btn_tim_on = 0;
byte btn_tim_off = 0;
byte btn_val = 0;
void setup() {
pinMode(btn, INPUT_PULLUP);
Serial.begin(57600); // debug purposes
}
void loop() {
if (digitalRead(btn) == LOW) {
if (++btn_tim_on == 5) { // 5 checks before it's considered as key press and every 256*4ms repeat
++btn_val;
}
btn_tim_off = 80; // about 0.32 second to confirm
} else {
btn_tim_on = 0; // reset button pressed timer
if (btn_tim_off > 0) {
if (--btn_tim_off == 1) { // call action
Serial.println(btn_val); // print in serial monitor
switch (btn_val) {
case 1: s1(); break;
case 2: s2(); break;
case 3: s3(); break;
case 4: s4(); break;
default: Serial.println(F("no action")); break;
}
}
} else {
btn_val = 0; // reset button press counter
}
}
delay(4);
}
// where to place s1, s2, s3 and s4 ...
// playing these actions is blocking, so no keys are detected during "play"
帮我编写这个程序
- 当我按下按钮一次时,序列 s1() 开始播放。
- 当我按下按钮两次时,序列 s2() 开始播放。
- 当我按三次按钮时,序列 s3() 开始播放。
- 当我按下按钮 4 次时,序列 s4() 开始播放。
//code
const int buttonPin = 10;
int buttonState = 0;
void setup(){
Serial.begin(9600);
//initialize pin 2 - 9 as output
for(int i=2;i<=9;i++){
pinMode(i,OUTPUT);
}
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
s1();
s2();
s3();
s4();
}
}
void s1(){
int i = 2 ;
for(int z=0;z<=1;z++){
for(int x=i;x<=9;x++){
digitalWrite(i,HIGH);
digitalWrite(x-1,LOW);
delay(500);
i = i + 1;
}
i = 2;
if(i = 2){
digitalWrite(9,LOW);
}
}
}
void s2(){
int y = 9;
for(int i=0;i<=1;i++){
for(int x=2;x<=5;x++){
if(y>=1){
digitalWrite(x,HIGH);
digitalWrite(y,HIGH);
delay(500);
y = y - 1;
}
}
off();
y = 9;
delay(500);
}
}
void s3(){
for(int i=0;i<=2;i++){
for(int z=2; z<=9;z++){
if(z % 2 == 0){
digitalWrite(z,HIGH);
}
}
delay(500);
for(int z=2; z<=9;z++){
if(z % 2 == 0){
digitalWrite(z,LOW);
}
}
delay(500);
for(int z=2; z<=9;z++){
if(z % 2 != 0){
digitalWrite(z,HIGH);
}
}
delay(500);
for(int z=2; z<=9;z++){
if(z % 2 != 0){
digitalWrite(z,LOW);
}
}
delay(500);
}
}
void s4(){
for(int i=0;i<=2;i++){
for(int x=2;x<=9;x++){
digitalWrite(x,HIGH);
delay(500);
}
off();
delay(500);
}
}
void off(){
for(int i=2;i<=9;i++){
digitalWrite(i,LOW);
}
}
你是说类似的意思吗?我使用内部上拉和按钮作为低电平有效开关,所以我使用了与 LOW 进行比较:
const int btn = 4;
byte btn_tim_on = 0;
byte btn_tim_off = 0;
byte btn_val = 0;
void setup() {
pinMode(btn, INPUT_PULLUP);
Serial.begin(57600); // debug purposes
}
void loop() {
if (digitalRead(btn) == LOW) {
if (++btn_tim_on == 5) { // 5 checks before it's considered as key press and every 256*4ms repeat
++btn_val;
}
btn_tim_off = 80; // about 0.32 second to confirm
} else {
btn_tim_on = 0; // reset button pressed timer
if (btn_tim_off > 0) {
if (--btn_tim_off == 1) { // call action
Serial.println(btn_val); // print in serial monitor
switch (btn_val) {
case 1: s1(); break;
case 2: s2(); break;
case 3: s3(); break;
case 4: s4(); break;
default: Serial.println(F("no action")); break;
}
}
} else {
btn_val = 0; // reset button press counter
}
}
delay(4);
}
// where to place s1, s2, s3 and s4 ...
// playing these actions is blocking, so no keys are detected during "play"