블루투스 또는 Rs232 시리얼통신이 하이퍼터미널을 통해 된다는 가정하에 프로그램을 만들어 보겠습니다.
MFC Joystick 프로젝트에 이어서 실제 서보모터를 움직일 수 있도록 해봅시다.
스피디 하게 진행을 하겠습니다.
myDlg.h의 클래스 내부에 public: 아래
LPCSTR lpszCommName;
DCB dcb;
COMMPROP cp;
HANDLE hComm;
COMSTAT cs;
DWORD dwErrorMask;
afx_msg void RS232_Comm(unsigned char);
를 추가해줍니다.
myDlg.cpp의 OnInitDialog()함수 내부에서 dcb구조체를 초기화 해줍니다.
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
리소스의 다이얼로그창에서 버튼 두개를 만든다음 ID를 통신시작, 통신종료로 만들어줍니다.
아이디가 생긴 버튼을 더블클릭하면 두개의 함수가 생기지요,
통신 시작 함수에는
hComm = CreateFileA((LPCSTR)"COM4", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
cp.wPacketLength = sizeof(COMMPROP);
GetCommProperties(hComm, &cp);
GetCommState(hComm, &dcb);
SetCommState(hComm, &dcb);
이부분이 들어가야 하구,, 빨간 부분은 컴포트 넘버를 뜻하는것으로 입맛에 맞게 바꿔주시면 됩니다.
통신 종료 함수에는
CloseHandle(hComm);
이것만 들어가면 되지요.
이후 헤더에서 추가를 해뒀던 Rs232_Comm함수내부에는
unsigned char OutBuff[1];
unsigned long nByteToWrite;
unsigned long nByteWritten;
OutBuff[0] = data;
nByteToWrite = 1;
WriteFile(hComm, OutBuff, nByteToWrite, &nByteWritten, NULL);
PurgeComm(hComm, PURGE_RXCLEAR);
이렇게 들어갑니다.
이제 통신을 시작해 봐야지요,
Rs232_Comm( 값 );
값을 써주시면 통신이 시작되는데, 1Byte 크기로 하나가 전송된답니다.
일전에 만들었던 OnTimer 함수에서 m_Xpos라는 변수가 현재 값을 DWORD 형으로 받고 있네요, 이 값을 1Byte 크기로 변환하기 위해 256으로 나누어 주어야 하고, m_Data에는 보내지는 값을 출력해야겠지요.
전역변수로 UCHAR 자료형의 CalcXpos를 선언하고
OnTimer 함수 m_Xpos = gapp.wJoyXpos; 아랫줄에
m_Xpos = gapp.wJoyXPos;
// -32767 <= (signed)real_x <= +32768
// 0 < (Unsigned)real_x < +65536 - 16bit
// 0 < (UCHAR)calc_x < +256 - 8bit
CalcXpos = (INT)m_Xpos >> 8;
RS232_Comm(CalcXpos);
이렇게 써줍니당.
256을 나누어 주는것과 같은문장이 오른쪽 8비트 쉬프트구요..
RS232_Comm을 통해 1Byte를 전송해 주네요 @_@ 오호호호..
m_Data에 값을 써주기 위해선,
char BuffStr[10];
sprintf(BuffStr, "%d", m_Xpos);
m_Data = BuffStr;
이렇게 해주면 된답니당.
참 쉽졀 ??
'OpenSTUDY > openProjects' 카테고리의 다른 글
MFC BlueTooth ver 1.3.0 (0) | 2011.10.18 |
---|---|
MFC BlueTooth ver 1.2.0 (0) | 2011.10.16 |
MFC Joystick ver 1.0.5 (0) | 2011.10.16 |
MFC Joystick ver 1.0.4 (0) | 2011.10.16 |
MFC Joystick ver 1.0.3 (0) | 2011.10.16 |