Hey Leute,
Endlich hab ich meinen RP6 bekommen, allerdings habe ich keine Kenntnisse über das Programmieren. Und die Anleitung + Beispielprogramme helfen mir auch nicht so ganz weiter.
Gibt es ein Tutorial oder einige Beispielprogramme auf Deutsch ?
Hey Leute,
Endlich hab ich meinen RP6 bekommen, allerdings habe ich keine Kenntnisse über das Programmieren. Und die Anleitung + Beispielprogramme helfen mir auch nicht so ganz weiter.
Gibt es ein Tutorial oder einige Beispielprogramme auf Deutsch ?
Hallo,
allgemein zur C Programmierung (das wird ja das eigentliche Problem sein) sind einige Tutorials in der Anleitung angegeben!
Da steht auch dabei das die Einführung in die C Programmierung nur ein Crashkurs und kein komplettes Buch ist
Übrigens - es kommt höchst selten vor das jemand (ohne Vorkenntnisse) die C Programmierung innherhalb von einem Tag durchschaut - wenn man kein Genie ist geht das nicht von heute auf morgen da muss Du Dir schon etwas mehr Zeit nehmen.
MfG,
SlyD
Ja aber wenn ich mir diese normalen Tutorials ansehe verstehe ich zwar das Programmieren ( mehr oder weniger) , nur verstehe ich nicht wie ich das auf meinen RP6 übertragen soll.
Da geht es ja darum das er z.B. gerade aus fährt.
Gibt es eine Art Befehlsliste ? Wo z.B steht MotorSpeed = Motorgeschwindigkeit ( also keine übersetzung, sondern eine erklärung der Funktion )
Ab Seite 97 werden die Motorfunktionen erläutert.
Mit ein paar simplen Beispielen.
Erweiterte Beispiele gibts dann in den Beispielprogrammen.
Die solltest Du in genau der Reihenfolge wie angegeben durchgehen. Da wird nach und nach alles eingeführt - aber gut desch isch allesch auf Englisch kommentiert - so wie es beim Softwareentwickeln üblich ist
(wäre blöd zwei Versionen zu pflegen)
Übrigens in der Library "RP6RobotBaseLib.c" stehen einige zustätzliche Kommentare. Eine "Befehlsliste" wäre dann wohl die zugehörige .h Header Datei.
Ich meine irgendwann hier im Forum hätte auch mal jemand was gepostet - musst Du evtl. mal die Suchfunktion verwenden.
MfG,
SlyD
Naja, du kannst dir dazu die Beispielprogramme ansehen, da ist eigentlich alles super ausfühlrich dokumentiert.
Ansonsten kann ich auch nur noch auf die Anleitung verweisen, nach dem Crashkurs werden doch auch die meisten Befehle erörtert.
Einfach mal das simpelste Beispielprgramm nehmen und dann den Code dazu.
Dann zugucken was der RP6 macht und verstehen warum.
Hallo
Um mir einen Überblick zu verschaffen hatte ich mir eine Liste mit allen Funktionen und den Querverweis zur betreffenden Stelle in der Library gemacht:
(Liste aus https://www.roboternetz.de/phpBB2/ze...=300358#300358)Code: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, uint8_t data3) 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))
Viel Spaß und Erfolg.
Gruß
mic
[Edit]
Eine noch viel bessere Liste gibt es hier:
https://www.roboternetz.de/phpBB2/ze...=410780#410780
Das PDF aus diesem Thread:
https://www.roboternetz.de/phpBB2/download.php?id=15353
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
So ich hab mich mal etwas in das Thema eingelesen und mir aus der Befehlsliste ein Programm zusammengebastelt das folgendes machen soll :
- Gerade aus fahren
- Wenn ein Wiederstand kommt abbiegen und weiterfahren
Doch der Compiler will es nicht speichern wegen folgendem Fehler:
RP6Base_Move_01.c:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'RP6RobotBaseLib'
RP6Base_Move_01.c:20:2: warning: no newline at end of file
Mein Programm sieht so aus :
include RP6RobotBaseLib.h
int main initRobotBase{
void powerON(void)
void task_motionControl(void)
void task_Bumpers(void)
if uint8_t getBumperLeft(void)
uint8_t getBumperRight(void)
void moveAtSpeed(90,40)
else
void moveAtSpeed(100,100)
return 0
}
Also DA hilft dann aber wirklich nur das gute alte C Tutorial das hat nix mit der RP6 Funktionbibliothek zu tun.
Da sind sehr viele Fehler drin - (Semikolon, Funktionsaufrufe, Endlosschleife nicht vorhanden, #include, ... ) - bitte arbeite mindestens den Crashkurs in der RP6 Anleitung von vorne bis hinten durch (nicht nur grob überfliegen).
OK gut funktionieren würde es dann auch noch nicht - versuch doch erstmal die vorhandenen Beispielprogramme nur zu modifizieren das ist am Anfang erstmal einfacher weil man ein funktionierendes Grundgerüst hat.
MfG,
SlyD
Gut ich werd das morgen mal versuchen, danke.
Hab jetzt mein erstes Programm zum laufen gebracht ( einfaches geradeaus fahren )
Jetzt wollte ich das ganze steigern und hab das ganze so umgeschrieben das er bei einem Widerstand zurückstoßen SOLLTE und weiterfahren SOLLTE.
Und was tut er ? Nichts.
Er sollte eigentlich fahren, gegen etwas stoßen, zurückfahren ( 20cm) und dann wieder gerade aus fahren.
Hier das Programm :
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); setLEDs(0b111111); mSleep(1500); setLEDs(0b100001); powerON(); while(true); { move(90,FWD,DIST_CM(50),true); } void bumpersStateChanged(void) { if(bumper_left || bumper_right) { moveAtSpeed(0,0); setLEDs(0b010000); move(90,BWD,DIST_CM(20),true); }} return 0; }
Lesezeichen