제일 먼저 아두이노는 C언어 기반이기 때문에 C언어와 큰 차이가 없다
또한 오픈 소스 플랫폼이여서 공식홈페이지에서 문법을 확인할 수 있다
<아두이노 공식 홈페이지>
https://www.arduino.cc/en/Guide
Getting Started with Arduino products
Open-source electronic prototyping platform enabling users to create interactive electronic objects.
www.arduino.cc
제일 먼저 아두이노를 실행시키면 다음과 같은 화면이 나온다
제일 기초
// 와 /* */ 는 주석을 표현할 때 사용한다 ('#' 아닙니다)
void setup()
적혀있는 것과 동일 하게 맨 처음 Setup하는 코드를 짜는 것이다
실행할 떄 한번 모든 환경설정들을 지정해주는 부분이라 요약 가능하다
void loop()
적혀 있는 것과 같이 setup 블록 실행 이후에
무한 반복을 하면서 아두이노 보드를 컨트롤 하는 부분이다
본격적으로 코드 사용을 위한 문법을 살펴보면
키워드를 정리해보자
<키워드>
- HIGH : 아두이노에서 5V를 의미하고 숫자 1 로 대체가 가능하다
- LOW : 0V(Ground)를 의미히며 숫자 0으로 대체가 가능하다
<아두이노 문법>
다른 Python이나 C언어에서는 볼 수 없었던 자주쓰는 아두이노 문법을 살펴보자
pinMode(pin, mode)
- setup 블록에서 사용
- pin : 몇번 pin을 사용할 것인지
- mode : INPUT / OUTPUT
pinMode(pin, mode)
- setup 블록에서 사용
- pin : 몇번 pin을 사용할 것인지
- mode : INPUT / OUTPUT
- 간혹 INPUT_PULLUP 를 쓸 떄도 있음 : 프로세서 내부에 있는 pull-up 저항을 사용하겠다
이경우 외부에 pull-up 저항을 사용해야한다
digitalWrite(pin, value), digitalRead(pin) / analogWrite(pin, value) , analogRead(pin)
- digital : 0 or 1 [불연속적] ex) LED를 킨다, 끈다
- analog : [연속적] ex) LED를 서서히 킨다, 끈다
단, analog 신호는 PWM 출력이 가능한 핀(D, 3, 5, 6, 9, 10, 11)에서 사용해야한다
※ PWM : Pulse Width Modulation - 펄스 폭 변조 (디지털 신호를 아날로그 신호처럼 흉내내는 것)
ex) digitalWrite(7,HIGH)
디지털 포트 7번 pin을 사용하고 전압을 5로 주겠다
ex) digitalRead(7)
디지털 포트 7번 pin의 값을 읽어 오겠다 (위의 다음에 나오면 1 (HIGH))
Serial.begin(speed) / Serial.begin(speed, config) : 아두이노가 얼만큼의 속도로 말한 것인지
- speed : long향의 bps (bits per second) - 데이터 전송 속도
Serial로 데이터를 송수신 하기 위해서는 장치 간의 데이터 전송 속도를(Baud rate)를 일치해야 한다
※ (Baud Rate) : 초당 얼마나 많은 심볼(Symbol, 의미 있는 데이터 묶음)을 전송할 수 있는가를 나타내는 말.
이를 위해 만들어진 것이 Serial.begin()이다
데이터 전송 단위는 bps를 사용 : 초(second)당 보낼 수 있는 비트(bits)의 수
문자 한개에 평균 10bit를 사용
ex) 9600 bps -> 초당 960의 문자를 보낸다
일반적으로 많이 사용하는 9600, 38400, 57600, 115200 [bps]
※추가 예시
만약 하나의 신호 요소가 2bit로 구성되어 있는 경우라면 Baud는 BPS의 반이 된다.
즉, 1 Baud 동안 2 Bit가 전송된다.
일반적으로 신호를 1 Bit로 여긴다면 BPS와 같은 단위가 된다.
- config : 데이터(data), 패리티(parity), 스톱(stop) 비트의 설정을 변경
기본값 : 8 data bits, no parity, 1 stop bit (8N1)
SERIAL_8N1 (기본값)
SERIAL_5N1, SERIAL_6N1, SERIAL_7N1, SERIAL_5N2, SERIAL_6N2, SERIAL_7N2, SERIAL_8N2, SERIAL_5E1, SERIAL_6E1, SERIAL_7E1, SERIAL_8E1, SERIAL_5E2, SERIAL_6E2, SERIAL_7E2, SERIAL_8E2, SERIAL_5O1, SERIAL_6O1, SERIAL_7O1, SERIAL_8O1, SERIAL_5O2, SERIAL_6O2, SERIAL_7O2, SERIAL_8O2
SERIAL_8N1
8 : 데이터의 길이를 설정한다. 단위는 비트수 5 ~ 8 비트로 설정
N : 패리티 비트 사용 안 함
E : E(Even) 짝수 패리티 비트 사용
O : O(Odd) 홀수 패리티 비트 사용
1 : 정지 비트 수를 설정한다. 단위는 비트수 1 또는 2 비트로 설정
Serial.print(val) / Serial.println(val) : val (문자열, 정수, 실수) 를 출력할 수 있게 해줌
- println은 val를 출력한 다음 다음 줄로 넘어간다
- print는 val를 출력하고 다음 줄로 넘어가지 않음
delay(ms)
- ms 동안 지연 하겠다
- ex) delay(1000) : 1초 동안 지연하겠다
예시코드 (LED에 불 켜기)
int button = 4; //버튼포트 4번
int ledPin = 8; //led포트 8번
int buttonState = 0; //버튼의 상태 초기화
int swState = LOW; //스위치의 초기상태 low
void setup() {
pinMode(ledPin, OUTPUT); //pinMode 사용
pinMode(button, INPUT_PULLUP);
Serial.begin(19200); //시리얼 통신 사용하기
}
void loop() {
buttonState = digitalRead(button); //버튼 상태 디지털에서 읽어서 변경
Serial.print("State Value == "); //상태 값 출력
Serial.println(buttonState); // 버튼 상태 값 출력
if (buttonState == LOW && swState == LOW) {
swState = LOW;
}
else if (buttonState == HIGH && swState == HIGH){
swState = LOW;
ledSate = !ledState; //reverse
}
if (ledState == HIGH){
digitalWrite(ledPin, HIGH);
}
else if (ledState == LOW){
digitalWrite(ledPin,LOW);
}
}
추가강의
https://www.youtube.com/watch?v=vxoE_Wsc61k&t=7s
https://www.youtube.com/watch?v=f6XnZizIxFg
'Robotics > ROS' 카테고리의 다른 글
[Robotics] ROS에 대하여 (0) | 2023.03.23 |
---|---|
[Robotics] 아두이노 우분투 개발환경 설정 (0) | 2023.03.23 |
[Robotics] 라즈베리파이 원격 연결 (1) | 2023.03.13 |
[Robotics] ROS에 관하여 (0) | 2023.03.07 |
[Robotics] OpenCR 보드 와 Dynamixel (0) | 2023.03.07 |