C/Serial Monitor
[C] Serial Monitor Step 4 - 데이터 쓰기
미친해커
2021. 12. 27. 02:58
반응형
데이터 쓰기까지 끝난다면 이제 확실하게 간단한 모듈을 만들 준비는 끝난다. 테스트를 위해 아두이노의 코드를 다음과 같이 변경했다.
void setup()
{
Serial.begin(115200);
}
void loop()
{
if (Serial.available())
{
char name[16] = { 0, };
Serial.readBytesUntil(0x00, name, 16);
char buffer[32] = { 0, };
sprintf(buffer, "Hello %s!", name);
Serial.println(buffer);
}
}
시리얼 포트로부터 아두이노가 메시지를 받고 그 앞에 Hello를 붙여서 PC로 전송해주는 코드이다. 이렇게 PC와 아두이노가 정상적으로 통신하는지를 확인할 수 있게된다. 이제 Windows에서 데이터를 전송하고 받는 코드를 작성해보자
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
HANDLE hComm = CreateFileA("\\\\.\\COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hComm == INVALID_HANDLE_VALUE)
{
printf("CreateFileA Failed\n");
printf("GetLastError : %d\n", GetLastError());
return -1;
}
DCB state = { 0, };
GetCommState(hComm, &state);
state.BaudRate = 115200;
SetCommState(hComm, &state);
while (TRUE)
{
char buffer[32] = { 0, };
printf("PC : ");
scanf("%s", buffer);
if (WriteFile(hComm, buffer, strlen(buffer), NULL, NULL) == FALSE)
continue;
DWORD NumberOfBytesRead;
while (TRUE)
{
ReadFile(hComm, buffer, 32, &NumberOfBytesRead, NULL);
if (NumberOfBytesRead != 0)
{
printf("%s", buffer);
break;
}
}
}
CloseHandle(hComm);
}
위 코드는 PC에서 입력을 받아 아두이노로 보내고 아두이노에서 데이터를 출력해주고 다시 입력을 받는 과정을 반복한다. 위 코드들을 이용해 서로 통신하면 다음과 같은 장면을 볼수 있다.
위 이미지 처럼 아두이노와 PC가 시리얼 포트를 이용해 통신하는 장면을 볼수 있다. 이렇게 시리얼 포트를 이용해 데이터 쓰기까지 끝 마쳤다. 여기까지 배운 함수들과 방법을 이용해 간단한 모듈을 만들어 나만의 시리얼 모니터를 만들어봐야겠다.
반응형