@Fabian:
Vielleicht machst du es dir für den Anfang zu schwierig.
Fang doch mit einer einfachen Aufgabe an:
Die Control M32 (Master) fordert auf Tastendruck bestimmte Aktionen von der Base (Slave) über I2C an.
Typischer Code der Control M32 (Master):
Passender Code für den Slave (Base):Code:#include "RP6ControlLib.h" #include "RP6I2CmasterTWI.h" uint8_t buffer[2]; int main(void) { initRP6Control(); initLCD(); I2CTWI_initMaster(100); uint8_t key; while(true) { showScreenLCD("Bitte Taster", "druecken"); do { key = getPressedKeyNumber(); } while (key == 0); showScreenLCD("Daten werden", "uebertragen"); mSleep(500); buffer[0] = 0; buffer[1] = key; if (!I2CTWI_isBusy()) { I2CTWI_transmitBytes(10, buffer, 2); } showScreenLCD("...erfolgreich", ""); mSleep(500); } return 0; }
Wenn das bei dir klappt, kannst du dich an neue Aufgaben machen.Code:#include"RP6RobotBaseLib.h" #include "RP6I2CslaveTWI.h" int main(void) { initRobotBase(); powerON(); setACSPwrOff(); uint8_t i; I2CTWI_initSlave(10); while (true) { if(I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy) { // Register speichern: i = I2CTWI_writeRegisters[0]; I2CTWI_writeRegisters[0] = 0; switch (i) { case 1: setLEDs(0b000001); mSleep(500); setLEDs(0b000000); // task_motionControl(); // move(30,FWD,DIST_MM(50),false); break; case 2: setLEDs(0b000011); mSleep(500); setLEDs(0b000000); // task_motionControl(); // move(30,BWD,DIST_MM(50),false); break; case 3: setLEDs(0b000111); mSleep(500); setLEDs(0b000000); // task_motionControl(); // rotate(30,LEFT,20,false); break; case 4: setLEDs(0b001111); mSleep(500); setLEDs(0b000000); // task_motionControl(); // rotate(30,RIGHT,20,false); break; default: setLEDs(0b111111); mSleep(500); setLEDs(0b000000); } } } return 0; }
Genau so kann die M32 Messwerte von der Base abrufen.
Gruß Dirk






Zitieren

Lesezeichen