4 Schrittmotoren ansteuern über IR-Fernbedienung (Schulprojekt)

OP (Firma: Fischer Reinach AG) #5503771
Lesenswert?

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
Angehängte Dateien:
Gast #5504652
Lesenswert?

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.
OP (Firma: Fischer Reinach AG) #5504706
Lesenswert?

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
OP (Firma: Fischer Reinach AG) #5504768
Lesenswert?

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();
}
OP (Firma: Fischer Reinach AG) #5504887
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren