Das Schlüsselwort volatile in der Definition von position weist den C-Compiler an, die Variable in jedem Fall aus dem Speicher auszulesen und nicht zu puffern – das ist wichtig, weil andere Programmteile eventuell die Variable asynchron verändern.
Im Hauptteil legt das Testprogramm zuerst die Ein- und Ausgänge fest, danach lädt es die Interrupt-Handler. Nun beginnt das eigentliche Programm: Der Befehl digitalWrite(ENGINE_PIN_0, HIGH) fährt die Spindel in die linke Endposition und setzt die Variable position auf null.
Jetzt sollten Sie sehen, ob die Polung des Motors stimmt. Dreht er richtig herum, lassen Sie das Programm bis zum Ende laufen und stellen die mechanische Verbindung her. Tut er das nicht, lassen Sie das Programm ebenso durchlaufen und stellen die mechanische Verbindung her, vertauschen jedoch die Anschlüsse am Motor. Bei der nächsten Programmausführung klappt dann alles wie geplant.
Das Kommando digitalWrite(ENGINE_PIN_1, HIGH) fährt die Spindel nun in die rechte Endposition und setzt so die Variable maxposition. Nun errechnet das Programm die Mittelposition, setzt die Variable target auf diesen Wert und fährt die Spindelmutter dorthin – fertig.
Bitte beachten Sie, dass das Ansteuern des Motors komplett über Interrupt-Verarbeitung erfolgt. Die Parameter der delay()-Kommandos müssen Sie dabei so wählen, dass die Spindelmutter die Endposition auch erreicht. Bemessen Sie sie zu knapp, funktioniert das Initialisieren nicht.
Sie kompilieren das Programm mit dem Kommando cc init.c -lwiringPi und rufen danach mit dem Befehl ./a.out das Testprogramm auf.
Fazit
Den Raspberry Pi so zu erweitern, dass er mit Fischertechnik-Komponenten zusammenarbeitet, war kein Kinderspiel. Das kleine Testprogramm gibt schon jetzt einen Einblick in die dazu nötigen hardwarenahen Programmiertechniken. Mit dem gewonnenen Wissen und dem erfolgreich in Betrieb genommenen Testaufbau starten Sie dann in der nächsten Folge der Artikelserie direkt mit dem Programmieren eines Roboters.
Infos
- Datenblatt CD4010: http://www.ti.com/lit/ds/symlink/cd4010b-q1.pdf
- Datenblatt L293: http://www.ti.com/lit/ds/symlink/l293.pdf
- Testaufbau in Aktion: https://youtu.be/X0hv4rUKdww





