아두이노 입출력, 밝기 조절

이윤설·2024년 8월 8일

코드 작성 후 결과값이 시리얼 모니터에 출력되는 과정

(1) 코드 작성: 아두이노 IDE에서 코드를 작성한다.
(2) Verify(컴파일): 코드의 문법 오류 등을 확인하기 위해 Verify 버튼을 클릭한다.
(3) Upload(업로드): 컴파일 된 코드를 아두이노 보드에 업로드한다.
(4) 시리얼 모니터 열기: 아두이노 IDE의 시리얼 모니터 창을 연다.
(5) 시리얼 통신: 아두이노 보드에서 PC로 데이터를 전송하면 시리얼 모니터에 해당 데이터가 출력된다.

Serial.println()

void setup() {
  Serial.begin(115200);

  Serial.println("Hello PC! I am arduino");
  Serial.println(78);
  Serial.println(1.23456);
  Serial.println(' N ');

  Serial.println(78, DEC);
  Serial.println(78, HEX);
  Serial.println(78, BIN);

  Serial.println(1.23456, 0);
  Serial.println(1.23456, 2);
  Serial.println(1.23456, 4);
}

void loop() {
}

  • Serial.println() 또는 print(): 아두이노의 상태가 어떤지 우리에게 알려주는 함수이다.
  • Serial.begin(speed): PC로 메시지를 데이터의 속도를 설정한다.
    시리얼 포트를 통해 문자 하나를 보내는데 10비트가 필요하다.
    그러므로 1초에 115200/10 = 11520문자를 보내는 속도다.
    11520문자는 A4 용지 기준 5페이지 정도의 양이다.

참고로 Serial.begin() 설정을 하지 않으면 콘솔에 메시지가 출력되지 않는다.
아두이노 보드에는 하나 이상의 UART(Universal Asynchronous Receiver-Transmitter) 포트가 있다. Serial.begin()은 이 UART 포트를 초기화하고 통신 속도를 설정한다.

Serial 통신을 사용하기 위해서는 반드시 Serial.begin()을 설정해야 한다. 그렇지 않으면 아두이노 보드가 Serial 통신을 할 준비가 되지 않기 때문에 콘솔에 메시지가 출력되지 않는다.

digitalWrite()

  • pinMode(pin, mode);

    • pin: 설정하고자 하는 보드의 핀 번호이다. 0,1핀의 경우 시리얼 통신용으로 할당되어 있어서 사용하지 않는다. A0~A5를 사용하려면 14~19를 사용한다.
    • mode: 설정하고자 하는 모드(입력: INPUT, 출력: OUTPUT).
      1.INPUT: 핀을 입력 모드로 설정한다. 센서나 스위치 등의 입력 신호를 받을 때 사용한다.
      2.OUTPUT: 핀을 출력 모드로 설정한다. LED나 모터 등의 출력 장치를 제어할 때 사용한다.
      3.INPUT_PULLUP: 버튼의 경우 외부에 저항을 이용하여 회로를 구성하는데, 외부의 저항을 사용하지 않고 아두이노의 마이컴 내부에 있는 저항을 이용할 때 사용한다.
  • digitalWrite(pin, value);

    • pin: 설정하고자 하는 보드의 핀 번호
    • value: HIGH 또는 LOW
  • delay(ms);

    • ms: 멈춰야할 밀리초 (unsigned long)

예제

천천히 눈뜨고 감기

const int LED = 13;
void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED, HIGH);
  delay(500);

  digitalWrite(LED, LOW);
  delay(500);
}

500밀리초를 delay 시켰다.
1000 밀리초 = 1초이므로, 0.5초동안 아두이노가 아무것도 수행하지 않고 일정시간을 대기한다.

Hz

1초 주기로 LED가 켜졌다 꺼졌다 한다. 즉, 1Hz의 주파수로 LED가 점멸한다.
같은 동작이 1초에 1번씩 반복될 때 1Hz로 동작한다고 한다. 같은 동작이 1초에 2번씩 반복될 때 2Hz로 동작한다고 한다.

빠르게 눈뜨고 감기

const int LED = 13;
void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED, HIGH);
  delay(50);

  digitalWrite(LED, LOW);
  delay(50);
}

이번에는 50 밀리초로 바꾸어서 실행해보았다. LED는 초당 10번 점멸한다.

밝기 조절

delay 함수를 사용하여 LED의 밝기를 조정할 수 있다.

// 어둡게 하기 
const int LED = 13;
void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED, HIGH);
  delay(1);
  
  digitalWrite(LED, LOW);
  delay(9);
 
}

LED에 대해 10%는 점등을, 90%는 소등을 반복한다면 우리는 LED의 밝기를 평균 10%의 밝기로 느끼게 된다.
결과적으로 delay 함수와 점등과 소등을 조정하여 밝기를 조정할 수 있다는 점을 알 수 있다.

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글