Einfache Aktionen programmieren

Die BackLEDs sollen 100mal blinken:

#include "asuro.h"

int main()
   {
   Init();

    int i=0;
    for (i=0;i<100;++i)
       {
          BackLED (OFF, ON);
          Msleep(200);
          BackLED (ON, OFF);
          Msleep(200);
       }
    BackLED (OFF, OFF);

    while (1); //ansonsten endlos
    return 0; //wird nicht erreicht
}

Die StatusLED blinkt GRÜN, ROT und GELB:

 

#include "asuro.h"

int main()
   {
    Init();

    const int DAUER=400;
    int i=0;
    for (i=0;i<20;++i)
       {
       StatusLED (GREEN);
       Msleep (DAUER);
       StatusLED (RED);
       Msleep (DAUER);
       StatusLED (YELLOW);
       Msleep (DAUER);
       }

    StatusLED (OFF);
    while (1);
    return 0;
}

Die Funktion "GoTurn( Strecke, Winkel, Geschwindigkeit)" ermöglicht ein Geradeausfahren und ein Kurvenfahren. Das folgende Programm fährt ein Rechteck zweimal ab:

// Programm Rechteckfahren

#include "asuro.h"

int main (void) {

   Init ();

   EncoderInit();


    int i;
    for(i=0; i<8; i++){
       GoTurn(200,0,150);
       Msleep(300);
       GoTurn(0,60,150);
       Msleep(300);
    }
    return 0;
}

 

Download des Projektes.

Falls das Programm "Rechteckfahren" nicht funktioniert: Es könnte natürlich sein, dass die Encoder "kaputt sind".

Das kann mit dem folgenden Programm getestet werden:

// Odometertest mit IR-Ausgabe

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

int main (void) {

   Init ();

   EncoderInit();
    MotorDir(FWD,FWD);
    MotorSpeed(120,120);
     
    int odo_links;
    int odo_rechts;
    char text[16]; // Speicher für mit itoa() umgewandelte Integer-Zahl
    int i;
    for(i=0; i<8000; i++){
        odo_links = encoder[LEFT];
        odo_rechts = encoder[RIGHT];
        Msleep(300);
        SerPrint("Links:");
        // Umwandlung einer Integer-zahl in eine Zeichenkette:
        itoa(odo_links, text, 10); // 10 bedeutet Dezimal-Ausgabe
        SerPrint(text); // Ausgabe Odometriewert links
        SerPrint("_Rechts:");
        itoa(odo_rechts, text, 10); // 10 bedeutet Dezimal-Ausgabe
        SerPrint(text); // Ausgabe Odometriewert links
        SerPrint("\r\n"); // Zeilenvorschub
       }
      
    return 0;
}

Download des Projektes.

So sieht die Ausgabe bei Geradeaus-Fahrt mit dem Terminal-Programm "Hercules" aus:

Screenshot

Es ist nun deutlich zu erkennen, dass der linke Encoder nicht funktioniert!