안녕하세요.
지난 포스팅에서는 아두이노와 Comport Master를 활용해서 패킷을 수신하는 작업을 진행하여 보았습니다.
이번 포스팅에선 아두이노에서 Header와 Tailer를 갖춘 6바이트 패킷을 송신하는 작업을 진행하여 보겠습니다.
0. ComportMaster 설치 및 다운 & ComportMaster란?
1. 패킷에 대한 이론적인 내용은 아래 참조해주세요
https://semicircuit.tistory.com/entry/%ED%8C%A8%ED%82%B7-%ED%86%B5%EC%8B%A0-%ED%8C%A8%ED%82%B7%ED%86%B5%EC%8B%A0-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%EC%84%9C%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EC%86%A1
2. 아두이노에서 패킷 수하는 내용은 아래 참조해주세요
※1. 패킷 구조 설명
우리가 사용할 패킷은 가장 단순한 구조의 총 6바이트로 구성되어 있습니다. 각 바이트의 역할은 다음과 같습니다.
(이전 포스팅의 수신 패킷 구조와 동일합니다.)
- 헤더 (Header, 1바이트): 패킷의 시작을 나타내는 값입니다. 여기서는 0xF2로 정의되었습니다.
- 데이터 (Data, 4바이트): 실제 전송할 데이터입니다.
- 체크섬 (Checksum, 1바이트): 패킷의 끝을 나타내며, 수신된 데이터가 올바른지 확인하는 값입니다. 여기서는 0xF3으로 정의됩니다.
※2-1. 소스코드 및 동작 [Hex 수신 -> ASCII 출력]
위의 패킷구조와 같은 형태로 패킷을 전송하는 코드를 실행해 보겠습니다.
// 헤더와 체크섬 상수 정의
const byte HEADER = 0xF2;
const byte CHECKSUM = 0xF3;
byte packet[6]; // 6바이트 패킷을 저장할 배열
int buffer_check = 0;
int buffer_size = 0;
void setup() {
Serial.begin(9600); // 시리얼 통신 초기화
}
void loop() {
buffer_check = 0;
buffer_check = Serial.available();
if ( buffer_check != 0) {
{
for (int i = 0; i < 5; i++) {
packet[i] = packet[i + 1];
}
// 가장 새로운 데이터 추가
packet[5] = Serial.read();
// Serial.write(packet, 6); // 코드 디버깅 과정에서 버퍼에 들어가는 장면을 보고자 할때만 주석 풀기
}
buffer_size = buffer_size + 1;
}
if ( packet[0] == HEADER && packet[5] == CHECKSUM ) {
Serial.write(packet, 6);
for (int k = 0; k < 6; k++) { //패킷 초기화
packet[k] = 0x00;
}
buffer_size = 0;
}
}
▶1. 패킷 생성
- 헤더: 0xF2를 패킷의 첫 번째 바이트로 설정합니다.
- 데이터: data 배열의 값을 두 번째부터 다섯 번째 바이트에 복사합니다. => {0x11, 0x22, 0x33, 0x44}
- 체크섬: 0xF3를 마지막 바이트로 설정합니다.
※3-1. Wiring (배선 연결) & ComportMaster Setting[Hex 수신 -> ASCII 출력]
단순하게 아두이노와 PC와 케이블로 연결합니다. (USB to TTL 필요 없습니다.)
ComportMaster의 세팅을 다음과 같이 해주세요. (Send안의 데이터는 예시입니다.)
=> 처음 프로그램 실행 시 중간 오른쪽 Clear옆의 배터는 Hex가 아닌 ASCII일 것입니다. 반드시 클릭해서 Hex로 바꿔주세요.
**Deviced의 COM번호는 장치관리자 또는 아두이노 IDE -> Tool(툴) ->포트에서 확인하여 각자 PC에 적합한 포트 찾아주세요(아래 동작 동영상 참조)
※4-1. 동작 [Hex 수신 -> ASCII 출력]
Comport Master와 아두이노를 연결하여 위의 코드를 실행해 보겠습니다.
전공하려고 했던 데이터 가 잘 전송되고 있음을 확인할 수 있습니다.
※2-2. 소스코드 및 동작 [Hex 수신 -> ASCII 출력]
위의 패킷구조와 같은 형태로 패킷을 전송하는 코드를 실행해 보겠습니다.
▶1. 패킷 생성
- 헤더: 0xF2를 패킷의 첫 번째 바이트로 설정합니다.
- 데이터: data 배열의 값을 두 번째부터 다섯 번째 바이트에 복사합니다. => {0x11, 0x22, 0x33, 0x44}
- 체크섬: 0xF3를 마지막 바이트로 설정합니다.
// 헤더와 체크섬 상수 정의
const byte HEADER = 0xF2;
const byte CHECKSUM = 0xF3;
void setup() {
Serial.begin(9600); // 시리얼 통신 초기화
}
void loop() {
// 데이터 준비
byte data[4] = {0x11, 0x22, 0x33, 0x44}; // 송신할 데이터(4바이트)
// 패킷 생성
byte packet[6];
packet[0] = HEADER; // 헤더
for (int i = 0; i < 4; i++) {
packet[i + 1] = data[i]; // 데이터 복사
}
packet[5] = CHECKSUM; // 체크섬
// 패킷 송신
Serial.write(packet, 6); // 6바이트 패킷 송신
delay(1000); // 1초 대기 후 반복
}
※3-2. Wiring (배선 연결) & ComportMaster Setting[Hex 수신 -> ASCII 출력]
단순하게 아두이노와 PC와 케이블로 연결합니다. (USB to TTL 필요 없습니다.)
ComportMaster의 세팅을 다음과 같이 해주세요. (Send안의 데이터는 예시입니다.)
=> 처음 프로그램 실행 시 중간 오른쪽 Clear옆의 배터는 ASCII입니다. 반드시 클릭해서 ASCII 로 바꿔주세요.
**Deviced의 COM번호는 장치관리자 또는 아두이노 IDE -> Tool(툴) ->포트에서 확인하여 각자 PC에 적합한 포트 찾아주세요(아래 동작 동영상 참조)
※4-2. 동작 [Hex 수신 -> ASCII 출력]
Comport Master와 아두이노를 연결하여 위의 코드를 실행해 보겠습니다.
전공하려고 했던 데이터 {0x11, 0x22, 0x33, 0x44}가 잘 전송되고 있음을 확인할 수 있습니다.
이상으로 아두이노에서 LED를 다루는 방법에 대한 설명을 마치겠습니다.
다름 포스트에서 여러 개의 LED를 다루는 방법에 대해 다루겠습니다.
감사합니다.
'Embedded System > Arduino Board' 카테고리의 다른 글
[Arduino] Packet 통신: Comportmaster를 활용한 Packet 수신(17) (0) | 2024.12.05 |
---|---|
[Arduino] Arduino IDE 단축키 총정리 (0) | 2024.12.02 |
[Arduino] MCP4725 DAC 사용법: I2C 통신으로 아날로그 출력 제어하기(16) (0) | 2024.10.06 |
[Arduino] 아두이노 가변저항[Potentiometer] (볼륨 저항) 사용하기 (14) (0) | 2024.07.08 |
[Arduino] 아두이노 초음파 거리센서 ( HC-SR04 ) 사용하기 (13) (0) | 2024.06.10 |