串口数据写入有关问题,控制车的代码(有点有关问题,求大神帮忙)

串口数据写入问题,控制车的代码(有点问题,求大神帮忙)#include iostream.h#include stdio.h#include

串口数据写入问题,控制车的代码(有点问题,求大神帮忙)

#include <iostream.h>
#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;
}

strlen 串口 printf 行业数据
[解决办法]
很多编译错误。。帮你改了一下。。


#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软件辅助调试串口通信程序。