아두이노 시작하기

magicdrill·2025년 1월 5일

아두이노 프로그래밍

setup()
프로그램이 시작할 때 딱 한번 실행되는 함수로, 주로 하드웨어 설정, 변수 선언 등을 수행함.

loop()
프로그램의 메인 함수로, 전원이 들어오는 동안 무한 반복하는 함수

시리얼 통신

시리얼 통신 : 한 번에 한 비트씩 데이터를 지속적으로 주고 받는 직렬 통신 / USB포트를 통해 PC에서 아두이노로 소스를 업로드하는 것 또한 시리얼 통신임.

디지털 입출력 포트 D0, D1을 통해 통신을 하기 때문에, 이 두 핀을 하드웨어 시리얼이라고 함.

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);//시리억 통신 속도 9600으로 설정
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello world");
  delay(1000);//1초 동안 시간을 지연한다.
}

1초마다 "Hello world" 문자열 출력하는 소스
컴파일 -> 아두이노 업로드 -> 시리얼 모니터로 동작 확인

Serial.begin()

  • 시리얼 통신의 시작을 알리며 속도 설정
  • 일반적으로 통신속도는 9600을 사용하며 단위는 bps임

Serial.println() / Serial.println()

  • 출력 함수

delay()

  • 시간을 지연시켜주는 함수로 () 안의 값은 ms 단위이기 때문에 1/1000초임

2진수와 16진수

2진수는 B 또는 0b, 16진수는 0x 또는 0x를 숫자 앞에 붙여 표현함

변수

1초마다 value 값을 1씩 증가시키는 소스 예제

int value = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);//시리얼 통신 속도 9600으로 설정
}

void loop() {
  //put your main code here, to run repeatedly:
  Serial.println(value);
  value++;
  delay(1000);//1초 동안 시간을 지연한다.
}

근데 println을 보고 java와 유사하다고 생각해

int value = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);//시리얼 통신 속도 9600으로 설정
}

void loop() {
  //put your main code here, to run repeatedly:
  Serial.println("value : " + value);
  value++;
  delay(1000);//1초 동안 시간을 지연한다.
}

를 수행했을 때 예상과 다른 결과가 나왔다.

아두이노의 println은 문자열 String과 int를 붙여 출력한다는 식으로 +를 사용할 수 없다. 그래서 int를 String으로 형변환해줘야 한다.

배열, 문자열, 함수, 조건문

배열, 문자열, 함수, 조건문은 모두 c++과 동일하다. 대신 문자열의 경우 string이 아니라 String으로 작성된다.

디지털 입출력

아두이노 우노에는 디지털 핀이 0~13번이 있다.
0번 핀은 시리얼 통신의 RX(수신), 1번 핀은 시리얼 통신의 TX(송신)로 기본 설정되어 있어 하드웨어 시리얼이라고 부른다.

pinMode(pin, mode)

  • 디지털 핀의 입력 또는 출력 모드를 설정할 수 있음.
  • pin에는 사용할 핀에 대응되는 숫자를 기입
  • mode에는 OUTPUT, INPUT, INPUT_PULLUP을 사용함

digitalRead(pin)

  • 각 핀의 상태를 읽어와서 핀모드를 통해 입력으로 설정한 핀의 값이 HIGH인지 ROW인지 판단

digitalWrite(pin, value)

  • 각 핀의 신호를 출력
  • pin에는 사용할 핀에 대응되는 숫자 기입
  • value값은 HIGH, LOW 기입

1초 간격으로 5, 6, 7핀에 연결된 LED가 꺼졌다 켜지는 기능 수행

/*
digital pin test
*/

int led1 = 5; // led를 digital 핀 5번에 연결
int led2 = 6; // led를 digital 핀 6번에 연결
int led3 = 7; // led를 digital 핀 7번에 연결

void setup() {
  // put your setup code here, to run once:
  pinMode(led2, OUTPUT); //digital 핀 6번을 출력으로 설정
  pinMode(led3, OUTPUT); //digital 핀 7번을 출력으로 설정
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(led1, HIGH);// led1 on
  digitalWrite(led2, HIGH);// led2 on
  digitalWrite(led3, HIGH);// led3 on
  delay(1000);// 지연시간 1초

  digitalWrite(led1, LOW);// led1 on
  digitalWrite(led2, LOW);// led2 on
  digitalWrite(led3, LOW);// led3 on
  delay(1000);// 지연시간 1초
}

아날로그 입력 & PWM 출력

아날로그 핀은 아날로그 신호를 입력만 받을 수 있음
아두이노 우노는 10bit 아날로그 디지털 변환기 (ADC)가 내장되어 있는데 0~5V의 전압을 0~1023사이의 값으로 대응해서 값을 읽어온다는 의미이다.

analogRead(pin)

  • pin에는 사용할 핀에 대응되는 핀의 이름(A0~A5)를 넣음
  • 0V~5V 범위 내의 아날로그 신호를 0~1023의 값으로 읽어오는 함수

analogWrite(pin, value)

  • PWM출력을 하는 함수
  • 함수 자체에 핀모드가 출력으로 설정되어 있어 pinMode로 설정할 필요가 없음
  • pin에는 사용할 핀에 대응되는 핀의 이름(A0~A5)를 넣음
  • value에는 0~255의 값을 넣어 대응되는 듀티비로 출력함
    디지털 핀 중 ~표시가 되어 있는 3, 5, 6, 9, 10, 11번 핀으로 사용 가능함

가변저항을 사용해 LED의 밝기를 바꾸는 기능 수행

int led = 9; //led를 9번 핀에 연결

void setup() {
  // put your setup code here, to run once:
  pinMode(led, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  int input = analogRead(A0);// int 변수 input을 선언하고 값을 A0에서 읽은 값으로 초기화
  analogWrite(led, input/4);// 가변저항에서 읽어들인 값을 4로 나눈 후 9번핀으로 출력
}

0개의 댓글