@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):
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;
}
Passender Code für den Slave (Base):
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;
}
Wenn das bei dir klappt, kannst du dich an neue Aufgaben machen.
Genau so kann die M32 Messwerte von der Base abrufen.
Gruß Dirk
Lesezeichen