我想出了一些从游戏中读取角色统计数据的代码。这些值存储在数据类型的变量中int
。
int HPvalue, MPvalue, TPvalue;
现在我需要做的就是将这些值从COM
串行端口中取出,以便 Arduino 可以读取它们。
我在网上找到了一些串行示例,但似乎每当我发送我的值时都会发送超过一个字节。
我在 Arduino 上运行了一些代码,它从串行端口读取值并根据该值打开或关闭 LED。
当我使用示例串行代码发送一个值时,LED 会切换两次,而不是切换到一种或另一种状态。当我用腻子发送值时,Led 会正确响应。也就是说。大于 5 的值打开,小于 5 的值关闭。这就是让我认为计算机一次发送多个字节的原因。这是代码。
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <atlstr.h>
using namespace std;
bool WriteComPort(CString PortSpecifier, CString data);
int _tmain(int argc, _TCHAR* argv[])
{
DWORD HPaddress = 0x046B670C;
DWORD MPaddress = 0x043609B8;
DWORD TPaddress = 0x043609BC;
int HPvalue, MPvalue, TPvalue;
DWORD pid;
HWND hwnd;
hwnd = FindWindow(NULL,L"EvelynofHades");
if(!hwnd)
{
cout <<"Window not found!\n";
cin.get();
}
else
{
cout <<"Found Window!\n";
GetWindowThreadProcessId(hwnd,&pid);
cout << pid;
HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, pid);
if(!phandle)
{
cout <<"Could not get Handle!\n";
cin.get();
}
else
{
while(1)
{
ReadProcessMemory(phandle,(void*)HPaddress,&HPvalue,sizeof(HPvalue),0);
ReadProcessMemory(phandle,(void*)MPaddress,&MPvalue,sizeof(MPvalue),0);
ReadProcessMemory(phandle,(void*)TPaddress,&TPvalue,sizeof(TPvalue),0);
cout << HPvalue << " " << MPvalue << " " << TPvalue << " " << "\n";
CHAR on = 6;
WriteComPort("COM3", on);
Sleep(3000);
CHAR off = 5;
WriteComPort("COM3", off);
Sleep(3000);
}
return 0;
}
}
}
bool WriteComPort(CString PortSpecifier, CString data)
{
DCB dcb;
DWORD byteswritten;
HANDLE hPort = CreateFile(PortSpecifier,
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if (!GetCommState(hPort,&dcb))
return false;
dcb.BaudRate = CBR_9600; //9600 Baud
dcb.ByteSize = 8; //8 data bits
dcb.Parity = NOPARITY; //no parity
dcb.StopBits = ONESTOPBIT; //1 stop
if (!SetCommState(hPort,&dcb))
return false;
bool retVal = WriteFile(hPort,data,1,&byteswritten,NULL);
CloseHandle(hPort); //close the handle
return retVal;
}
我可能为我的应用程序错误地实现了串行。希望有人可以帮助我解决这个问题。