串口数据写入问题,控制车的代码(有点问题,求大神帮忙)
#include <iostream.h>strlen 串口 printf 行业数据
#include <stdio.h>
#include <string.h>
#include <windows.h>
class CSeries
{
private:
HANDLE com;
char orderdate[4];
char comPort[4];
public:
CSeries();
virtual ~CSeries();
bool menu(); //主菜单
bool ctrlwalk(); //直行菜单
bool ctrlsheel(); //转弯菜单
bool search(); //查询状态
bool quit(); //退出程序
bool openprot(); //打开串口
bool forward(); //前进
bool back(); //后退
bool accelerate();//加速
bool deaccelerate();//减速
bool stop(); //停止
bool left(); //左转弯
bool right(); //右转弯
};
CSeries::CSeries()
{
}
CSeries::~CSeries()
{
}
bool CSeries::menu()
{
int x;
while(1)
{ system("cls");
printf("\t\t-----------------------------------------\n");
printf("\t\t| \t 欢迎使用本程序 \t|\n");
printf("\t\t|---------------------------------------|\n");
printf("\t\t| \t 1->打开通信端口 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 2->控制机器人直行 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 3->控制机器人转弯 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 4->查询机器人状态 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 0->退出程序 \t|\n");
printf("\t\t-----------------------------------------\n");
printf("请选择相应的操作......");
fflush(stdin);
scanf("%d",&x);
switch(x)
{
case 1:
openprot();
break;
case 2:
ctrlwalk();
break;
case 3:
ctrlsheel();
break;
case 4:
search();
break;
case 0:
quit();
break;
default:
break;
}
return true;
}
bool CSeries::openprot()
{
DCB ComDCB;
cout<<"输入串口编号:"<<endl;
cin>>comPort;
com=CreateFile(comPort,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
ONESTOPBIT,
NULL);
if (com == INVALID_HANDLE_VALUE) //不合法的句柄
{
AfxMessageBox("打开COM失败!");
return false;
}
if(!GetCommState(com,&ComDCB))//取得当前串口状态
{
return false;
}
ComDCB.BaudRate=9600;//更改为9600bps, ?改后的波特率
if(!SetCommState(com,&ComDCB))//将更改后的参数写入串?
{
return false;
}
cout<<comPort<<"成功打开"<<endl;
return true;
}
bool CSeries::ctrlwalk()
{
int x;
while(1)
{ system("cls");
printf("\t\t-----------------------------------------\n");
printf("\t\t| \t 欢迎使用直行功能 \t|\n");
printf("\t\t|---------------------------------------|\n");
printf("\t\t| \t 1->前进 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 2->后退 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 3->加速 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 4->减速 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 4->停止 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 0->回主菜单 \t|\n");
printf("\t\t-----------------------------------------\n");
printf("请选择相应的操作......");
fflush(stdin);
scanf("%d",&x);
switch(x)
{
case 1:
forward();
break;
case 2:
back();
break;
case 3:
accelerate();
break;
case 4:
deaccelerate();
break;
case 5:
stop();
break;
case 0:
menu();
break;
default:
break;
}
}
bool CSeries::ctrlsheel()
{
int x;
while(1)
{ system("cls");
printf("\t\t-----------------------------------------\n");
printf("\t\t| \t 欢迎使用转弯功能 \t|\n");
printf("\t\t|---------------------------------------|\n");
printf("\t\t| \t 1->左转弯 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 2->右转弯 \t|\n");
printf("\t\t| \t \t|\n");
printf("\t\t| \t 0->回主菜单 \t|\n");
printf("\t\t-----------------------------------------\n");
printf("请选择相应的操作......");
fflush(stdin);
scanf("%d",&x);
switch(x)
{
case 1:
left();
break;
case 2:
right();
break;
case 0:
menu();
break;
default:
break;
}
}
bool CSeries::search()
{
}
bool CSeries::quit()
{
}
bool CSeries::forward();
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入前进指令(f+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::back();
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入后退指令(b+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::accelerate()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入加速指令(a+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::deaccelerate()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入减速指令(d+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::stop()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入停止指令(s+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::left()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入左转弯指令(l+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::right()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入右转弯指令(r+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
void main()
{
CSeries s;
s.menu;
}
[解决办法]
很多编译错误。。帮你改了一下。。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <windows.h>
using std::cout;
using std::cin;
using std::endl;
class CSeries
{
private:
HANDLE com;
char orderdate[4];
char comPort[4];
public:
CSeries();
virtual ~CSeries();
bool menu(); //主菜单
bool ctrlwalk(); //直行菜单
bool ctrlsheel(); //转弯菜单
bool search(); //查询状态
bool quit(); //退出程序
bool openprot(); //打开串口
bool forward(); //前进
bool back(); //后退
bool accelerate();//加速
bool deaccelerate();//减速
bool stop(); //停止
bool left(); //左转弯
bool right(); //右转弯
};
CSeries::CSeries()
{
}
CSeries::~CSeries()
{
}
bool CSeries::menu()
{
int x;
while(1)
{
system("cls");
printf("\t\t-----------------------------------------\n");
printf("\t\t
[解决办法]
\t 欢迎使用本程序 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
---------------------------------------
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 1->打开通信端口 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 2->控制机器人直行 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 3->控制机器人转弯 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 4->查询机器人状态 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 0->退出程序 \t
[解决办法]
\n");
printf("\t\t-----------------------------------------\n");
printf("请选择相应的操作......");
fflush(stdin);
scanf("%d",&x);
switch(x)
{
case 1:
openprot();
break;
case 2:
ctrlwalk();
break;
case 3:
ctrlsheel();
break;
case 4:
search();
break;
case 0:
quit();
break;
default:
break;
}
return true;
}//这里缺了个}
}
bool CSeries::openprot()
{
DCB ComDCB;
cout<<"输入串口编号:"<<endl;
cin>>comPort;
com=CreateFileA(comPort,
GENERIC_READ
[解决办法]
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
ONESTOPBIT,
NULL);
if (com == INVALID_HANDLE_VALUE) //不合法的句柄
{
//AfxMessageBox("打开COM失败!");
return false;
}
if(!GetCommState(com,&ComDCB))//取得当前串口状态
{
return false;
}
ComDCB.BaudRate=9600;//更改为9600bps, ?改后的波特率
if(!SetCommState(com,&ComDCB))//将更改后的参数写入串?
{
return false;
}
cout<<comPort<<"成功打开"<<endl;
return true;
}
bool CSeries::ctrlwalk()
{
int x;
while(1)
{
system("cls");
printf("\t\t-----------------------------------------\n");
printf("\t\t
[解决办法]
\t 欢迎使用直行功能 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
---------------------------------------
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 1->前进 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
------解决方案--------------------
\n");
printf("\t\t
[解决办法]
\t 2->后退 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 3->加速 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 4->减速 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 4->停止 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 0->回主菜单 \t
[解决办法]
\n");
printf("\t\t-----------------------------------------\n");
printf("请选择相应的操作......");
fflush(stdin);
scanf("%d",&x);
switch(x)
{
case 1:
forward();
break;
case 2:
back();
break;
case 3:
accelerate();
break;
case 4:
deaccelerate();
break;
case 5:
stop();
break;
case 0:
menu();
break;
default:
break;
}
}//这里缺了个}
}
bool CSeries::ctrlsheel()
{
int x;
while(1)
{ system("cls");
printf("\t\t-----------------------------------------\n");
printf("\t\t
[解决办法]
\t 欢迎使用转弯功能 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
---------------------------------------
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 1->左转弯 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 2->右转弯 \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t \t
[解决办法]
\n");
printf("\t\t
[解决办法]
\t 0->回主菜单 \t
[解决办法]
\n");
printf("\t\t-----------------------------------------\n");
printf("请选择相应的操作......");
fflush(stdin);
scanf("%d",&x);
switch(x)
{
case 1:
left();
break;
case 2:
right();
break;
case 0:
menu();
break;
default:
break;
}
}//这里缺了个}
}
bool CSeries::search()
{
return true;
}
bool CSeries::quit()
{
return true;
}
bool CSeries::forward()//多了个,
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入前进指令(f+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::back()//多了个,
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入后退指令(b+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::accelerate()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入加速指令(a+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::deaccelerate()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入减速指令(d+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::stop()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入停止指令(s+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::left()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入左转弯指令(l+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
bool CSeries::right()
{
memset(orderdate,0,strlen(orderdate));
cout<<"请输入右转弯指令(r+id):"<<endl;
cin>>orderdate;
orderdate[1]-=48;
DWORD dwWritten;
if(!WriteFile( com,
orderdate,
strlen(orderdate),
&dwWritten,
NULL)
)
{
cout<<"write com error"<<endl;
return false;
}
if(strlen(orderdate)==dwWritten)
{
cout<<"write com success"<<endl;
}
return true;
}
void main()
{
CSeries s;
s.menu();//少了()。。
}
[解决办法]
推荐使用portmon软件辅助调试串口通信程序。
