4. 내장 함수
페이지 정보
작성자 관리자 댓글 0건 조회 2,661회 작성일 18-09-17 15:42본문
4. 내장 함수
4. 함수
함수의 의미를 이해해야만 아두이노에서 함수를 이해할 수 있다. 함수를 사용하고자 할 경우, void setup(), void loop() 외에 선언하여 사용할 수있다.
1) digitalRead()
특정 디지털 핀의 값에서 HIGH, LOW값을 읽어 들인다.
digitalRead(pin);
pin : 읽고자하는 디지털 핀
반환 : HIGH, LOW
int ledPin = 13; // LED 연결 디지털 핀 13번
int inPin = 7; // pushbutton 연결 디지털 핀 7번
int val = 0; // 읽은 값을 저장할 변수명
void setup() {
pinMOde(ledPin, OUTPUT); // 디지털 핀 13을 출력선언
pinMode(inPin, INPUT); // 디지털 핀 7을 입력선언
}
void loop() {
val = digitalRead(inPIn); // 입력 핀 읽음
digitalWrite(ledPin, val); // LED를 버튼의 값으로 출력
}
2) digitalWrite()
디지털 핀에 HIGH, LOW값을 적용할 수 있다. 해당 핀 정보에서 pinMode() 선언에서 OUTPUT 으로 설정되면, 해당 전압 값을 설정할 수 있다. 5V (또는 3.3V)는 HIGH, 0V(ground)는 LOW 적용된다.
또한 INPUT으로 설정하면, 해당 전압은 활성 또는 비활성화 입력 핀의 내부 풀업되며, 가급적 INPUT_PULLUP을 설정하여 내부 풀업저항을 활성화하는 것을 권장한다.
digitalWrite(pin, value);
pin: 설정하고자 하는 핀번호
value : HIGH, LOW
void setup() {
pinMode(13, OUTPUT); // 디지털 핀 13번 출력선언
}
void loop() {
digitalWrite(13, HIGH); // 디지털 핀 13번 HIGHT적용
// LED ON
delay(1000);
digitalWrite(13, LOW); // 디지털 핀 13번 LOW적용
// LED OFF
delay(1000);
}
3) pinMode()
특정 핀을 입력, 출력을 동작하도록 정의 할 수 있다.
해당 모드의 경우 INPUT, OUTPUT, INPUT_PULLUP으로 정의할 수 있다.
pinMode(pin, mode);
pin : 설정하고자하는 핀번호
mode : INPUT, OUTPUT, INPUT_PULLUP 정의
실습:
void setup() {
pinMode(13, OUTPUT); // 디지털 핀 13번 출력선언
}
void loop() {
digitalWrite(13, HIGH); // 디지털 핀 13번 HIGHT적용
// LED ON
delay(1000);
digitalWrite(13, LOW); // 디지털 핀 13번 LOW적용
// LED OFF
delay(1000);
}
4) analogRead()
특정 아날로그 핀에 값을 읽어 들인다. 읽은 전압 값은 0에서 1024 사이의 값을 매핑하는 것으로 5V / 1024 단위로 단위당 0.0049V (4.9mV) 단위이다.
아날로그 입력을 읽은 시간은 0.0001초이며, 최대 읽기율은 1초에 약 1만번이다.
analogRead(pin);
pin :읽고자 하는 아날로그 핀
반환 : 0~ 1013
실습 :
int analogPin = 3; // 아날로그 핀 3번에 연결
int val = 0; // 읽은 값을 저장할 변수명
void setup() {
Serial.begin(9600); // 시리얼 설정
}
void loop() {
val = analogRead(analogPIn); // 입력 핀 읽음
Serial.println(val) // 시리얼 결과값 출력
}
5) analogWrite()
아날로그핀(PWM)에 적용하고자 할 경우에 사용한다. 주로 LED를 밝기 조절할 경우 및 다양한 모터를 제어할 경우에 적용할 수 있다.
Pulse Width Modulation 즉, PWM은 펄스 폭 변조로서 펄스의 진폭을 조정하여 다양한 분야에 적용이 가능하다
analogWrite(pin, value);
pin : 설정하고자 하는 핀번호
value : 0에서 244 사이의 값
실습 :
int ledPin = 9; // LED 연결 디지털 핀 9번
int analogPin = 3; // 아날로그 핀 3번
int val = 0; // 읽은 값을 저장할 변수명
void setup() {
pinMode(ledPin, OUTPUT); // 디지털 핀 출력선언
Serial.begin(9600); // 시리얼 설정
}
void loop() {
val = analogRead(analogPIn); // 입력 핀 읽음
analogWrite(ledPin, val / 4); // 읽은 값 0~1023 값을 출력으로 0 ~ 255출력
Serial.println(val / 4) // 시리얼 결과값 출력
}
6) tone()
특정 주파사(50% 듀티 사이클)의 구형파를 발생시킨다. 지속시간을 정할 수 있으며, noTone()을 호출하기 전까지 구형파가 지속된다. 주로 피에조 버저, 스피커에 연결하여 tone을 연주할 수 있다.
tone(pin, frequency);
tone(pin, frequency, duration);
pin : 출력하고자 하느 핀
frequency : tone의 주파수(Hz 단위)
duration : tone 의 지속시간 (밀리초 단위)
실습:
#include “pitches.h”
// 멜로디 정의
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0,NOTE_B3, NOTE_C4
};
// 기간 : 4 = 4분음표, 8=8분음표
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
void setup() {
for ( int thisNote= 0; thisNote< 8; thisNote ++) {
// 4분음표 = 1000 / 4, 8분음표 = 1000 / 8 계산
int noteDuration = 1000 / noteDurations[thisNote];
tone(8, melody[thisNote], noteDuration);
// 시간 간격 계산 적용
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// 톤 정지
noTone(8);
}
}
void loop() {
// ...
}
7) noTone()
tone()에서 발생한 구형파를 정지한다.
noTone( pin);
pin : tone 정지할 핀 번호
실습 :
#include “pitches.h”
// 멜로디 정의
int melody[] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0,NOTE_B3, NOTE_C4
};
// 기간 : 4 = 4분음표, 8=8분음표
int noteDurations[] = {
4, 8, 8, 4, 4, 4, 4, 4
};
void setup() {
for ( int thisNote= 0; thisNote< 8; thisNote ++) {
// 4분음표 = 1000 / 4, 8분음표 = 1000 / 8 계산
int noteDuration = 1000 / noteDurations[thisNote];
tone(8, melody[thisNote], noteDuration);
// 시간 간격 계산 적용
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// 톤 정지
noTone(8);
}
}
void loop() {
// ...
}
8) delay()
정해진 시간 (밀리초) 동안 동작을 멈출 수 있다. (1초는 1000ms)
delay(ms);
ms : 적용하고자 하는 초
실습 :
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT); // 디지털 핀 13번 출력선언
Serial.begin(9600);
}
void loop() {
digitalWrite(ledPin, HIGH); // 디지털 핀 13번 HIGHT적용
// LED ON
delay(1000); // 1초 대기
digitalWrite(ledPin, LOW); // 디지털 핀 13번 LOW적용
// LED OFF
delay(1000);
}
9) delayMicroseconds()
정해진 마이크로초 동안 동작을 멈출 수 있다. 약 100만 마이크로 초로 정의된다.
delayMicroseconds(us);
us : 적용하고자 하는 마이크로 초
해당함수는 3마이크로 초 이상 범위에서 정확하게 동작된다. 작은 지연시간 동안 정확하가게 동작한다는 보장을 할 수 없다.
실습 :
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT); // 디지털 핀 13번 출력선언
Serial.begin(9600);
}
void loop() {
digitalWrite(ledPin, HIGH); // 디지털 핀 13번 HIGHT적용
// LED ON
delayMicroseconds(50); // 1초 대기
digitalWrite(ledPin, LOW); // 디지털 핀 13번 LOW적용
// LED OFF
delayMicroseconds(50);
}
10) micros()
아두이노 보드가 시작한 후으 ㅣ마이크로 초 숫자를 반환한다. 해당 동작은 약 70분후 오버플로우 된다. 이때 0으로 초기화 된다.
time = micros();
실습 :
unsigned long time;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(“Time : ”);
time = micros();
Serial.print(time); //보드 시작후 지난 시간 출력
delay(1000);
}
11) millis()
아두이노 보드가 시작한 후 밀리 초 숫자를 반환한다. 해당 동작은 약 50일 후 오버플로우 된다. 이때 0으로 초기화 된다.
time = millis();
실습 :
unsigned long time;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(“Time : ”);
time = millis();
Serial.print(time); //보드 시작후 지난 시간 출력
delay(1000);
}
12) random()
임의의 값을 난수로 발생할 수 있다.
random(max);
random(min, max);
min :발생 난수의 최소값
max :발생 난수의 최대값
반환 : min과 max 사이의 임의값
실습 :
long randNumber;
void setup() {
Serial.begin(9600);
}
void loop() {
randNumber = random(300); // 0 ~ 299 임의 값 출력
Serial.println(randNumber);
delay(1000);
randNumber = random(10, 20); // 10 ~ 19 임의 값 출력
Serial.println(randNumber);
delay(1000);
}
12) randomSeed()
임의의 값을 난수로 발생하기 위해 초기화 한다. 임의의 위치에서 시작하게 한다.
randomSeed();
실습 :
long randNumber;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0)); // 아날로그 핀 0번 채널에서 읽은 아날로그 값을 전달
}
void loop() {
randNumber = random(300); // 0 ~ 299 임의 값 출력
Serial.println(randNumber);
delay(1000);
randNumber = random(10, 20); // 10 ~ 19 임의 값 출력
Serial.println(randNumber);
delay(1000);
}
댓글목록
등록된 댓글이 없습니다.