#!if 문서명2 != null
, [[C(프로그래밍 언어)/문법]]#!if 문서명3 != null
, [[C++/문법]]#!if 문서명4 != null
, [[]]#!if 문서명5 != null
, [[]]#!if 문서명6 != null
, [[]]| 프로그래밍 언어 문법 | |
| {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all" | 프로그래밍 언어 문법 C(포인터 · 구조체 · size_t) · C++(이름공간 · 클래스 · 특성 · 상수 표현식 · 람다 표현식 · 템플릿/제약조건/메타 프로그래밍) · C# · Java · Python(함수 · 모듈) · Kotlin · MATLAB · SQL · PHP · JavaScript(표준 내장 객체, this) · Haskell(모나드) · 숨 |
| 마크업 언어 문법 HTML · CSS | |
| 개념과 용어 함수(인라인 함수 · 고차 함수 · 콜백 함수 · 람다식) · 리터럴 · 문자열 · 식별자(예약어) · 상속 · 예외 · 조건문 · 반복문 · 비트 연산 · 참조에 의한 호출 · eval · 네임스페이스 · 호이스팅 | |
| 기타 #! · == · === · deprecated · GOTO · NaN · null · undefined · S-표현식 · 배커스-나우르 표기법 · 콰인(프로그래밍) | }}}}}} |
| 프로그래밍 언어 목록 · 분류 · 문법 · 예제 |
1. 개요
Arduino 문법을 설명한 문서.2. 기본
Arduino 프로그래밍에는 C++ 언어가 사용되지만, I/O에<cstdio> 및 <iostream> 등 C/C++ 기본 입출력 라이브러리를 거의 사용하지 않고 <Arduino.h> 라이브러리에서 제공하는 각종 함수 및 객체 위주로 코드를 작성한다는 특징이 있다. 아두이노 IDE에서 프로그램 컴파일 및 업로드 시 해당 헤더 파일은 기본적으로 포함되므로, 코드 상단에 명시적으로 포함할 필요는 없다.이는 Arduino Uno R3 등 기본형 보드의 경우 메모리 용량이 작고 프로세서 성능도 높지 않은 8비트 시스템이어서 printf 같은 기본적인 함수조차 감당하기 어렵기 때문이다. (일반적으로 stdio의 경우 4KB 크기의 버퍼를 사용하는데, 아두이노 우노 R3의 RAM 용량은 단 2KB이다.)
3. 편집 지침
소스 코드로 예시를 들 때\#!syntax cpp (소스코드) |
예시(입력):
{{{#!syntax cpp
void setup() {
Serial.begin(9600);
Serial.println("Hello, World!");
}
void loop() {
}
}}}예시(출력):
#!syntax cpp
void setup() {
Serial.begin(9600);
Serial.println("Hello, World!");
}
void loop() {
}
4. 기본 문법
일반적인 C언어 및 C++ 코드와의 차이점 위주로 서술한다.4.1. 자료형
#!if (문단 == null) == (앵커 == null)
를#!if 문단 != null & 앵커 == null
의 [[C(프로그래밍 언어)/문법#s-|]]번 문단을#!if 문단 == null & 앵커 != null
의 [[C(프로그래밍 언어)/문법#|]] 부분을 참고하십시오.각 자료형의 크기는
sizeof 연산자를 사용하여 확인할 수 있다.| 정수 자료형 | |||
| 자료형 | C 표준 | AVR | ARM |
bool | 1 비트 | (1 비트) | (1 비트) |
byte | - | 1 바이트 | 1 바이트 |
char[1] | ≥1 바이트 | ≥1 바이트 | ≥1 바이트 |
short | ≥2 바이트 | 2 바이트 | 2 바이트 |
int | ≥2 바이트 | 2 바이트 | 4 바이트 |
long | ≥4 바이트 | 4 바이트 | 4 바이트 |
long long | ≥8 바이트 | 8 바이트 | 8 바이트 |
* (포인터) | - | 2 바이트 | 4 바이트 |
[1] 문자를 저장하는 용도로만 사용 권장, 정확히 1 바이트가 필요한 경우 byte 자료형 사용
| 부동소수점 자료형 | |||
| 자료형 | C 표준 | AVR | ARM |
float | - | 4 바이트 | 4 바이트 |
double[2] | - | 4 바이트 | 8 바이트 |
[2] 부동소수점 자료형의 경우 정수 자료형과 달리 C 표준에 각 자료형의 최소 크기가 규정되어 있지 않다.
이외에도 기본 헤더 파일인 <Arduino.h>를 통해 다음과 같은 class 자료형을 지원한다:String: C++의std::string과 유사하게 문자열 처리를 위한 method를 지원한다.
4.2. 함수
5. 스케치
스케치는 Arduino 시스템 상에서 프로그램에 대응하는 개념이다.Arduino 시스템은 일반적으로 C/C++ 프로그램이 실행되는 컴퓨터와는 달리 별도의 OS가 없는 마이크로컨트롤러 시스템이기 때문에,
main() 함수를 사용하지 않고 setup() 및 loop() 함수를 사용한다.스케치를 컴파일해서 실행이 시작되면 맨 처음
setup() 함수가 한 번 실행되며, 그 뒤로 loop() 함수가 무한히 반복하여 실행된다.#!syntax cpp
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
5.1. setup() 함수
스케치에서 맨 처음으로 실행되는 함수로, 스케치에서 사용할 각종 요소들을 초기화하는 역할을 한다.5.2. loop() 함수
setup() 함수 실행 이후 무한 반복으로 실행되는 함수로, 여러 번 반복하고 싶은 동작을 작성한다.6. 라이브러리
6.1. <Arduino.h> (기본 라이브러리)
아두이노 스케치 컴파일시 자동으로 포함되는 기본 라이브러리이다.6.1.1. 제공 함수
입/출력 관련 함수pinMode(): 디지털 핀의 입출력 모드를 설정하는 함수이다. 핀 번호와INPUT또는OUTPUT을 인자로 넣어 핀을 입력 또는 출력으로 설정할 수 있다.digitalRead():INPUT으로 설정된 핀의 번호를 인자로 받아 디지털 값을 반환하는 함수이다.digitalWrite():OUTPUT으로 설정된 핀의 번호 및LOW또는HIGH값을 인자로 받아 핀의 출력 전압을 설정하는 함수이다.analogRead(): 아날로그 입력 핀의 번호를 인자로 받아 아날로그 값을 반환하는 함수이다. 아날로그 값의 범위는 보드에 따라 다르므로 주의가 필요하다.analogWrite():OUTPUT으로 설정된 핀의 번호 및 duty cycle 값을 인자로 받아 지정된 핀에 PWM 출력을 하는 함수이다.tone():OUTPUT으로 설정된 핀의 번호 및 주파수 값을 인자로 받아 지정된 핀에 duty cycle = 50%인 PWM 출력을 하는 함수이다.noTone(): 지정한 핀의tone()출력을 멈춘다.pulseIn():INPUT으로 설정된 핀의 번호 및 펄스의LOW또는HIGH여부, (선택) timeout을 인자로 받아 해당 핀에 들어오는 펄스의 길이를 마이크로초 단위로 반환하는 함수이다.
시간 및 제어 관련 함수
delay(): 밀리초 단위 시간 값을 인자로 받아 그만큼 실행을 일시 중단하는 함수이다.delayMicroseconds(): 마이크로초 단위 시간 값을 인자로 받아 그만큼 실행을 일시 중단하는 함수이다.millis(): 밀리초 단위 시각 값을 반환하는 함수이다. 32비트 시간을 사용하므로 약 50일마다 overflow가 발생한다.micros(): 마이크로초 단위 시각 값을 반환하는 함수이다. 32비트 시간을 사용하므로 약 70분마다 overflow가 발생한다.attachInterrupt(): 특정한 event에 대해 인터럽트를 설정하는 함수이다.detachInterrupt: 특정한 event에 대해 인터럽트를 해제하는 함수이다.
수학 함수
random(): 랜덤한 숫자를 생성하는 함수이다.randomSeed():random()함수의 seed를 설정하는 함수이다.map(): 특정 값의 범위를 변환해 주는 함수이다.
기타 매크로 함수
min(),max(): 최댓값 또는 최솟값을 구하는 매크로이다.abs(): 절댓값을 구하는 매크로이다.constrain():min(),max()매크로의 기능을 합친 것으로, 범위 밖의 값을 범위 내 가장 가까운 값으로 설정한다.round(): 반올림 매크로이다.sq(): 제곱 매크로이다.
6.1.2. 제공 매크로
LOW,HIGH: 전압의 디지털 값INPUT,OUTPUT: 핀의 입출력 모드A0,A1, ...: 아날로그 핀을 지정하는 매크로이다.
-
INPUT_PULLUP: 보드의 내장 pull up 저항을 사용하는 옵션6.1.3. 제공 클래스
Print:Serial등Stream파생 클래스의 출력을 처리하기 위한 기본 클래스이다.- base = 0인 경우
write()와 동일하게 취급된다. - base = 1인 경우 무한루프를 방지하기 위해 base = 10으로 간주된다.
DEC,HEX,OCT,BIN: base 인자에 사용할 수 있는 매크로로, 각각 10, 16, 8, 2에 해당한다.- [math(\pm 4.29 \times 10^{9})] (4294967040) 바깥 범위의 큰 값은 overflow로 간주되어
"ovf"가 출력된다. Serial: 기본 (UART) 시리얼 통신 인스턴스로, 여러 개의 시리얼 통신 포트가 있는 보드의 경우Serial1와 같이 동일한 class의 인스턴스가 추가로 제공되기도 한다.
-
write(): 최종 출력을 위한 가상 메소드이다. print() 및 println() 메소드 사용시 호출된다.-
print(): 변수, 상수, 문자열 등 데이터 하나를 출력하는 메소드이다. 만약 여러 개의 변수를 출력하고 싶다면 print()를 여러 번 호출하여야 한다.-
print(int, base): 주어진 진법으로 정수 데이터를 출력한다. 실질적으로 2진법부터 36진법까지 지원한다.-
print(double, digits): 주어진 소수점 자릿수만큼 부동소수점 값을 출력한다.-
println(): print() 함수에 줄 바꿈 "\r\n"을 추가하여 출력하는 메소드이다.-
Serial.begin(): baud rate를 인자로 받아 시리얼 통신을 시작하는 method이다.-
Serial.end(): 시리얼 통신을 중단하는 method이다.-
Serial.available(): RX 버퍼에 남아있는 데이터의 양을 반환하는 method이다.-
Serial.peek(): 버퍼에 데이터가 있는 경우 버퍼에 남아있는 가장 오래된 데이터를, 없는 경우 -1을 반환하는 method이다. read()와 달리 버퍼 데이터를 소모하지 않는다.-
Serial.read(): 버퍼에서 가장 오래된 데이터를 1바이트 꺼내는 method이다. 데이터가 없는 경우 peek()와 마찬가지로 -1을 반환한다.