아두이노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
아두이노2021. 2. 14. 00:42
728x90

[ 문제 ]

Serial Monitor에서 5개의 단어를 입력받은 후 문자열로 정렬하라.

 

[ 코드 ]

void setup() {

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

Serial.begin(9600);

}



void loop() {

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

  int state = 1, i=0;

  char buffer[128];

  String str[5];



  while(true){

    while(i<5){

      if(state==1){

      Serial.print("Enter the ");

      Serial.print(i+1);

      Serial.print("th Word -->");

      state = 2;

      }

      while(Serial.available()){

      int len = Serial.readBytesUntil('\n',buffer,127);

      if(len>0){

        buffer[len] = '\0';

        str[i] = String(buffer);

        Serial.println(str[i]);

        i++;

        state = 1;

        break;

        }

       }

      }

    if(i==5)    break;

  }

  

    if(i==5){

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

      for(int b=a+1; b<5; b++){

        int compare = str[a].compareTo(str[b]);

        if(compare>0){ //오름차순

          String temp = str[a];

          str[a] = str[b];

          str[b] = temp;

        }

      }

    }



    Serial.println("After Sorting");

    for(int k=0;k<5;k++){

      Serial.println(str[k]);

    }

  }

}

 

[ 결과 ]

 

 

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

반응형
Posted by mminky
아두이노2021. 2. 14. 00:36
728x90

* 따라하면서 배우는 아두이노 책을 참고했습니다.

 

[ 문제 ]

5.3 아래의 패턴이 반복해서 표시되도록 스케치를 작성해보자.

단, 패턴을 배열로 저장하여 사용하는 방식이 아니라 계산에 의해 패턴을 생성하도록 한다.

 

 

 

[ 코드 ]

결과영상

int pattern, shift;

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

void setup() {

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

Serial.begin(9600);

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

  pinMode(pins[i],OUTPUT);

  digitalWrite(pins[i],LOW);

}

}



void loop() {

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

for(int idx=0;idx<6;idx++){

  pattern = 1;

  if(idx<4) shift=idx;

  else shift=6-idx;



  for(int i=0;i<shift;i++)

   pattern = (pattern<<1)|0x01;



if(pattern==0b0001){

digitalWrite(pins[0],HIGH);

digitalWrite(pins[1],LOW);

digitalWrite(pins[2],LOW);

digitalWrite(pins[3],LOW);

}

if(pattern==0b0011){

digitalWrite(pins[0],HIGH);

digitalWrite(pins[1],HIGH);

digitalWrite(pins[2],LOW);

digitalWrite(pins[3],LOW);

}

if(pattern==0b0111){

digitalWrite(pins[0],HIGH);

digitalWrite(pins[1],HIGH);

digitalWrite(pins[2],HIGH);

digitalWrite(pins[3],LOW);

}

if(pattern==0b1111){

digitalWrite(pins[0],HIGH);

digitalWrite(pins[1],HIGH);

digitalWrite(pins[2],HIGH);

digitalWrite(pins[3],HIGH);

}

delay(1000);

}



}

 

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

반응형
Posted by mminky
아두이노2021. 2. 14. 00:26
728x90

[ 코드 ]

int nState = 1;



void setup() {

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

Serial.begin(9600);

}

void loop() {

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

if (nState){

  Serial.println("Enter 2 Integers to add");

  nState = 0;

}

while(Serial.available() == 0) {} //wait for input

int v1 = Serial.parseInt();



while(Serial.available() == 0) {}

int v2 = Serial.parseInt();



int sum = v1+v2;

Serial.print(v1);

Serial.print("+");

Serial.print(v2);

Serial.print("=");

Serial.println(sum);



nState = 1;

}

 

 

[ 결과 ]

 

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

반응형
Posted by mminky