hallo,
folgender code (abgespeckte version der RP6Control_MultiIO_03.c)
- der SRF02 hängt direkt an der multiIO, steckplatz 1, der code ist entsprechend angepasst, die zeilen für radar und sharps in der "RP6Control_LFSBumperLib.h" sind auskommentiertCode:/*****************************************************************************/ // Includes: #include "RP6ControlLib.h" // The RP6 Control Library. // Always needs to be included! #include "RP6I2CmasterTWI.h" // Include the I2C-Bus Master Library /*****************************************************************************/ /*****************************************************************************/ // Include our new "RP6Control LFS Bumper library": // (This is the library for accessing the LFS and Bumper Board!) #include "RP6Control_LFSBumperLib.h" /*****************************************************************************/ void writeDouble(double number, uint8_t width, uint8_t prec) {char buffer[width + 1]; dtostrf(number, width, prec, &buffer[0]); writeString(&buffer[0]); } /*****************************************************************************/ // I2C Error handler void I2C_transmissionError(uint8_t errorState) { writeString_P("\nI2C ERROR --> TWI STATE IS: 0x"); writeInteger(errorState, HEX); writeChar('\n'); } /*****************************************************************************/ // Main function - The program starts here: int main(void) { initRP6Control(); // Always call this first! The Processor will not // work correctly otherwise. initLCD(); // Initialize the LC-Display (LCD) // Always call this before using the LCD! writeString_P("\n\nRP6Control Multi IO Selftest 3!\n"); // IMPORTANT: I2CTWI_initMaster(100); // Initialize the TWI Module for Master operation // with 100kHz SCL Frequency // Register the event handler: I2CTWI_setTransmissionErrorHandler(I2C_transmissionError); uint16_t distsrf_1; startStopwatch1(); // IMPORTANT: lfsbumper_init(); // LFS & Bumper init!!! //setServoPower(1); // Servo power ON! while(true) { if(getStopwatch1() > 1000) // 1s { // SRF02 sensors test: distsrf_1 = SRF02_measure(CH_SRF02_1, MODE_CM); writeString("\nSRF02 SENSOR_1 ->"); writeString("\nDistance: "); writeInteger(distsrf_1, DEC); mSleep(500); setStopwatch1(0); } task_I2CTWI(); } return 0; }
- der RP6 steht ca. 50 cm von der wand entfernt, der SRF ist auf einem servo montiert, so dass ich ihn drehen kann ohne den roby bewegen zu müssen
- der code wird ohne fehlermeldungen kompiliert
- flashe und starte ich ihn, werden als abstand 34cm angezeigt ( es sind gemessen 50cm)
- verändere ich den code von: "distsrf_1 = SRF02_measure(CH_SRF02_1, MODE_CM);" in: "............._INCH" wird nach kompilieren, flashen und starten 18 inch angezeit, (18x2,5=ca.45)
- ändere ich den code wieder zurück in "........_CM", werden nach kompilieren, flaschen und starten 51cm angezeigt. Damit wäre ich sehr zufrieden, es bleibt aber nur bis zum AUS- und Einschalten, dann sind es wieder 34cm.
das gleiche passiert mit der original "RP6Control_MultiIO_03.c"....
ich verstehe es nicht, kann mir da bitte jemand helfen was da schiefläuft?







Zitieren

Lesezeichen