Hallo geschätzte Elektronikfreunde In der Schule entwickeln wir gerade eine Maschine, welche zum Trainieren von Spurhunden dienen soll. Eine Funktion deren ist, dass sich 4 Drehteller drehen sollen. Diese sind von 4 Schrittmotoren angetrieben. Soweit habe ich ein Programm geschrieben, wo sich die Schrittmotoren über den seriellen Monitor ansteuern lassen. Nun möchte ich das Signal über eine IR-Fernbedienung geben und die Steppers so steuern. Habe das Programm erweitert, bekomme aber ständig diese Fehlermeldungen (Anhang Bild): Mein Programm: #include <IRremote.h> // Library wird eingebunden #include "MeMegaPi.h" #include <SoftwareSerial.h> MeStepperOnBoard stepper1 (SLOT_1); //Schrittmotor 1 am SLOT 1 MeStepperOnBoard stepper2 (SLOT_2); //Schrittmotor 2 am SLOT 2 MeStepperOnBoard stepper3 (SLOT_3); //Schrittmotor 3 am SLOT 3 MeStepperOnBoard stepper4 (SLOT_4); //Schrittmotor 3 am SLOT 4 int RECV_PIN = 30; // Definiere Sensor Pin_IR-Empfänger am Pin 30 IRrecv irrecv(RECV_PIN); decode_results results; void setup() { irrecv.enableIRIn(); // Starte den Empfänger Serial.begin(9600); // Setze die Baudrate auf xy (bits/sec) stepper1.setMaxSpeed(100); // Einstellungen der Schrittmotoren stepper1.setAcceleration(20000); stepper1.setMicroStep(10); stepper1.enableOutputs(); stepper2.setMaxSpeed(100); stepper2.setAcceleration(20000); stepper2.setMicroStep(10); stepper2.enableOutputs(); stepper3.setMaxSpeed(100); stepper3.setAcceleration(20000); stepper3.setMicroStep(10); stepper3.enableOutputs(); stepper4.setMaxSpeed(100); stepper4.setAcceleration(20000); stepper4.setMicroStep(10); stepper4.enableOutputs(); } void loop() { if (Serial.available()) if(irrecv.decode(&results)) //Überprüfe ob ein Code empfangen wurde switch(results.value){ char a = Serial.read(); switch (a) { case 0xFF6897: stepper1.moveTo(0); stepper2.moveTo(0); stepper3.moveTo(0); stepper4.moveTo(0); break; case 0XFF30CF: stepper1.move(66.6666666667); break; case 0xFF18E7: stepper2.move(66.6666666667); break; case 0xFF7A85: stepper3.move(66.6666666667); break; case 0xFF10EF: stepper4.move(66.6666666667); break; } } stepper1.run(); stepper2.run(); stepper3.run(); stepper4.run(); } Wäre sehr froh, wenn mir jemand helfen würde. :) Besten Dank im Vorraus Freundliche Gruesse Laurent
Hmm, hast du denn erstmal ein Beispielprogramm welches den IR Empfänger verwendet, erfolgreich kompiliert und verwendet? Wenn ja, dann such nach Unterschieden zu deinem Programm. Womöglich liegt es an der Reihenfolge. Muss nicht MeMegaPi.h als allererstes rein?
und so wie es aussieht wollen auch 2 libraries den interruptvektor 13 nutzen...
Hallo Ja ich habe bereits ein Beispielprogramm welches den IR-Empfänger verwendet, kompiliert und hochgeladen. Dies hat funktioniert. Auch die Reihenfolge habe ich geändert bei #include, aber bekomme immer noch dieselbe Fehlermeldung. Gruesse
Dieses MeMegaPi.h includiert ja Gott und die Welt und wird sich wohl alle Resourcen krallen. Da darin aber auch ein IRReceiver enthalten ist macht es wohl Sinn den zu benutzen und IRremote.h rauszuschmeissen. Auch SoftwareSerial.h kann raus weil MegaPi das auch benutzt. Edit: Das Makeblock Zeug verwendet einen Hardware Decoder für das IR Modul, die IRReceiver daraus kann man also nicht mit einem einer einfachen Empfängerdiode verwenden.
Hallo Habe die Datei MeIR.cpp gelöscht und konnte das Programm erfolgreich kompilieren und hochladen. Jedoch, kommt das Signal nicht an bzw. die Motoren lassen sich bei Tastendruck nicht in Bewegung versetzen. Der IR-Empfänger und die Steppers sind intakt. Mit einzelnen Programmen lassen sie sich steuern. Habt Ihr eine Idee? Gruesse
Du kannst doch nicht einfach ne Datei löschen... Beachte was Johannes geschrieben hat. Er scheint auf der richtigen Spur zu sein. Im Gegensatz zum PC muss man bei uCs mehr darauf achten ob zwei libs miteinander kompatibel sind.
Laurent B. schrieb: > switch(results.value){ > > char a = Serial.read(); > switch (a) > > { > case 0xFF6897: das sieht sehr unsinnig aus. Ein Char kann nicht den Wert 0xFF6897 annehmen, das Serial.read und switch(a) muss weg.
Alex G. schrieb: > Du kannst doch nicht einfach ne Datei löschen... scheint eher zufällig zu gehen (wenn es wirklich) klappt. Schön ist was anderes... Ich weiss schon warum ich lieber mbed benutze :)
Johannes S. schrieb: > Laurent B. schrieb: >> switch(results.value){ >> >> char a = Serial.read(); >> switch (a) >> >> { >> case 0xFF6897: > > das sieht sehr unsinnig aus. Ein Char kann nicht den Wert 0xFF6897 > annehmen, das Serial.read und switch(a) muss weg. Hallo Johannes, schön von Dir zu hören. Habe ich mir zuerst auch gedacht. :D Ich habe das in etwa so übernommen vom MegaPiOnBoardStepperTest.ino Sketch. Danach versucht ihn zu erweitern. Der TSOP-IR-Empfänger funzt auch auf dem MegaPi. Getestet im IRrecvDemo. Hier ist mein Programm ohne die IRrecv etc. Erweiterung. Der char bzw. im case '1' '2' etc. Wenn ich diese Nummern im seriellen Monitor eingebe und bestätige, dann drehen sich die Motoren wie erwünscht. Doch wie bringe ich den Code der IR-fernbedienung iwie ins Case oder wie auch immer? :D Programm: #include "MeMegaPi.h" #include <SoftwareSerial.h> MeStepperOnBoard stepper (SLOT_1); MeStepperOnBoard stepper2 (SLOT_2); MeStepperOnBoard stepper3 (SLOT_3); MeStepperOnBoard stepper4 (SLOT_4); void setup() { Serial.begin(9600); stepper.setMaxSpeed(100); stepper.setAcceleration(20000); stepper.setMicroStep(10); stepper.enableOutputs(); stepper2.setMaxSpeed(100); stepper2.setAcceleration(20000); stepper2.setMicroStep(10); stepper2.enableOutputs(); stepper3.setMaxSpeed(100); stepper3.setAcceleration(20000); stepper3.setMicroStep(10); stepper3.enableOutputs(); stepper4.setMaxSpeed(100); stepper4.setAcceleration(20000); stepper4.setMicroStep(10); stepper4.enableOutputs(); } void loop() { if (Serial.available()) { char a = Serial.read(); switch (a) { case '0': stepper.moveTo(0); stepper2.moveTo(0); stepper3.moveTo(0); stepper4.moveTo(0); break; case '1': stepper.move(66.6666666667); break; case '2': stepper2.move(66.6666666667); break; case '3': stepper3.move(66.6666666667); break; case '4': stepper4.move(66.6666666667); break; } } stepper.run(); stepper2.run(); stepper3.run(); stepper4.run(); }
Hallo Habe die Sachen weggenommen und komplett auf char und das ganze Zeug verzichtet. Funktioniert jetzt. :) Besten Dank für Eure Inputs. :)
Gut, aber jetzt nicht weiter nach fertigen Libs googlen sondern mal nach einem C Tutorial. So geheimnisvoll und schwierig ist die Switch-Case Syntax nicht.
Johannes S. schrieb: > Gut, aber jetzt nicht weiter nach fertigen Libs googlen sondern mal nach > einem C Tutorial. So geheimnisvoll und schwierig ist die Switch-Case > Syntax nicht. Ja bin dran. Aber habe leider nicht so die Zeit, da die Schule wieder anfängt und Prüfungen anstehen. Und bissl Urlaub habe ich auch noch. :) Vielen Dank Dir nochmals Johannes :) Gruesse
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.