Ich verneige mich erfürchtig! :cheesy:
Danke nochmals
Grüße
Hartgas
Druckbare Version
Ich verneige mich erfürchtig! :cheesy:
Danke nochmals
Grüße
Hartgas
Bei den paar Zeilen kann man wohl nicht mal von "klauen" sprechen ;-)
Hi Fans!
Könnte jemand von euch mir mal sagen wo ich die ganzen Befehle finde die man für den Robby benutzen kann?
Ich würde mir die dann mal raussuchen und dazu schreiben was man genau damit anstellen kann. Falls dann nochmal jemand Infos dazu braucht und genauso Noob ist wie ich würde es demjenigen ne ganze Ecke leichter fallen denk ich mal.
Viele Grüße
Hartgas
Hallo Hartgas,
die wesentlichen Funktionen findest du in:
RP6RobotBaseLib.c
RP6I2CMasterTWI.c
RP6I2CSlaveTWI.c
RP6uart.c
RP6ControlLib.c
Die sind da auch gut kommentiert.
Die Definitionen sind in den xyz.h Dateien zu finden.
Gruß Dirk
Besten Dank Dirk.
Ich werd mich mal daran machen.
Gruß
Hartgas
Hallo,
ich hab schon eine Textliste der Funktionen in der Doku erstellt:
micCode:4.6.1. Mikrocontroller initialisieren
void initRobotBase(void)
void powerON(void)
void powerOFF(void)
4.6.2. UART Funktionen (serielle Schnittstelle)
4.6.2.1. Senden von Daten über die serielle Schnittstelle
void writeChar(char ch)
void writeString(char *string)
void writeString_P(STRING)
void writeStringLength(char *data, uint8_t length, uint8_t offset)
void writeInteger(int16_t number, uint8_t base)
4.6.2.2. Empfangen von Daten über die serielle Schnittstelle
void receiveBytes(uint8_t numberOfBytes)
void waitUntilReceptionComplete(void)
void copyReceivedBytesToBuffer(char *buffer)
4.6.3. Delay Funktionen (Verzögerungen und Zeitsteuerung)
void sleep(uint8_t time)
void mSleep(uint16_t time)
Stopwatch()-Makros
startStopwatchX()
stopStopwatchX()
uint8_t isStopwatchXRunning()
setStopwatchX(uint16_t preset)
getStopwatchX()
4.6.4. Status LEDs und Bumper
void setLEDs(uint8_t leds)
statusLEDs.LEDX
updateStatusLEDs()
uint8_t getBumperLeft(void)
uint8_t getBumperRight(void)
void task_Bumpers(void)
bumper_left
bumper_right
void BUMPERS_setStateChangedHandler(void (*bumperHandler)(void))
4.6.5. ADC auslesen (Batterie-, Motorstrom- und Lichtsensoren)
uint16_t readADC(uint8_t channel)
ADC_BAT --> Batteriespannungs Sensor
ADC_MCURRENT_R --> Motorstromsensor des rechten Motors
ADC_MCURRENT_L --> Motorstromsensor des linken Motors
ADC_LS_L --> Linker Lichtsensor
ADC_LS_R --> Rechter Lichtsensor
ADC_ADC1 --> Freier ADC Kanal für eigene Sensoren
ADC_ADC0 --> Freier ADC Kanal für eigene Sensoren
void task_ADC(void)
ADC_BAT: adcBat
ADC_MCURRENT_L: adcMotorCurrentLeft
ADC_MCURRENT_R: adcMotorCurrentRight
ADC_LS_L: adcLSL
ADC_LS_R: adcLSR
ADC_ADC1: adc0
ADC_ADC0: adc1
4.6.6. ACS – Anti Collision System
void setACSPwrOff(void) --> ACS IR LEDs aus
void setACSPwrLow(void) --> Geringe Reichweite
void setACSPwrMed(void) --> Mittlere Reichweite
void setACSPwrHigh(void) --> Maximale Reichweite
void task_ACS(void)
obstacle_left
obstacle_right
void ACS_setStateChangedHandler(void (*acsHandler)(void))
4.6.7. IRCOMM und RC5 Funktionen
void IRCOMM_sendRC5(uint8_t adr, uint8_t data)
void IRCOMM_setRC5DataReadyHandler(void (*rc5Handler)(RC5data_t))
rc5data.device
rc5data.toggle_bit
rc5data.key_code
4.6.8. Antriebs Funktionen
void task_motionControl(void)
void moveAtSpeed(uint8_t desired_speed_left, uint8_t desired_speed_right)
getDesSpeedLeft()
getDesSpeedRight()
getLeftSpeed()
getRightSpeed()
void changeDirection(uint8_t dir)
FWD - für Vorwärts (FWD ist eine Abkürzung für „Forwards“)
BWD – für Rückwärts (BWD ist eine Abkürzung für „Backwards“)
LEFT – nach links drehen
RIGHT – nach rechts drehen
getDirection()
void move(uint8_t desired_speed, uint8_t dir, uint16_t distance,
uint8_t blocking)
DIST_MM(DISTANCE)
uint8_t isMovementComplete(void)
void stop(void)
void rotate(uint8_t desired_speed, uint8_t dir, uint16_t angle,
uint8_t blocking)
4.6.9. task_RP6System()
void task_RP6System(void)
task_ADC();
task_ACS();
task_bumpers();
task_motionControl();
4.6.10. I²C Bus Funktionen
4.6.10.1. I²C Slave
void I2CTWI_initSlave(uint8_t address)
I2CTWI_readRegisters
I2CTWI_writeRegisters
I2CTWI_genCallCMD
I2CTWI_readBusy
I2CTWI_writeBusy
4.6.10.2. I²C Master
void I2CTWI_transmitByte(uint8_t adr, uint8_t data)
void I2CTWI_transmit2Bytes(uint8_t adr, uint8_t data1, uint8_t data2) ???????????????
void I2CTWI_transmit3Bytes(uint8_t adr, uint8_t data1, uint8_t data2) ???????????????
void I2CTWI_transmitBytes(uint8_t targetAdr, uint8_t *msg, uint8_t numberOfBytes)
I2CTWI_BUFFER_SIZE
I2CTWI_isBusy()
uint8_t I2CTWI_readByte(uint8_t targetAdr)
void I2CTWI_readBytes(uint8_t targetAdr, uint8_t * messageBuffer, uint8_t numberOfBytes);
void task_I2CTWI(void)
void I2CTWI_requestDataFromDevice(uint8_t requestAdr, uint8_t requestID, uint8_t numberOfBytes)
void I2CTWI_getReceivedData(uint8_t *msg, uint8_t msgSize)
void I2CTWI_setRequestedDataReadyHandler(void (*requestedDataReadyHandler)(uint8_t))
void I2CTWI_setTransmissionErrorHandler(void(*transmissionErrorHandler)(uint8_t))
Da ein writeFloat(...), z.B. zur Ausgabe der Akkuspannung oder von Messwerten fehlt, hier eine Ergänzung:
Code:void float2string(float value, int decimal, char* valuestring)
{
int neg = 0;
char tempstr[20];
int i = 0;
int j = 0;
int c;
long int val1, val2;
char* tempstring;
tempstring = valuestring;
if (value < 0){ neg = 1; value = -value; }
for (j=0; j < decimal; j++) {value = value * 10;}
val1 = (value * 2);
val2 = (val1 / 2) + (val1 % 2);
while (val2 !=0){
if ((decimal > 0) && (i == decimal)){
tempstr[i] = (char)(0x2E);
i++;
}
else{
c = (val2 % 10);
tempstr[i] = (char) (c + 0x30);
val2 = val2 / 10;
i++;
}
}
if (neg){
*tempstring = '-';
tempstring++;
}
i--;
for (;i > -1;i--){
*tempstring = tempstr[i];
tempstring++;
}
*tempstring = '\0';
}
float Ubatt = 10.21; // Beispiel
char text[6];
float2string(Ubatt,2,text); // 2 Dezimalstellen
writeString(text); // o.ä. z.B. auf das Display
@radbruch:
Hallo mic,
zwei Fragen zu deiner Doku:
1. Warum fängt die Doku bei 4.6.1 an oder was kommt davor?
2. Warum hast du bei diesen Funktionen ...
void I2CTWI_transmit2Bytes(uint8_t adr, uint8_t data1, uint8_t data2) ???????????????
... und ...
void I2CTWI_transmit3Bytes(uint8_t adr, uint8_t data1, uint8_t data2) ???????????????
... die vielen ??? drangehängt?
Gruß Dirk
Hallo Dirk
zu 1.: Das Kapitel 4.6 in der Dokumentation beschreibt die Funktionen der Library. Die Nummern sind der Bezug zur Doku, die wollte ich für meine geplante HTML-Kurzreferenz nutzen. Im Moment zeigen sie nur an, wo man die jeweilige Funktion in der Doku findet.
zu 2.: Weil bei I2CTWI_transmit3Bytes() ein Parameter fehlte. Meine Liste habe ich auf Basis der vorläufigen Test-Doku erstellt, dieser Fehler dürfte in der aktuellen Version (vom 17.7.07) beseitigt sein.
Meine Liste ist ja noch keine echte Doku, es soll mal eine werden. Ich habe sie erstellt um mir selbst einen Überblick über die Funktionien zu verschaffen. Dies sind auch nur die in der Doku beschriebenen Funktionen. Es gibt noch unzählige andere, die super (aber eben in englisch) erklärt, in den einzelnen Dateien der Library enthalten sind. Diese sollte man als RP6-Anfänger aber besser nicht verwenden, weil sie auf die Basics, gebildet durch das Task-System, der Funktionen zugreifen. Da sollte man dann schon genau wissen, was man tut.
Bei dieser Gelegenheit ziehe ich mal den Hut vor Dominik (aka SlyD) der das alles entwickelt und geschrieben hat. Bild hier
Gruß
mic
Hallo mic,
... der fehlt in meiner Lib nicht. Die Lib ist ok!Zitat:
Weil bei I2CTWI_transmit3Bytes() ein Parameter fehlte.
Gruß Dirk