User manual

RP6 ROBOT SYSTEM - 4. Programmierung des RP6
Hier ein kleines Beispielprogramm dazu:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "RP6RobotBaseLib.h"
#include "RP6I2CslaveTWI.h" // I2C Library Datei einbinden (!!!)
// ACHTUNG: Das muss auch im Makefile eingetragen werden (!!!)
#define CMD_SET_LEDS 3 // LED Kommando, das über den I2C Bus
// empfangen werden soll.
int main(void)
{
initRobotBase();
I2CTWI_initSlave(10); // TWI initialisieren und Adresse 10 einstellen
powerON();
while(true)
{
// irgendein Kommando empfangen und KEIN Schreibzugriff aktiv?
if(I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy)
{
// Register speichern:
uint8_t cmd = I2CTWI_writeRegisters[0];
I2CTWI_writeRegisters[0] = 0; // und zurücksetzen (!!!)
uint8_t param = I2CTWI_writeRegisters[1]; // Parameter
if(cmd == CMD_SET_LEDS) // LED Kommando empfangen?
setLEDs(param); // LEDs mit dem Parameter setzen
}
if(!I2CTWI_readBusy) // Kein Lesezugriff aktiv?
// Dann aktuellen LED Zustand ins Register 0 schreiben:
I2CTWI_readRegisters[0] = statusLEDs.byte;
}
return 0;
}
Das Programm tut von sich aus erstmal nichts. Man braucht also auf jeden Fall einen
Master der den Controller als Slave steuert. Der Slave ist hier unter Adresse 10 auf
dem I²C Bus erreichbar (s. Zeile 10). Es gibt nur zwei Register die man beschreiben
kann und ein Register das man lesen kann. Das erste Register (= Registernummer 0)
ist ein Kommandoregister in dem Befehle empfangen werden können. In diesem sim-
plen Beispiel ist dies nur das Kommando „3“, um die LEDs zu setzen (kann irgendeine
beliebige Nummer sein). Wird ein beliebiges Kommando empfangen und ist kein
Schreibzugriff aktiv (Zeile 16), wird zunächst der Wert des Kommandoregisters in der
Variablen cmd gespeichert (Zeile 19) und danach das Kommandoregister zurückge-
setzt, damit das Kommando nicht erneut ausgeführt wird! Dann wird noch der Para-
meter in Register 1 in einer Variablen gesichert und abgefragt, ob das Kommando 3
empfangen wurde (Zeile 23). Ist das der Fall, werden die LEDs mit dem Wert vom Pa-
rameter gesetzt.
In Zeile 26 wird abgefragt ob gerade kein Schreibzugriff stattfindet und dann ggf. der
aktuelle Wert der LEDs im lesbaren Register 0 gespeichert.
Wenn der Controller auf dem Roboter dieses Programm geladen hat, kann ein Master-
controller also die LEDs auf dem Roboter über den I²C Bus setzen und deren aktuellen
Zustand auslesen.
- 108 -