ich bin Michael und komplett neu in der Arduinio Szene. Aktuell baue ich gerade einen Wall-E der eigentlich mittels Arduino und Raspberry agiert. Nun da ich hier erst einmal die Programmierung erlernen muss wollte ich zumindest mit dem Wall-E per RC Fernsteuerung etwas durch die Gegend fahren. Nun frage ich mich, ob ich die Motor Shield Platine über einen RC Empfänger ansteuern kann. Also wirklich nur Motor 1 Vorwärts/stop/Rückwärts und Motor 2 Vorwärts/stop/Rückwärts.
Wie gesagt, ich habe bis dato keine Ahnung von Arduino. Also habt bitte Mitleid das ich nicht gleich alles verstehe
Würde sagen nein.
Der RC Empfänger gibt Servosignale aus und das Shild wird über andere Signale angesteuert.
Du kannst den Arduino so Programmieren daß er die Servosignale einliest, interpretiert und dann das Shield dementsprechend ansteuert.
Ohne Arduino und dessen Programmierung geht es nicht.
Grüße Uwe
Hallo Uwe,
danke erstmal, also gerne auch inkl. dem UNO.
Hatte mich da schon mal mit einem Sketch versucht den im bei YT gesehen habe, aber das funzt irgendwie nicht.
Sorry fürs Bild. Hier der Code:
Danke Dir, so einfach kann es sein
Jetzt hab ich nur das Problem, das die Kette langsam läuft und sich nur minimal einstellen lässt.
Im Wall-E Sketch musste ich einen MotorController sketch hochladen, kannst du vielleicht dort sehen wo ich den Input ändere um den über den RC EMpfänger einspiele?
#ifndef MOTOR_CONTROLLER_HPP
#define MOTOR_CONTROLLER_HPP
// MOTOR CONTROLLER CLASS
class MotorController {
public:
// Constructor
MotorController(uint8_t _dirPin, uint8_t _pwmPin, uint8_t _brkPin, bool _brkEnabled = true);
// Functions
void setSpeed(int pwmValue);
// Default destructor
~MotorController();
private:
uint8_t dirPin, pwmPin, brkPin;
bool reverse, brake, brakeEnabled;
};
/**
* Default Constructor
*
* @param (_dirPin) Digital pin used for motor direction
* @param (_pwmPin) Digiral pin for PWM motor speed control
* @param (_brkPin) Digital pin to enable/disable the breaks
* @param (_brkEnabled) Should the break be used?
*/
MotorController::MotorController(uint8_t _dirPin, uint8_t _pwmPin, uint8_t _brkPin, bool _brkEnabled) {
dirPin = _dirPin;
pwmPin = _pwmPin;
brkPin = _brkPin;
brakeEnabled = _brkEnabled;
pinMode(dirPin, OUTPUT); // Motor Direction
pinMode(brkPin, OUTPUT); // Motor Brake
digitalWrite(dirPin, HIGH);
reverse = false;
if (brakeEnabled) {
digitalWrite(brkPin, HIGH);
brake = true;
} else {
digitalWrite(brkPin, LOW);
brake = false;
}
}
/**
* Default Destructor
*/
MotorController::~MotorController() {
// Empty
}
/**
* Set a new motor speed
*
* @param (pwmValue) The PWM value of the new speed
* @note Negative PWM values will cause the motor to move in reverse
* @note A PWM value of 0 will enable the breaks
*/
void MotorController::setSpeed(int pwmValue) {
// Bound the PWM value to +-255
if (pwmValue > 255) pwmValue = 255;
else if (pwmValue < -255) pwmValue = -255;
// Forward direction
if (pwmValue > 0 && reverse) {
digitalWrite(dirPin, HIGH);
reverse = false;
// Release the brake
if (brake) {
digitalWrite(brkPin, LOW);
brake = false;
}
// Reverse direction
} else if (pwmValue < 0 && !reverse) {
digitalWrite(dirPin, LOW);
reverse = true;
// Release the brake
if (brake) {
digitalWrite(brkPin, LOW);
brake = false;
}
// If there is no movement, engage the brake
} else if (brakeEnabled && !brake) {
digitalWrite(brkPin, HIGH);
brake = true;
}
// Send PWM value
analogWrite(pwmPin, abs(pwmValue));
}
#endif /* MOTOR_CONTROLLER_HPP */