This may be a very simple problem but it has had me going round and round in circles, it is VERY similar to this [ Problem with wrapping Adafruit Motor Controller function calls in a class] question but try as I might I couldn't resolve the issue using this example. So I will include my code and hope that someone with more experience takes pity on me. This code compiles with no errors but the motors don't start Like the linked question it all worked before it was separated into the individual files.
robot.ino:
#include "E:\chhs2017\LegoRobotics\SketchesThatNeedToWork\RobotBase\RobotBase.h"
RobotBase *base;
void setup(){
base = new RobotBase();
}
void loop(){
base->moveRobotForward(base->HALF_SPEED);
// base->stopRobotAfter(1500);
}
RobotBase.h:
#ifndef ROBOTBASE_H
#define ROBOTBASE_H
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
class RobotBase{
public:
const int MAX_SPEED = 255;
const int THREE_QUARTER_SPEED = 190;
const int HALF_SPEED = 127;
const int QUARTER_SPEED = 90;
const int MIN_SPEED = 30;
RobotBase();
void moveRobotForward(int inSpeed);
void moveRobotBackward(int inSpeed);
void moveRobotLeft(int inSpeed);
void moveRobotRight(int inSpeed);
void rotateRobotRight(int inSpeed);
void rotateRobotLeft(int inSpeed);
void stopRobotAfter(int time);
protected:
Adafruit_MotorShield AFMS;
Adafruit_DCMotor *myMotorM1;
Adafruit_DCMotor *myMotorM2;
Adafruit_DCMotor *myMotorM3;
Adafruit_DCMotor *myMotorM4;
};
#endif
RobotBase.ino:
/*************************************************************
* this is the robot base control class which is designed for a
* four wheel robot construction using an Adafruit_DCMotor controller
* and and arduino Uno
**************************************************************/
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
#include "E:/chhs2017/LegoRobotics/SketchesThatNeedToWork/RobotBase/RobotBase.h"
RobotBase::RobotBase() {
AFMS = Adafruit_MotorShield();
myMotorM1 = AFMS.getMotor(1);
myMotorM2 = AFMS.getMotor(2);
myMotorM3 = AFMS.getMotor(3);
myMotorM4 = AFMS.getMotor(4);
}
void RobotBase::stopRobotAfter(int time){
delay(time);
myMotorM1->run(RELEASE);
myMotorM2->run(RELEASE);
myMotorM3->run(RELEASE);
myMotorM4->run(RELEASE);
}
void RobotBase::moveRobotForward(int inSpeed){
myMotorM1->setSpeed(inSpeed);
myMotorM1->run(FORWARD);
myMotorM2->setSpeed(inSpeed);
myMotorM2->run(FORWARD);
myMotorM3->setSpeed(inSpeed);
myMotorM3->run(FORWARD);
myMotorM4->setSpeed(inSpeed);
myMotorM4->run(FORWARD);
}
void RobotBase::moveRobotBackward(int inSpeed){
myMotorM1->setSpeed(inSpeed);
myMotorM1->run(BACKWARD);
myMotorM2->setSpeed(inSpeed);
myMotorM2->run(BACKWARD);
myMotorM3->setSpeed(inSpeed);
myMotorM3->run(BACKWARD);
myMotorM4->setSpeed(inSpeed);
myMotorM4->run(BACKWARD);
}
void RobotBase::moveRobotLeft(int inSpeed){
myMotorM1->setSpeed(inSpeed);
myMotorM1->run(FORWARD);
myMotorM2->setSpeed(inSpeed);
myMotorM2->run(BACKWARD);
myMotorM3->setSpeed(inSpeed);
myMotorM3->run(FORWARD);
myMotorM4->setSpeed(inSpeed);
myMotorM4->run(BACKWARD);
}
void RobotBase::moveRobotRight(int inSpeed){
myMotorM1->setSpeed(inSpeed);
myMotorM1->run(BACKWARD);
myMotorM2->setSpeed(inSpeed);
myMotorM2->run(FORWARD);
myMotorM3->setSpeed(inSpeed);
myMotorM3->run(BACKWARD);
myMotorM4->setSpeed(inSpeed);
myMotorM4->run(FORWARD);
}
void RobotBase::rotateRobotRight(int inSpeed){
myMotorM1->setSpeed(inSpeed);
myMotorM1->run(FORWARD);
myMotorM2->setSpeed(inSpeed);
myMotorM2->run(FORWARD);
myMotorM3->setSpeed(inSpeed);
myMotorM3->run(BACKWARD);
myMotorM4->setSpeed(inSpeed);
myMotorM4->run(BACKWARD);
}
void RobotBase::rotateRobotLeft(int inSpeed){
myMotorM1->setSpeed(inSpeed);
myMotorM1->run(BACKWARD);
myMotorM2->setSpeed(inSpeed);
myMotorM2->run(BACKWARD);
myMotorM3->setSpeed(inSpeed);
myMotorM3->run(FORWARD);
myMotorM4->setSpeed(inSpeed);
myMotorM4->run(FORWARD);
}
Thanks in Advance!
AFMS.getMotor()
to make sure they aren't NULL – Code Gorilla Aug 4 '17 at 7:51