Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Purpose

Automatically implements an Arcade style drive controlled, where left and right motors (1 or 2 by side) are controlled by 2 dedicated inputs (most probably remote controller joystick channels)

Purpose

Easily implement an Arcade style drive for a mobile robot.

When to use

If you have a tank an Arcade styled drive system configuration, where a channel controls TO DOsignal controls frontward and backward motion and another one controls the rotation.

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.

Note

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 Crc::CrcLib::MoveTankMoveArcade(int8_t leftChannelforwardChannel, int8_t rightChannelyawChannel, 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:

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

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

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

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

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

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

Overloads

#1: Using only one motor per side

static void Crc::CrcLib::MoveTankMoveArcade(int8_t leftChannelforwardChannel, int8_t rightChannelyawChannel, unsigned char leftMotor, unsigned char rightMotor)

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

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

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

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

  • rightMotor: The name of the PWM pin to wich 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 Crc::CrcLib::MoveTankMoveArcade(ANALOG leftChannelforwardChannel, ANALOG rightChannelyawChannel, 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:

  • leftChannelforwardChannel: The remote controller joystick channel speed value used to control the left drive motorsforward motion. Must be of the type ANALOG.

  • rightChannelyawChannel: The remote controller joystick channel speed value used to control the right drive motorsrotative motion. Must be of the type ANALOG.

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

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

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

  • backLeftMotor:The name of the PWM pin to wich 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 Crc::CrcLib::MoveTankMoveArcade(ANALOG leftChannelforwardChannel, ANALOG rightChannelyawChannel, unsigned char leftMotor, unsigned char rightMotor)

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

  • leftChannelforwardChannel: The remote controller joystick channel speed value used to control the left drive motorforward motion. Must be of the type ANALOG.

  • rightChannelyawChannel: The remote controller joystick channel speed value used to control the right drive motorrotative motion. Must be of the type ANALOG.

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

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

Examples

code
Expand
title#1 We want to control 2 power motors, part of a tank an Arcade style drive system, controlled via motor controllers connected to PWM Port #1 and #2. We want the speed forward movement to be directly controlled using the vertical axis of each the left joystick and the rotative motion to be directly controlled using the horizontal axis of the right joystick on the remote controller connected via a CrcConnect module. The left joystick controls the left motor, and the right joystick controls the right motor.
Code Block
languagecpp
#include <CrcLib.h>

using namespace Crc;

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::MoveArcade(ANALOG::JOYSTICK1_Y, ANALOG::JOYSTICK2_X, 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…