'버튼 누르면'에 해당되는 글 1건

  1. 2021.02.14 [ 아두이노 ] 버튼 눌러서 LED 패턴 변경하기 (p.115 문제6.3)
아두이노2021. 2. 14. 00:51
728x90

[ 문제 ]

디지털 2번 핀에서 5번 핀까지 5개의 LED를 연결하고 디지털 14번 핀에 풀다운 저항을 통해 버튼을 연결한다.

LED에는 다음의 패턴이 0.5초 간격으로 반복되도록 한다.

단, 버튼이 눌러진 경우에 패턴의 진행방향이 바뀌도록 스케치를 작성해보자.

즉, 버튼이 한 번 눌러지면 패턴은 '1>2>3>4' 순서의 순방향으로 진행되고,

버튼이 다시 눌러지면 패턴은 '4>3>2>1' 순서의 역방향으로 진행되도록 한다.

시작 시에는 순방향으로 패턴이 바뀌는 것으로 한다.

 

 

 


[ 코드 ]

결과영상

int pins_LED[] = {2,3,4,5};

int pins_button = 14;

int LED_pattern[] = {0b0001,0b0010,0b0100,0b1000};

boolean state_previous = false;

int i=0;

int state = 0;



void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

  

  pinMode(pins_button,INPUT);

  for(int i=0;i<4;i++){

    pinMode(pins_LED[i],OUTPUT);

  }

}



void loop() {

  // put your main code here, to run repeatedly:

    boolean state_current = digitalRead(pins_button);



  if(state ==0){// 2>3>4>5

       if((state_current==1) && (state_previous==0)){

          i-=2;

          state_previous = 1;

          state = 1;

      }

      else{

        if((state_current==0)&&(state_previous==1)){

        state_previous = 0;  

        }

        if(i==4) i=0;

        if(i<4){

          for(int j=0;j<4;j++){

            digitalWrite(pins_LED[j],bitRead(LED_pattern[i],j)); //BITREAD read right->left

            }

            i++;

            delay(500);

           }

         }

       }



    if(state == 1){ //2<3<4<5

      if((state_current==1) && (state_previous==0)){

          i+=2;

          state_previous = 1;

          state = 0;         

      }

      else{

        if((state_current==0)&&(state_previous==1)){

        state_previous = 0;  

        }

        

        if(i==-1) i=3;

        if(i>=0){

          for(int j=0;j<4;j++){

            digitalWrite(pins_LED[j],bitRead(LED_pattern[i],j));

          }         

          i--;

         delay(500);

         }

      }

  }

  

}



※ 제 글이 도움이 되었다면 공감 부탁드려요 :)

반응형
Posted by mminky