MoveTank()

Purpose

Easily implement a Tank style drive for a mobile robot.

When to use

If you have a Tank styled drive system configuration, where a signal controls right side motors another one controls controls left side motors.

Where to use

In the void loop() part of your .ino file, since it’s a one time calculation that needs to be re-executed at short intervals.

This function requires the use of the following functions at some point of your .ino file in order to work properly:

Returns

This function does not return a value once it has completed its tasks.

Main prototype and parameters

static void CrcLib::MoveTank(int8_t leftChannel, int8_t rightChannel, unsigned char frontLeftMotor, unsigned char backLeftMotor, unsigned char frontRightMotor, unsigned char backRightMotor)

The following parameters must be passed to the function for it to work properly:

  • leftChannel: The speed value used to control the left drive motor. Must be of the type int8_t (also called signed char), so ranging [-128, 127].

  • rightChannel: The speed value used to control the right drive motor. Must be of the type int8_t (also called signed char), so ranging [-128, 127].

  • frontLeftMotor: The name of the PWM pin to which is connected the front left motor. Must be of the type unsigned char.

  • backLeftMotor:The name of the PWM pin to which is connected the back left motor. Must be of the type unsigned char.

  • frontRightMotor: The name of the PWM pin to which is connected the front right motor. Must be of the type unsigned char.

  • backRightMotor:The name of the PWM pin to which is connected the back right motor. Must be of the type unsigned char.

Overloads

#1: Using only one motor per side

static void CrcLib::MoveTank(int8_t leftChannel, int8_t rightChannel, unsigned char leftMotor, unsigned char rightMotor)

The following parameters must be passed to the function for it to work properly:

  • leftChannel: The speed value used to control the left drive motor. Must be of the type int8_t (also called signed char), so ranging [-128, 127].

  • rightChannel: The speed value used to control the right drive motor. Must be of the type int8_t (also called signed char), so ranging [-128, 127].

  • leftMotor:The name of the PWM pin to which is connected the left motor. Must be of the type unsigned char.

  • rightMotor: The name of the PWM pin to which is connected the right motor. Must be of the type unsigned char.

#2: Directly using remote controller joystick values, with 2 motors per side

static void CrcLib::MoveTank(ANALOG leftChannel, ANALOG rightChannel, unsigned char frontLeftMotor, unsigned char backLeftMotor, unsigned char frontRightMotor, unsigned char backRightMotor)

The following parameters must be passed to the function for it to work properly:

  • leftChannel: The remote controller joystick channel used to control the left drive motors. Must be of the type ANALOG.

  • rightChannel:The remote controller joystick channel used to control the right drive motors. Must be of the type ANALOG.

  • frontLeftMotor: The name of the PWM pin to which is connected the front left motor. Must be of the type unsigned char.

  • backLeftMotor:The name of the PWM pin to which is connected the back left motor. Must be of the type unsigned char.

  • frontRightMotor: The name of the PWM pin to which is connected the front right motor. Must be of the type unsigned char.

  • backRightMotor:The name of the PWM pin to which is connected the back right motor. Must be of the type unsigned char.

#3: Directly using remote controller joystick values, with only 1 motor per side

static void CrcLib::MoveTank(ANALOG leftChannel, ANALOG rightChannel, unsigned char leftMotor, unsigned char rightMotor)

The following parameters must be passed to the function for it to work properly:

  • leftChannel: The remote controller joystick channel used to control the left drive motor. Must be of the type ANALOG.

  • rightChannel:The remote controller joystick channel used to control the right drive motor. Must be of the type ANALOG.

  • leftMotor:The name of the PWM pin to which is connected the left motor. Must be of the type unsigned char.

  • rightMotor: The name of the PWM pin to which is connected the right motor. Must be of the type unsigned char.

Examples

#include <CrcLib.h> void setup() { CrcLib::Initialize(); CrcLib::InitializePwmOutput(CRC_PWM_1); CrcLib::InitializePwmOutput(CRC_PWM_2); /* The rest of your setup code ... */ } void loop() { CrcLib::Update(); CrcLib::MoveTank(ANALOG::JOYSTICK1_Y, ANALOG::JOYSTICK2_Y, CRC_PWM_1, CRC_PWM_2); /* The rest of your looping code ... */ }

More on this function

There is sadly nothing more to be said about this function…

Related articles