Forum: Mikrocontroller und Digitale Elektronik Asuro Programmcode


von Fabian L. (asuro1)


Lesenswert?

Hallo,

könnte mir wohl mal einer den nachfolgenden Befehl Zeile für Zeile 
beschreiben?

#include <asuro.h>
#include "rc5.h"
#include <stdlib.h>

#define LINKS   0x100b
#define RECHTS   0x100a
#define STOPP  0x102b
#define VORWAERTS  0x102a
#define RUECKWAERTS  0x102e

#define MAXSPEED  180




int main(void)
{

  static unsigned int cmd; //Lesepuffer für IR-Empfänger

  char text[7];
  unsigned char taste;
  Init();
  InitRC5();

  SerPrint("RC5 Test\r\n");

  FrontLED(OFF);
  BackLED(OFF, OFF);

   MotorDir(FWD, FWD);
   MotorSpeed(0, 0);
   Msleep(100);

  while (1)
  {
    taste=PollSwitch();
    if (taste> 0)
  {
  MotorSpeed(0,0);
  FrontLED(OFF);
    }

    cmd = ReadRC5();
    if (cmd)
    {
      cmd &= RC5_MASK;
      itoa(cmd, text, 16);
      SerPrint(text);
      SerPrint("\r\n");

      switch (cmd)
      {
      case LINKS :
    SerPrint("LINKS\r\n");
    BackLED(ON, OFF);
    FrontLED(OFF);
    MotorDir(FWD, FWD);
    MotorSpeed(0, 200);
    break;
    case RECHTS :
    SerPrint("RECHTS\r\n");
    BackLED(OFF, ON);
    FrontLED(OFF);
    MotorDir(FWD, FWD);
    MotorSpeed(MAXSPEED, 0);
    break;
    case VORWAERTS :
    SerPrint("VORWAERTS\r\n");
    BackLED(OFF, OFF);
    FrontLED(ON);
    MotorDir(FWD, FWD);
    MotorSpeed(150, 165);
    break;
    case RUECKWAERTS :
    SerPrint("RUECKWAERTS\r\n");
    FrontLED(OFF);
    BackLED(ON, ON);
    MotorDir(RWD, RWD);
    MotorSpeed(150, 160);
    break;
    case STOPP :
    SerPrint("STOPP\r\n");
    BackLED(OFF, OFF);
    FrontLED(OFF);
    MotorSpeed(0, 0);
    MotorDir(FWD, FWD);
    break;
    }
    }

    Msleep(100);
  }
  return 0;
}

von Timmo H. (masterfx)


Lesenswert?

Fabian Lange schrieb:
> Hallo,
>
> könnte mir wohl mal einer den nachfolgenden Befehl Zeile für Zeile
> beschreiben?
Nö. Mach man schön selbst.

Lies ein C-Buch/Tutorial und die Asuro Doku.
Oder frag explizit was du nicht verstehst. Der Code ist praktisch so 
selbsterklärend wie Pseudocode.

von Stefan (Gast)


Lesenswert?


von Fabian L. (asuro1)


Lesenswert?

Hallo,

erstmal danke schön für die Antworten. Super Seiten. Hab schon viel 
verstanden.
Bis auf....

cmd = ReadRC5();
    if (cmd)
    {
      cmd &= RC5_MASK;
      itoa(cmd, text, 16);
      SerPrint(text);
      SerPrint("\r\n");

von Christian (Gast)


Lesenswert?

RC5_MASK ist irgend ein Makro mit einer Bit-Maske.
Dieses Makro (#define RC5_MASK) muss in einer der Header-Dateien stehen.
Dann wird vielleicht deutlicher was da passiert.

Wenn cmd > 0 ist wird cmd mit der Maske "ver-und-et".
Daraus resultierenden dann je nach Wert von cmd verschiedene Werte, die 
wiederum für unterschiedliche Befehle stehen.

itoa macht aus Integer-Werten ASCII-Zeichen.

Naja und SerPrint gibt das ganze dann vermutlich auf die serielle 
Schnittstelle.

Gruß

Christian

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
Noch kein Account? Hier anmelden.