과제/아두이노

2023년 1학기 2주차 실습과제

Developer성현 2023. 3. 17. 12:38

2-2

LED4개 점등 소등하기

소스코드

byte LED_PinMap[4] = {10, 11, 12, 13};

void setup() {
  for (int i = 0; i < 4; i++) {
//    4개의 LED를 출력으로 선언하기 위해 0~3까지 반복
    pinMode(LED_PinMap[i], OUTPUT);//출력핀 설정
  }
}

void loop() {
  for(int i = 0; i < 4; i++){
//    모든LED를 점등후 소등
    digitalWrite(LED_PinMap[i], 
    !digitalRead(LED_PinMap[i]));
//    현재 핀의 전압상태 1인지 0인지 를 가져와 반전시킨다.
  }
  delay(1000);
}

2-3

시리얼모니터로 1~4까지 입력받고 순서대로 LED점등후 소등 시키고 O, X로 4비트 표현

소스코드

byte LED_PinMap[4] = {10, 11, 12, 13};
char char_getdata = "";
int num = 0;
void setup() {
  Serial.begin(9600);
//  시리얼 통신속도를 9600으로 설정
  for (int i = 0; i < 4; i++) {
//    4개의 LED를 출력으로 선언하기 위해 0~3까지 반복
    pinMode(LED_PinMap[i], OUTPUT);//출력핀 설정
  }
}
void loop() {
  if (Serial.available()) {//시리얼 입력이 들어왔다면
    char_getdata = Serial.read();
//    문자형 변수에 입력받은 문자1개를 담는다.
    if (char_getdata >= '1' && char_getdata <= '4') {
//      입력받은 문자의 아스키값을 비교하여
//      문자1의 아스키값 49 ~ 문자 4의 아스키값 53 사이의 값만 입력을 허용
      num = char_getdata - '0' - 1;
//      문자를 정수로 바꾸기 위해
//      문자 0의 아스키값을 빼고 0부터 시작하기 위해 -1을 해준다
      for (int i = 0; i < 4; i++) {
//        0~3까지 반복
        if (num == i) {
//          입력받은 값과 비교하여 같다면 실생
          Serial.print("O ");
          digitalWrite(LED_PinMap[i], true);
        } else {
//          입력받은 값과 비교하여 다르다면 실생
          Serial.print("X ");
          digitalWrite(LED_PinMap[i], false);
        }
      }
      Serial.println("");//4bit O X 출력이 끝나면 줄바꿈
      delay(50);//led깜빡임을 눈이 확인가능하도록 약간의 딜레이를 준다.
      digitalWrite(LED_PinMap[num], false);//마지막led 소등
    }
  }
}

 

 

2-4

시리얼모니터로 4bit의 10진수를 입력받고 2진수로 변경후 LED점등시키고 O, X로 4비트 표현

소스코드

byte LED_PinMap[4] = {10, 11, 12, 13};
char char_getdata = "";
String getnum_str = "";
byte getnum_byte = 0;

void setup() {
  Serial.begin(9600);//시리얼 통신속도를 9600으로 설정
  for (int i = 0; i < 4; i++) {
//    4개의 LED를 출력으로 선언하기 위해 0~3까지 반복
    pinMode(LED_PinMap[i], OUTPUT);//출력핀 설정
  }
}

void loop() {
  if (Serial.available()) {//시리얼 입력이 들어왔다면
    char_getdata = Serial.read();
//    문자형 변수에 입력받은 문자1개를 담는다
    if (char_getdata == '\n') {//개행이 되면(입력이 끝나면)
      getnum_byte = getnum_str.toInt();
//      문자열 변수에 들어간 숫자를 정수로 변환
      for (int i = 3; i >= 0; i--) {//4bit이기에 4번 반복
//        10진수를 2진수로 변환하는 로직
        if (getnum_byte % 2 == 1) {
//          2로 나누었을때 나머지값이 1 이라면
          Serial.print("O ");
          digitalWrite(LED_PinMap[i], true);
        } else {
//          2로 나누었을때 나머지값이 0 이라면
          Serial.print("X ");
          digitalWrite(LED_PinMap[i], false);
        }
        getnum_byte /= 2;
      }
      Serial.println("");
//      4bit O X 출력이 끝나면 줄바꿈
      getnum_str = "";
    } else {//다음 문자가 더 있다면
      getnum_str += char_getdata;
//      단일문자를 String변수에 연결시켜 문자열을 만든다.
    }
  }
}