Inhaltsverzeichnis

HAM Radio Controller mit dem Raspberry PI

Programmierbeispiele

die folgenden Beispiele sollen zeigen wie super einfach die Programmierung ist. Dank der vielen vorbereiteten Funktionen sind auch komplexe Anwendungen schnell geschrieben.

Die Programmierung erfolgt in der Sprache C mit den ganz normalen Boardmitteln eines Raspberry PIs, ohne spezielle Bibliotheken.


Schrittmotorsteuerung

In diesem Beispiel wird das Drehen eines Rotary-Encoders direkt an einen Schrittmotor ausgegeben:

    // weise dem Rotary-Encoder zwei Eingangsports zu
    init_rotencoder(KEY0, KEY1, -1,-1,-1,-1);
    
    // weise der Schrittmotor-PA Ports für Step und Richtung zu
    int stepid = create_stepper(OUT0, OUT1, OUT2, 0, 10, -1, -1);
    
    while(1)                          // Endlosschleife
    {
        int steps = getEncSteps(0);   // Lese Encoder
                                      // falls der Encoder betätigt wurde
                                      // gebe die Schrittzahl an die Schrittmotor PA aus
        if(steps != 0) move_stepper(stepid,abs(steps),(steps>0)?1:0,1);
    }

3D-Schrittmotorsteuerung für 3 Achsen

gleiches Beispiel wie zuvor, jedoch für drei Achsen

    // weise den drei Rotary-Encodern je zwei Eingangsports zu
    init_rotencoder(KEY0, KEY1, KEY2, KEY3, IN4, IN5);
    
    // weise den drei Schrittmotor-PA Ports für Step und Richtung zu
    int stepidX = create_stepper(OUT0, OUT1, OUT2, 0, 10, -1, -1);
    int stepidY = create_stepper(OUT3, OUT4, OUT5, 0, 10, -1, -1);
    int stepidZ = create_stepper(OUT6, OUT7, OUT8, 0, 10, -1, -1);
    
    while(1)                          // Endlosschleife
    {
        int stepsX = getEncSteps(0);
        int stepsY = getEncSteps(1);
        int stepsZ = getEncSteps(2);
        if(stepsX != 0) move_stepper(stepidX,abs(stepsX),(stepsX>0)?1:0,1);
        if(stepsY != 0) move_stepper(stepidY,abs(stepsY),(stepsY>0)?1:0,1);
        if(stepsZ != 0) move_stepper(stepidZ,abs(stepsZ),(stepsZ>0)?1:0,1);
    }

zeige die aktuelle Sonnenposition

    // benutze serielle Schnittstelle am PRI board
    gps_open(NULL, NULL, B4800); 
    
    while(1)
    {
        int az, elev;
        getSunPos(&az, &elev);
        
        char text[200];
        sprintf(s,"Sonne steht auf Azimuth:%d Grad und Elevation:%d Grad",az,elev);
        draw_font(text,10,50,1,RED,20);
        sleep(1);
    }