Arduino Reference
Arduino 프로그래밍 레퍼런스
Arduino Reference 소개
Arduino 레퍼런스는 Arduino 프로그래밍 API를 6개 하드웨어 카테고리로 정리한 검색 가능한 치트 시트입니다. 디지털IO(pinMode, digitalWrite, digitalRead, shiftOut, pulseIn), 아날로그(analogRead, analogWrite PWM, analogReference, analogReadResolution, map), 시리얼 통신(Serial.begin, println, read, available, parseFloat), 라이브러리(Wire I2C, SPI, Servo, LiquidCrystal, EEPROM), 인터럽트(attachInterrupt, detachInterrupt, volatile), 타이머(millis, micros, delay, 비차단 패턴)를 모두 다룹니다.
이 레퍼런스는 Arduino Uno, Mega, Nano, Due, Zero를 다루는 메이커, 로보틱스 개발자, 전자공학 학생, 임베디드 개발자를 위해 설계되었습니다. 각 항목에는 함수 시그니처 설명과 실용적인 C++ 코드 예제가 포함되어 있습니다. 예를 들어 analogRead 출력을 전압으로 변환하거나, pulseIn으로 초음파 거리를 측정하거나, 서보 모터 각도를 제어하는 예제 등을 제공합니다.
6개 카테고리는 일반적인 학습 경로를 반영합니다: 디지털 IO에서 시작해 아날로그 신호와 시리얼 디버깅으로 나아가고, 센서/액추에이터 라이브러리를 활용한 뒤, 인터럽트 기반 및 비차단 타이머 설계를 마스터하는 순서입니다. 브라우저에서 실행되며 다크 모드를 지원하고, 다운로드나 회원가입 없이 무료로 사용할 수 있습니다.
주요 기능
- 디지털 IO: pinMode, digitalWrite, digitalRead, 시프트 레지스터용 shiftOut, 초음파 센서용 pulseIn
- 아날로그: analogRead(0~1023), analogWrite PWM(0~255), analogReference, analogReadResolution(Due/Zero 12비트), map()
- 시리얼 통신: Serial.begin, print/println, read, available, 센서 데이터 입력용 parseFloat
- 내장 라이브러리: Wire(I2C), SPI, 서보 모터 제어, LiquidCrystal LCD, EEPROM 읽기/쓰기
- 외부 인터럽트: RISING/FALLING/CHANGE 모드의 attachInterrupt, detachInterrupt, volatile 변수 사용
- 전역 인터럽트 제어: 임계 구역 보호를 위한 noInterrupts()와 interrupts()
- 타이머 함수: millis(), micros(), delay(블로킹), delayMicroseconds() — 모든 타이밍 요구에 대응
- 비차단 딜레이 패턴: 메인 루프를 블로킹하지 않는 millis() 기반 주기적 실행 패턴
자주 묻는 질문
Arduino 레퍼런스에서 다루는 카테고리는 무엇인가요?
디지털IO(pinMode, digitalWrite, digitalRead, shiftOut, pulseIn), 아날로그(analogRead, analogWrite, analogReference, map), 시리얼 통신, 라이브러리(Wire/I2C, SPI, Servo, LiquidCrystal, EEPROM), 인터럽트(attachInterrupt, volatile), 타이머(millis, micros, delay, 비차단 패턴) 6가지입니다.
delay()와 millis() 비차단 패턴의 차이는 무엇인가요?
delay()는 지정한 밀리초 동안 프로그램 전체를 멈춥니다. millis() 비차단 패턴은 마지막 실행 시각을 저장하고 매 루프마다 경과 시간을 확인하여, 대기 중에도 센서 읽기나 LED 제어 같은 다른 작업을 계속 수행할 수 있습니다.
analogRead는 어떻게 동작하고 어떤 값을 반환하나요?
analogRead()는 아날로그 핀의 전압을 측정하여 0~1023 범위의 10비트 정수를 반환합니다(0V=0, 5V=1023). 전압 변환: voltage = val * (5.0 / 1023.0). Due/Zero에서는 analogReadResolution(12)로 12비트(0~4095) 해상도를 사용할 수 있습니다.
analogWrite는 어떤 기능을 하나요?
analogWrite()는 지원되는 핀에 PWM(펄스 폭 변조) 신호를 출력합니다. 값 범위는 0~255이며, LED 밝기 조절이나 모터 속도 제어에 주로 사용됩니다. 실제 아날로그 전압이 아닌 PWM 신호를 출력한다는 점에 유의하세요.
attachInterrupt를 올바르게 사용하는 방법은?
attachInterrupt(digitalPinToInterrupt(핀), ISR함수, 모드)로 호출하며, 모드는 RISING, FALLING, CHANGE 중 선택합니다. ISR 함수는 짧게 유지하고 delay()를 피해야 하며, 공유 변수는 volatile로 선언해야 합니다. 메인 루프에서 공유 변수의 다중 바이트 읽기 시 noInterrupts()/interrupts()로 보호하세요.
Wire 라이브러리는 어떤 용도로 사용하나요?
Wire 라이브러리는 I2C(TWI) 프로토콜을 구현합니다. 온도 센서, OLED 디스플레이, RTC 모듈 등 I2C 호환 기기와 통신할 때 사용합니다. setup()에서 Wire.begin()을 호출하고, Wire.beginTransmission(), Wire.write(), Wire.endTransmission()으로 데이터를 전송합니다.
Servo 라이브러리로 서보 모터를 어떻게 제어하나요?
Servo 라이브러리를 포함하고 Servo 객체를 생성한 뒤, myServo.attach(핀)으로 PWM 핀에 연결하고 myServo.write(각도)로 위치(0~180도)를 설정합니다. 라이브러리가 PWM 타이밍을 자동으로 처리하므로 수동으로 펄스를 생성할 필요가 없습니다.
pulseIn은 무엇을 측정하며 초음파 거리 측정에 어떻게 사용하나요?
pulseIn(핀, HIGH)은 핀의 HIGH 펄스 지속 시간을 마이크로초 단위로 반환합니다. HC-SR04 초음파 센서에서는 트리거 후 ECHO 핀의 펄스 폭을 측정합니다. 거리(cm) = duration * 0.034 / 2로 계산하며, 0.034는 음속(cm/us), 2로 나누는 것은 왕복 거리를 보정하기 위함입니다.