通过motorRaw(),您可以以一种原始协议的方式通过串口对两个直流电机进行控制。
其格式为: 0xF | 0xFF | 0xFF
对应数据: 控制|速度A |速度B
Byte 1(High):最高位,控制位。4个bit分别控制6线制电机驱动板的4个使能引脚IN1~IN4,或者其中2个bit控制4线制驱动的2个使能引脚INA和INB
Byte 2-3:SpeedA速度,范围从0x00到0xFF
Byte 4-5(Low):SpeedB速度,范围从0x00到0xFF
另外,由于串口通信发送的是ASC码,而本函数接收的是十六进制整数,所以需要对Arduino接收的串口数据进行转换。
例如,如果你要4线制驱动板的机器人向前运动,需要发送 “262143”, 而不是 “0x3FFFF”
motorRaw(data);
以一种原始协议的方式对两个直流电机进行控制。
data:16进制无符号长整数数据
串口发送的指令转换如下:
goForward
4P: 0x3FFFF = 262143
6P: 0x9FFFF = 655359
goBackward
4P: 0x0FFFF = 65535
6P: 0x6FFFF = 458751
goLeft
4P: 0x2FFFF = 196607
6P: 0xAFFFF = 720895
goRight
4P: 0x1FFFF = 131071
6P: 0x5FFFF = 393215
如果您的电机驱动板是四或六线制,但是控制时序与本库不同,可以使用此函数进行控制。
例如:某六线制电机驱动板向前的使能位序列是0110,那么全速前进的指令就是 0x6FFFF。所以串口发送的数据应为458751
无
// Hardware support list // 任何4线或6线制的电机驱动板 #include "BOXZ.h" int pin_inA = 4; int pin_inB = 7; int pin_pwmA = 5; int pin_pwmB = 6; unsigned long key; String comdata = ""; void setup() { Serial.begin(9600); boxz.initMotor(pin_inA,pin_inB,pin_pwmA,pin_pwmB); Serial.println("Hello! BOXZ!"); } void loop() { while (Serial.available() > 0) { comdata += char(Serial.read()); delay(2); } if (comdata.length() > 0) { Serial.println(comdata); //because the serial data is ASC format, we should convert to long int. //If you want to goForward, you should send "262143", it means "0x3FFFF". //but if you sent "0x3FFFF" or "3FFFF", it's not work. key = comdata.toInt(); Serial.println(key); comdata = ""; boxz.motorRaw(key); } }