Skip to content

Instantly share code, notes, and snippets.

@IdrisCytron
Created January 25, 2017 07:43
Show Gist options
  • Save IdrisCytron/aca7566ae9990775662cb3fcb7dd044d to your computer and use it in GitHub Desktop.
Save IdrisCytron/aca7566ae9990775662cb3fcb7dd044d to your computer and use it in GitHub Desktop.
/*
* This example shows how to control MDDS60 in Serial Packetized with Arduino.
* Set MDDS60 input mode to 0b11100000
*
* Serial Packet:
* 1st byte: Header.
* 2nd byte: Channel & Address.
* 3rd byte: Speed & Direction.
* 4th byte: Checksum = 1st byte + 2nd byte + 3rd byte.
*
* For more information, please refer to MDDS60 User's Manual
* https://docs.google.com/document/d/15ICHc5CqQL8oXdU-n3ZL0_o8Vm4wQCnWOHHEfrEDDaI/view
*
* Reference Tutorial:
* - Let's Arduino Control Your SmartDriveDuo-60
*
* Related Products:
* - SmartDriveDuo-60: http://www.cytron.com.my/P-MDDS60
* - CT UNO: http://www.cytron.com.my/p-ct-uno
* - DC Brush Motors: http://www.cytron.com.my/c-84-dc-motor
* - LiPo Battery: http://www.cytron.com.my/c-87-power/c-97-lipo-rechargeable-battery-and-charger
*
* URL: http://www.cytron.com.my
*/
#include <SoftwareSerial.h>
SoftwareSerial MDDS60Serial(2, 3); // RX (not use), TX
void setup()
{
MDDS60Serial.begin(9600); // Initialize serial
delay(2000); // Delay for 2 seconds.
MDDS60Serial.write(85); // Dummy byte for auto baudrate.
delay(3000); // Delay for 3 seconds.
}
void loop()
{
// Controlling left motor, direction CW
MDDS60Serial.write(85); // 1st byte: Header.
MDDS60Serial.write((byte)0); // 2nd byte: Channel = left & Address = 0.
MDDS60Serial.write(63); // 3rd byte: Speed = half & Direction = CW.
MDDS60Serial.write(85 + 63); // 4th byte: Checksum = 1st byte + 2nd byte + 3rd byte.
delay(2000);
// Controlling left motor, direction CCW
MDDS60Serial.write(85); // 1st byte: Header.
MDDS60Serial.write((byte)0); // 2nd byte: Channel = left & Address = 0.
MDDS60Serial.write(192); // 3rd byte: Speed = half & Direction = CCW.
MDDS60Serial.write(85 + 192); // 4th byte: Checksum = 1st byte + 2nd byte + 3rd byte.
delay(2000);
// Stop left motor
MDDS60Serial.write(85); // 1st byte: Header.
MDDS60Serial.write((byte)0); // 2nd byte: Channel = left & Address = 0.
MDDS60Serial.write(127); // 3rd byte: Speed = 0.
MDDS60Serial.write(85 + 127); // 4th byte: Checksum = 1st byte + 2nd byte + 3rd byte.
delay(1000); // Delay for 1s.
// Controlling right motor, direction CW
MDDS60Serial.write(85); // 1st byte: Header.
MDDS60Serial.write(8); // 2nd byte: Channel = right & Address = 0.
MDDS60Serial.write(63); // 3rd byte: Speed = half & Direction = CW.
MDDS60Serial.write(85 + 8 + 63); // 4th byte: Checksum = 1st byte + 2nd byte + 3rd byte.
delay(2000);
// Controlling right motor, direction CCW
MDDS60Serial.write(85); // 1st byte: Header.
MDDS60Serial.write(8); // 2nd byte: Channel = right & Address = 0.
MDDS60Serial.write(192); // 3rd byte: Speed = half & Direction = CCW.
MDDS60Serial.write(85 + 8 + 192); // 4th byte: Checksum = 1st byte + 2nd byte + 3rd byte.
delay(2000);
// Stop right motor
MDDS60Serial.write(85); // 1st byte: Header.
MDDS60Serial.write(8); // 2nd byte: Channel = right & Address = 0.
MDDS60Serial.write(127); // 3rd byte: Speed = 0.
MDDS60Serial.write(85 + 8 + 127); // 4th byte: Checksum = 1st byte + 2nd byte + 3rd byte.
delay(1000); // Delay for 1s.
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment