Visual Studio VC++ 2010 クラス ライブラリを使用して、2 つのタイマーを使用します。1 つはセンサーの読み取り用で、もう 1 つはロボットにコマンドを与えるためのものです。
ボタン 1 をクリックすると最初のタイマーがオンになり、ボタン 3 を使用すると 2 番目のタイマーがオンになります。
しかし、ボタン 2 をクリックすると、ボタン 1 を押さなくても読み取りセンサーが機能し、その逆も同様です。
ここに私のプログラムがあります:
私のコードの何が問題なのですか?
const int cTimer1 = 1;
const int cTimer2 = 1;
void CENVSConfigDlg::OnBnClickedButton1()
{
SetTimer(cTimer1,1000,NULL);
}
void CENVSConfigDlg::OnBnClickedButton2()
{
KillTimer(cTimer1);
}
void CENVSConfigDlg::OnBnClickedButton3()
{
SetTimer(cTimer2,10,NULL);
}
void CENVSConfigDlg::OnBnClickedButton4()
{
KillTimer(cTimer2);
}
void CENVSConfigDlg::OnTimer(UINT_PTR ID){
if(ID==cTimer1){
char buffer[30],tempStr[5];
int sensor[6];
DWORD nbytes;
MessageBeep(0);
//Read Sensors
if(!WriteFile( hnd_serial, "1", 1, &nbytes, NULL )){KillTimer(cTimer1);MessageBox(L"Write Com Port fail!");return;}
Sleep(30);
if(!ReadFile( hnd_serial, buffer, 30, &nbytes, NULL )){KillTimer(cTimer1);MessageBox(L"Read Com Port fail!");return;}
Sleep(300);
if(ID==cTimer2)
{
if(GetAsyncKeyState(0x53) != 0)
{
DWORD nbytes;
if(!WriteFile( hnd_serial, "s", 1, &nbytes, NULL )){MessageBox(L"Write Com Port fail!");return;}
Sleep(30);
tampil.SetWindowText( (LPCTSTR)"s" ); //backward
}
else if(GetAsyncKeyState(0x57) != 0)
{
DWORD nbytes;
if(!WriteFile( hnd_serial, "w", 1, &nbytes, NULL )){MessageBox(L"Write Com Port fail!");return;}
Sleep(30);
tampil.SetWindowText( (LPCTSTR)"w" );//forward
}
}
}
}