|
我要让arduino2560串口发一个八位的数据,第1、2、8位的数据都为定值。主函数里设置的(‘M‘,10000)是设置的命令模式和值。
第3位设置命令模式,将数值转化成第4、5、6、7位。
下载到板子上,Arduino IDE串口中可以接收到“U Eyeb” 等乱码的字符。
电机的驱动板可以收到Arduino发送过去的数据,但是不能执行先关命令。
这个程序可以正确的由串口输出吗?问题出在哪了?
short speed1;
unsigned char cmd[8] = {0x19,0x88,0x00,0x00,0x00,0x00,0x00,0x11};
void setup()
{
// set uart baudrate to 115200
Serial.begin(115200);
delay(500);
// neurons motor module use 'auto baudrate' method to initialize its uart
Serial.print(0x55);
// optional delay
delay(500);
Serial.setTimeout(10);
}
// neurons motor module command
// always has 8 bytes
// cmd[0] first, and always is 0x19
// cmd[1] is always 0x88
// cmd[2] is command code
// cmd[3..6] is command data, MSB fisrt send
// cmd[7] should be 0x11
// command code(cmd[2])
// 'M' ---- set motor 1 speed to command data(cmd[3..6])
// 'm' ---- set motor 2 speed to command data(cmd[3..6])
// 'P' ---- set motor 1 P gain to command data(cmd[3..6]), PID parameter
// 'p' ---- set motor 2 P gain to command data(cmd[3..6]), PID parameter
// 'I' ---- set motor 1 I gain to command data(cmd[3..6]), PID parameter
// 'i' ---- set motor 2 I gain to command data(cmd[3..6]), PID parameter
// 'N' ---- set motor 1 intergral limit to command data(cmd[3..6]), PID parameter
// 'n' ---- set motor 2 intergral limit to command data(cmd[3..6]), PID parameter
// 'D' ---- set motor 1 D gain to command data(cmd[3..6]), PID parameter
// 'd' ---- set motor 2 d gain to command data(cmd[3..6]), PID parameter
// 'A' ---- set motor 1 speed increase to command data(cmd[3..6]), in /second, MUST be positive value, trapezoid parameter
// 'a' ---- set motor 2 speed increase to command data(cmd[3..6]), in /second, MUST be positive value, trapezoid parameter
// 'B' ---- set motor 1 max speed to command data(cmd[3..6]), MUST be positive value, trapezoid parameter
// 'b' ---- set motor 2 max speed to command data(cmd[3..6]), MUST be positive value, trapezoid parameter
// 'C' ---- set motor 1 speed decrease to command data(cmd[3..6]), in /second, MUST be positive value, trapezoid parameter
// 'c' ---- set motor 2 speed decrease to command data(cmd[3..6]), in /second, MUST be positive value, trapezoid parameter
// 'E' ---- set motor 1 distance to command data(cmd[3..6])
// 'e' ---- set motor 2 distance to command data(cmd[3..6])
void SetCmd(unsigned char cmdSend, long motorSpeed)
{
// command
cmd[0]=0x19;
cmd[1]=0x88;
cmd[2] = cmdSend;
// data
// send MSB first
cmd[3] = (unsigned char)(motorSpeed >> 24);
cmd[4] = (unsigned char)(motorSpeed >> 16);
cmd[5] = (unsigned char)(motorSpeed >> 8);
cmd[6] = (unsigned char)(motorSpeed);
cmd[7]=0x11;
// send command
Serial.write(cmd,8);
return;
}
void loop()
{
// set
SetCmd('M',1000);
delay(2000);
SetCmd('M',-1000);
delay(2000);
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|