유투브 링크 : https://www.youtube.com/watch?v=Rmz9dzBHDgI&t=1s
지난 시간에 만든 회로를 바탕으로 SOS 신호를 송출해보겠습니다.
위 영상에서 보듯 짧게 3번 깜빡이고 길게 3번 다시 짧게3번 깜박이는
코드를 만들어 볼까요?
기본 개요
1. 8번 핀을 OUTPUT으로 설정
2. 8번에서 digitalWrite로 HIGH, LOW 신호
3. delay 시간을 조절하여 짧고 길게 깜빡이는 코드를 구현합니다.
void setup() {
pinMode(8, OUTPUT);
}
void loop() {
digitalWrite(8, HIGH); //LED 켜기
delay(200);
digitalWrite(8, LOW); //LED 끄기
delay(200);
digitalWrite(8, HIGH); //LED 켜기
delay(200);
digitalWrite(8, LOW); //LED 끄기
delay(200);
digitalWrite(8, HIGH); //LED 켜기
delay(200);
digitalWrite(8, LOW); //LED 끄기
delay(200);
delay(300);
digitalWrite(8, HIGH); //LED 켜기
delay(500);
digitalWrite(8, LOW); //LED 끄기
delay(500);
digitalWrite(8, HIGH); //LED 켜기
delay(500);
digitalWrite(8, LOW); //LED 끄기
delay(500);
digitalWrite(8, HIGH); //LED 켜기
delay(500);
digitalWrite(8, LOW); //LED 끄기
delay(500);
delay(300);
digitalWrite(8, HIGH); //LED 켜기
delay(200);
digitalWrite(8, LOW); //LED 끄기
delay(200);
digitalWrite(8, HIGH); //LED 켜기
delay(200);
digitalWrite(8, LOW); //LED 끄기
delay(200);
digitalWrite(8, HIGH); //LED 켜기
delay(200);
digitalWrite(8, LOW); //LED 끄기
delay(200);
delay(1000);
}
위 코드를 아두이노에 올리면 작동을 하기는 하는데
문제는
지금 같은 코드가 반복된다는 것입니다. 가독성도 떨어지고 있습니다.
digitalWrite(8, HIGH); //LED 켜기
delay(200);
digitalWrite(8, LOW); //LED 끄기
delay(200);
이 반복되는 부분을 새로운 led라는 함수를 정의하여 정리해보겠습니다.
아두이노에서도 다른 프로그래밍 언어와
마찬가지로 함수정의가 가능한데요 loop 함수 바깥
제일 아래쪽에 정의해주면 됩니다. 간단하게 함수를 살펴보겠습니다.
void led(int mytime) {
digitalWrite(8, HIGH); //LED 켜기
delay(mytime);
digitalWrite(8, LOW); //LED 끄기
delay(mytime);
}
loop 함수 밑에 위 함수를 씁니다.
함수를 살펴보면 이름은 led입니다
함수 이름은 중복만 되지 않게 설정하면 됩니다.
그리고 이 led함수는 int형 mytime이라는
변수를 넣어주어야하는 구조입니다.
int는 자료형이라고 하는데 말그대로 변수들의
자료형태를 지정해줍니다
int a라고 하면 a는 이제 정수만 사용가능합니다
a=1,2,-1
a=0.23 이렇게는 사용이 안됩니다(x)
실수를 사용하기 위해서는 double a
혹은
float a 이렇게 자료형을 지정해야 합니다
예전에는 데이터 저장 장소나 램이
많이 모자란 경우가 많아서
이런식으로 구별해서 사용했는데요
예를들어 int a 라고 하면 램 공간이 4칸
double a라고 하면 램 공간이 8 칸
소비되는데 램 공간이 작은 상태에서
정수를 사용할때 double을 쓰면 4칸을
낭비하는 것이니 구별하는 것입니다
그러나
최근에는 기술의 발전으로
자료형 구분은 점점 사라지고 있습니다
숫자와 문자를 구별하는 정도입니다
우리의 led함수는 int형 숫자를 받는 구조 이기 때문에
led(100)
or
led(3000)
이렇게 사용되어야 합니다.
우리가 정의한 led함수의 구조를 보면
들어온 인자가 delay에 전달되어
불이 켜지고 꺼지는 시간으로 사용됨을 알 수 있습니다.
led 함수를 정의했기 때문에 앞으로 아래 4줄짜리 코드를
digitalWrite(8, HIGH); //LED 켜기
delay(100);
digitalWrite(8, LOW); //LED 끄기
delay(100);
led(100); 단 한 줄로 바꿔서 사용할 수 있습니다.
함수를 정의해서 코드를 훨씬 간결하게 표현할 수 있습니다.
제일 처음 작성했던 코드를 led함수를 써서 다시 써보면
void setup() {
pinMode(8, OUTPUT);
}
void loop() {
led(200);
led(200);
led(200);
delay(300);
led(500);
led(500);
led(500);
led(200);
led(200);
led(200);
delay(1000);
}
void led(int mytime) {
digitalWrite(8, HIGH); //LED 켜기
delay(mytime);
digitalWrite(8, LOW); //LED 끄기
delay(mytime);
}
이렇게 훨씬 간결한 코드가 됩니다.
훨씬 보기가 편해졌습니다.
함수는 단순히 가독성 때문에 사용하는 것은 아닙니다.
함수 정의를 통해서 코드를 모듈화 할 수 있습니다.
역할을 잘게 쪼개서 코딩이 가능하다는 뜻입니다.
게임 프로그래밍을 한다고 하면 그냥 한번에 모든 코드를 써버리면
나중에 점프 방식을 바꾸려고 할 때 모든 코드를 살펴야 하지만
함수를 사용해서 모듈화 해놓으면 점프를 담당하는 부분만
살펴보면 되는 원리입니다.
'아두이노 기초 강의' 카테고리의 다른 글
2. 아두이노 기본 환경 & LED 회로 꾸미기 (0) | 2023.10.17 |
---|---|
3. 아두이노 소프트웨어 기초 digitalWrite (0) | 2023.10.17 |
5. 틴커캐드 로그인 & 기초 사용법 (0) | 2023.10.17 |
6. 틴커캐드 기초 회로 꾸미기 & 코딩하는 방법 (0) | 2023.10.17 |
7. 3개 led로 sos신호 보내기 - 아두이노 for문 part1 (0) | 2023.10.17 |