Hallo zusammen,
ich möchte 2 Gleichstrommotoren über eine Fernbedinung steuern, also den Roboter wie ein RC Auto herumfahren lassen.
Habe hierfür einen Arduino Rev 3 sowie einen Motorshield von Watterott im Einsatz.
Prinzipiell scheint die Ansteuerung auch zu funktionieren, aber aus irgendeinem Grund dreht immer nur Motor B. Motor A reagiert einfach nicht, ist aber funktionsfähig. Auf dem Motorshield leuchten auch immer nur die für Motor B zuständigen LEDs.
#include "IRLibAll.h"
//Create a receiver object to listen on pin 2
IRrecv myReceiver(2);
//Create a decoder object
IRdecode myDecoder;
#define UP 3772778233
#define DOWN 3772810873
#define RIGHT 3772794553
#define LEFT 3772819033
///////////////////MOTOR///////////////////
int richtungA = 12; //Richtung Motor A
int richtungB = 13; //Richtung Motor B
int pwmA = 3; //Geschwindigkeit Motor A
int pwmB = 11; //Geschwindigkeit Motor B
int bremseA = 9; //Bremse Motor A
int bremseB = 8; //Bremse Motor B
int geschwindigkeitA = 250; //0-255 (min - max)
int geschwindigkeitB = 255; //0-255 (min - max)
void setup() {
//Pins für Motorenrichtung als Ausgang
pinMode(richtungA, OUTPUT);
pinMode(richtungB, OUTPUT);
//Pins für Motorenrichtung als Ausgang (Bremse)
pinMode(bremseA, OUTPUT);
pinMode(bremseB, OUTPUT);
//Geschwindigkeit setzen
analogWrite(pwmA, geschwindigkeitA);
analogWrite(pwmB, geschwindigkeitB);
//Bremsen anziehen
digitalWrite(bremseA, HIGH);
digitalWrite(bremseB, HIGH);
Serial.begin(9600);
myReceiver.enableIRIn(); // Starten des Receivers
Serial.println(("Ready to receive IR signals"));
}
///////////////////MOTOR///////////////////
void gerade(){
delay(2000);
//Bremsen lösen
digitalWrite(bremseA, LOW);
digitalWrite(bremseB, LOW);
digitalWrite(richtungA, HIGH);
digitalWrite(richtungB, HIGH);
delay(1500);
digitalWrite(bremseA, HIGH);
digitalWrite(bremseB, HIGH);
}
void drehen(){
digitalWrite(bremseA, LOW);
digitalWrite(bremseB, LOW);
digitalWrite(richtungA, HIGH);
digitalWrite(richtungB, LOW);
delay(1200);
digitalWrite(bremseA, HIGH);
digitalWrite(bremseB, HIGH);
delay(600);
}
void rechts(){
digitalWrite(bremseA, LOW);
digitalWrite(bremseB, LOW);
digitalWrite(richtungA, HIGH);
digitalWrite(richtungB, LOW);
delay(600);
digitalWrite(bremseA, HIGH);
digitalWrite(bremseB, HIGH);
}
void links(){
digitalWrite(bremseA, LOW);
digitalWrite(bremseB, LOW);
digitalWrite(richtungA, LOW);
digitalWrite(richtungB, HIGH);
delay(600);
digitalWrite(bremseA, HIGH);
digitalWrite(bremseB, HIGH);
}
void back(){
digitalWrite(bremseA, LOW);
digitalWrite(bremseB, LOW);
digitalWrite(richtungA, LOW);
digitalWrite(richtungB, LOW);
delay(600);
digitalWrite(bremseA, HIGH);
digitalWrite(bremseB, HIGH);
}
void loop(){
if (myReceiver.getResults()) {
myDecoder.decode(); //Dekodieren des Signals
myDecoder.dumpResults(true); //Ausgabe des dekodierten Signals
myReceiver.enableIRIn(); //Neustarten des Receivers
Serial.print(myDecoder.value);
switch(myDecoder.value) { //Fallunterscheidung in Abhängigkeit der "value" des Dekoders
case UP:
gerade();
break;
case DOWN:
back();
break;
case RIGHT:
rechts();
break;
case LEFT:
links();
break;
}
}
}
Bin erst seit zwei Wochen am Programmieren eines Arduino, meine Kenntnisse also noch entsprechend gering.
Gruß
Komani