과제/아두이노
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변수에 연결시켜 문자열을 만든다.
}
}
}