아두이노

본문 바로가기
사이트 내 전체검색


아두이노
아두이노

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);

}


댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.