startchar : char - always ":"
deviceID : byte - 1,2,4,8 for motors 1,2,3,4 (each motor is on own bit, because you can send command to more motors)
modbuscmd: byte - always 6, this is modbus command for write
commnad: byte
paramID: byte
data: word;
checksum: byte
checksum is using 2's complement (code
// Calculate the 8-bit checksum using 2's complement
uint8_t calcChecksum(uint8_t *data, int len) {
int sum = 0;
// Sum all the bytes in the data
for (int i = 0; i < len; i++) {
sum += data[i];
}
// Take the 2's complement of the sum
return (uint8_t)(~sum + 1);
}
startchar : char - always ":" deviceID : byte - 1,2,4,8 for motors 1,2,3,4 (each motor is on own bit, because you can send command to more motors) modbuscmd: byte - always 6, this is modbus command for write commnad: byte paramID: byte data: word; checksum: byte
checksum is using 2's complement (code
)
example of commands:
//calibration DEVICEID: 63 CMD: 0 PARAM: 1 DATA: 2
//ping DEVICEID: 150 CMD: 0 PARAM: 2 DATA: 7 DEVICEID: 201 CMD: 128 PARAM: 0 DATA: 0
//rec ON DEVICEID: 201 CMD: 0 PARAM: 0 DATA: 1
//rec OFF DEVICEID: 201 CMD: 0 PARAM: 0 DATA: 0
//focus DEVICEID: 1 CMD: 5 PARAM: 0 DATA: 0-9999