天天看點

arduino按鍵控制led燈

介紹及代碼

一共9個按鍵9盞燈。

按第一個按鍵亮一盞燈

按第二個按鍵亮兩盞燈

按第三個按鍵亮三盞燈

按第四個按鍵亮四盞燈

例程代碼

//#define io_11
//#define io_12

#define button_delay 5            //單按鈕消除抖動延時
#define button_every_delay 50      //多按鈕操作間隔

//io高低點吧狀态标志位,0代表低電平,1代表高電平
bool io_flag[18]={0,0,0,0,0,0,0,0,0,0,0,0,0};

//按鈕變化标志位,0代表無變化,1代表有變化
bool button_flag[18]={0,0,0,0,0,0,0,0,0,0,0,0,0};

int i;

void print_s(){
  for(int j=11;j<=9+i;j++)
  {
    digitalWrite(j,HIGH);
  }
  for(int j=10+i;j<=19;j++)
  {
    digitalWrite(j,LOW);
  }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  for(i=2;i<=10;i++)
    pinMode(i,INPUT);
  for(i=11;i<=19;i++)
  {
    pinMode(i,OUTPUT);
    digitalWrite(i,LOW);
  }
  Serial.println("Init succ");
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
  for(i=2;i<=10;i++)
  {
    if(digitalRead(i)==HIGH)
    {
      delay(button_delay);
      if(digitalRead(i)==HIGH)
        {
          if(io_flag[i]==0)
            {
              io_flag[i]=1;
              print_s();      //按鈕按下,列印消息
              delay(button_every_delay);
            }
        }
    }
    
    if(digitalRead(i)==LOW)
    {
      delay(button_delay);
      if(digitalRead(i)==LOW)
        {
          if(io_flag[i]==1)
            {
              io_flag[i]=0;
              //print_s();      //按鈕松開,列印消息
              delay(button_every_delay);
            }
        }
    }
  }
 
}      

擴充

pinMode(2,INPUT_PULLUP);      

例程1

void setup() {
  Serial.begin(9600);
  pinMode(2,INPUT_PULLUP);
}

void loop() {
  Serial.println(digitalRead(2));
  delay(500);
}      

例程2

void setup() {
  Serial.begin(115200);
  pinMode(36,INPUT_PULLUP);
  pinMode(39,INPUT_PULLUP);
  pinMode(34,INPUT_PULLUP);
  pinMode(35,INPUT_PULLUP);
}
 
void loop() {
  Serial.print("36:");
  Serial.print(digitalRead(36));
  Serial.print("   ");

  Serial.print("39:");
  Serial.print(digitalRead(39));
  Serial.print("   ");

  Serial.print("34:");
  Serial.print(digitalRead(34));
  Serial.print("   ");

  Serial.print("356:");
  Serial.println(digitalRead(35));
  
  delay(500);
}