코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2017-11-09 11:40:49
[이전 학습가이드] 피에조 부저로 멜로디 만들어보기
Serial (시리얼) 통신은 말그대로 Serial (직렬) 통신으로 여러 데이터 통신 방법중 하나입니다. 1:1통신이 기본이며 한번에 한 비트씩 통신하는 방법입니다. 그럼 당연히 반대말인 병렬 통신은 여러 비트를 동시에 보내는 통신 방법이 됩니다.
스케치 (오렌지보드를 동작하게하는 프로그래밍 언어)를 하다보면, 아두이노 IDE에서 시리얼 모니터라는 창을 띄어, 출력 값을 확인하거나 값을 입력하는 등을 많이 하곤 하는데 이때 아두이노 IDE와 오렌지보드 간에는 Serial 통신을 하게 됩니다.
시리얼 통신은 수년전부터 USB에 밀려 여러 컴퓨터나 노트북에서 사라지는 추세이지만 RS-232는 그래도 아직까지 널리 사용되고 있는 시리얼 인터페이스 표준입니다.
시리얼 통신을 다른말로 RS-232통신이라 하며 TXD, RXD, GND 이렇게 3개의 선이 통신을 하기 위해 사용됩니다.
오렌지보드에는 시리얼 통신을 하기 위한 Serial클래스가 존재하며 하나의 Serial객체가 존재합니다. 이 클래스를 사용하여 시리얼 통신이 가능하고 연결은 USB나 TX, RX선의 연결을 통해 이루어집니다. 오렌지보드의 경우에는 TX, RX선은 각각 디지털 1번, 0번핀에 해당하며 시리얼 통신을 하는경우에는 이 디지털 0번 1번핀은 입출력핀으로 사용이 불가능합니다.
시리얼 통신(RS-232)이 물리적 계층에서의 통신 규약이라면 그 아래 기능에 따라
UART(Universal asynchronous receiver transmitter)와
USART(Universal synchronous asynchronous receiver transmitter)
로 나누어 지는데 UART는 비동기방식 통신이고 USART는 동기+비동기방식 통신이라고 보면 됩니다.
동기 비동기의 차이는 데이터를 송수신할때 데이터를 기준 동기클럭에 맞추어서 보낼것인지 아니면 클럭에 상관없이 서로간 정한 속도로 보낼 것인지에 따라 나뉘어지는데,
대부분 통신은 비동기 통신이며 오렌지보드에서 사용하는 시리얼 통신 또한 비동기통신입니다.
비동기 통신이기에 오렌지보드에서는 시리얼 통신을 할 때 통신속도를 설정해 주어야 하며 이 통신속도는 보율(boud rate)이라 합니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | |
2 | LED | 1 | LED(RED) |
3 | 330Ω 저항 | 1 | |
4 | 브레드 보드 | 1 | |
5 | 점퍼 케이블 | 3 |
부품명 | 오렌지 보드 | LED | 330Ω 저항 | 브레드 보드 | 점퍼 케이블 |
파트 |
1. 오렌지보드의 5V핀을 브레드보드의 +버스에 연결합니다.
2. 오렌지보드의 GND핀을 브레드보드의 -버스에 연결합니다.
3. LED를 아래 그림과 같이 긴 다리가 아래쪽으로 향하게하여 꽂습니다.
4. LED의 긴 다리에 330Ω 저항을 연결합니다.
5. LED의 긴 다리와 연결된 저항의 반대 쪽을 오렌지보드 3번핀에 연결합니다.
6. LED의 짧은 다리를 브레드보드 -버스에 연결합니다.
// 시리얼 통신을 통해 받아올 데이터를 저장할 변수를 선언해줍니다.
char data;
void setup() {
// 시리얼 통신을 사용하기 위해 baudrate를 설정해 줍니다.
Serial.begin(9600);
// LED 핀을 OUTPUT으로 설정합니다.
pinMode(3, OUTPUT);
}
void loop() {
// 만약 시리얼 통신을 통해 데이터가 전달이 되면,
if (Serial.available()) {
// 시리얼 통신을 통해 데이터를 받습니다.
data = Serial.read();
// 전달받은 데이터가 문자 1이면
if (data == '1') {
// LED를 켜줍니다.
Serial.println("LED ON");
digitalWrite(3, HIGH);
}
// 전달받은 데이터가 문자 2이면
else if (data == '2') {
// LED를 꺼줍니다.
Serial.println("LED OFF");
digitalWrite(3, LOW);
}
delay(100);
}
}
// 시리얼 통신을 통해 받아올 데이터를 저장할 변수를 선언해줍니다.
char data;
void setup() {
// 시리얼 통신을 사용하기 위해 baudrate를 설정해 줍니다.
Serial.begin(9600);
}
void loop() {
// 만약 시리얼 통신을 통해 데이터가 전달이 되면,
if (Serial.available()) {
// 시리얼 통신을 통해 데이터를 받습니다.
data = Serial.read();
// 전달받은 데이터가 문자 1이면
if (data == '1') {
// LED를 빨간색으로 켜줍니다.
Serial.println("RED ON");
analogWrite(9, 255);
analogWrite(10, 0);
analogWrite(11, 0);
}
// 전달받은 데이터가 문자 2이면
else if (data == '2') {
// LED를 노란색으로 켜줍니다.
Serial.println("YELLOW ON");
analogWrite(9, 255);
analogWrite(10, 255);
analogWrite(11, 0);
}
// 전달받은 데이터가 문자 3이면
else if (data == '3') {
// LED를 노란색으로 켜줍니다.
Serial.println("BLUE ON");
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(11, 255);
}
else{
// 그 이외의 문자라면.
Serial.println("LED OFF");
analogWrite(9, 0);
analogWrite(10, 0);
analogWrite(11, 0);
}
}
}
[다음 학습가이드] 조도센서(모듈)로 어두워지면 켜지는 LED 만들기
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!