Hallo,
ich habe nun mal meinen erstes Robotergefährt zusammen gebaut, und wollte es direkt fahren lassen.
Folgendes Setup:
-Arduino Uno
-Adafruit Motorshield
-4DC Motoren mit Räder
Wenn ich nun per Serial Kommandos hin schicke, kann ich bereits die ersten Bewegungen ohne Probleme abspielen.
(habe zum Anfang vorwärts,links,rechts,zurück gebastelt).
Nun möchte ich das Gefährt gerne per IR steuern.
Habe dafür eine alte Fernbedienung ausgelesen, und in einem kleinen Sketch ausprobiert.
(lasse mir die gedrückten Tasten ausgeben per Serial, und habe denen Namen geben [vor,zurück,links,rechts,enter]), und damit
zum Beispiel eine kleine Ampel mit LEDs ferngesteuert...
soweit, so gut: das klappt auch alles...
Nun jedoch das Problem:
wenn ich das mit dem Motorshield verbinde, und ein Signal empfange, dann freezt der Arduino direkt beim Empfang des ersten Kommandos ein.
Die Motoren zucken kurz - mehr nicht.
Woran kann das liegen?
Hier ein wenig Code:
// Motoren
#include <AFMotor.h>
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
int incomingByte;
//IRC
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Roboter gestartet!");
// turn on motor
motor1.setSpeed(100);
motor2.setSpeed(100);
motor3.setSpeed(100);
motor4.setSpeed(100);
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
//IRC
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
switch(results.value){
case 2690607255:
Serial.println("Enter");
break;
case 2690586855:
Serial.println("Unten");
hinten();
break;
case 2690595015:
Serial.println("Links");
links();
break;
case 2690639895:
Serial.println("Oben");
vorne();
break;
case 2690627655:
Serial.println("Rechts");
rechts();
break;
case 4294967295:
Serial.println("Zulange gedrückt!");
break;
}
irrecv.resume(); // Receive the next value
}
}
Bei vorne(),... werden den 4 Motoren entsprechende Anweisungen geben.
zB:
void vorne(){
motor1.setSpeed(150);
motor2.setSpeed(150);
motor3.setSpeed(150);
motor4.setSpeed(150);
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
delay(1000);
motor1.setSpeed(0);
motor2.setSpeed(0);
motor3.setSpeed(0);
motor4.setSpeed(0);
}