int main(void) { initRobotBase(); setLEDs(0b111111); mSleep(500); setLEDs(0b000000); writeString_P("\nJust a simple counter program\n\n"); uint16_t counter = 0; while(true) { timer = 0; if(counter < 100) { writeString_P("Counter: "); writeInteger(counter, BIN); writeString_P("(BIN) | "); writeInteger(counter, OCT); writeString_P("(OCT) | "); writeInteger(counter, DEC); writeString_P("(DEC) | "); writeInteger(counter, HEX); writeString_P("(HEX) "); } else { writeString_P("Counter L: "); writeIntegerLength(counter, BIN, 16); writeString_P("(BIN) | "); writeIntegerLength(counter, OCT, 6); writeString_P("(OCT) | "); writeIntegerLength(counter, DEC, 6); writeString_P("(DEC) | "); writeIntegerLength(counter, HEX, 4); writeString_P("(HEX) "); } writeChar(' '); writeInteger(timer,DEC); writeString(" *100us"); writeChar('\n'); counter++; mSleep(100); } return 0; }
/** * A third counter, with different interval (1.2s) and * hexadecimal output format. */ void task_counter3(void) { static uint8_t counter2; if(getStopwatch4() > 1200) // 1200ms = 1.2s { writeString_P("\t\t CNT3 : "); writeIntegerLength(counter2, HEX, 2); writeChar('\n'); counter2++; setStopwatch4(0); // Reset stopwatch } }
void OpenLoopController(int16_t alpha,uint16_t pho, int16_t beta) { motioncomplete = 1; uint8_t dir; uint16_t angle = 0; if (abs(alpha) > 0){ dir = alpha < 0 ? LEFT : RIGHT; angle = abs(alpha); rotate(60, dir,angle, true); } writeIntegerLength(pho, DEC,16); move(80, FWD, DIST_MM(pho*10),true); beta = -alpha; if (abs(beta) > 0){ dir = beta < 0 ? LEFT : RIGHT; angle = abs(beta); rotate(60, dir, angle, true); } //VERY VERY BAD AS IT IS A OPEN LOOP CONTROLLER motioncomplete = 0; }
int main(void) { initRP6Control(); // Always call this first! The Processor will not work // correctly otherwise. bars(2); writeString_P("\n\nRP6Control Selftest!\n\n"); bars(2); setLEDs(0b1111); mSleep(50); initLCD(); showScreenLCD("################", "################"); mSleep(400); showScreenLCD("################", "################"); showScreenLCD("RP6Control M32", "SELFTEST"); mSleep(1000); uint8_t keynumber = 0; while(keynumber < 6) { uint8_t key = checkReleasedKeyEvent(); if(key == keynumber) { keynumber++; showScreenLCD("PRESS BUTTON", "NUMBER "); writeIntegerLCD(keynumber,DEC); setLEDs(0b0000); writeString_P("### PRESS BUTTON NUMBER "); writeInteger(keynumber,DEC); writeString_P("!\n"); } } showScreenLCD("Testing", "BEEPER & LEDS"); mSleep(250); // Play a sound to indicate that our program starts: sound(50,50,100); setLEDs(0b0000); sound(80,50,100); setLEDs(0b0001); sound(100,50,100);setLEDs(0b0010); sound(120,50,100);setLEDs(0b0100); sound(140,50,100);setLEDs(0b1000); sound(160,50,100);setLEDs(0b1001); sound(180,50,100);setLEDs(0b1011); sound(200,50,100);setLEDs(0b1111); mSleep(400); setLEDs(0b0000); showScreenLCD("Testing", "EERPOM"); test(1); writeString_P("\nEEPROM TEST\n"); writeString_P("\nErasing 250 Bytes...\n"); uint8_t cnt; for(cnt = 0; cnt < 250; cnt++) { SPI_EEPROM_writeByte(cnt, 0xFF); while(SPI_EEPROM_getStatus() & SPI_EEPROM_STAT_WIP); } writeString_P("...Done!\nWriting 250 Bytes to EEPROM:\n"); for(cnt = 0; cnt < 250; cnt++) { writeIntegerLength(cnt, DEC, 3); SPI_EEPROM_writeByte(cnt, cnt); while(SPI_EEPROM_getStatus() & SPI_EEPROM_STAT_WIP); writeChar(','); if(cnt % 10 == 0) writeChar('\n'); } mSleep(400); setLEDs(0b1111); writeString_P("\nReading and verifying:\n"); for(cnt = 0; cnt < 250; cnt++) { uint8_t result = SPI_EEPROM_readByte(cnt); if(result != cnt) { writeString_P("\nEEPROM VERIFY ERROR!!!! EEPROM DAMAGED!!!\n"); writeString_P("Data read: "); writeInteger(result,DEC); writeString_P(", should be: "); writeInteger(cnt,DEC); writeChar('\n'); errors++; } else writeIntegerLength(result,DEC,3); writeChar(','); if(cnt % 10 == 0) writeChar('\n'); } writeString_P("\nErasing 250 Bytes...\n"); for(cnt = 0; cnt < 250; cnt++) { SPI_EEPROM_writeByte(cnt, 0xFF); while(SPI_EEPROM_getStatus() & SPI_EEPROM_STAT_WIP); } mSleep(400); setLEDs(0b0000); writeString_P("\nEEPROM TEST DONE!\n"); writeString_P("\nI2C TWI TEST:\n"); showScreenLCD("I2C TWI", "TEST"); I2CTWI_initMaster(100); I2CTWI_setTransmissionErrorHandler(I2C_transmissionError); uint8_t runningLight = 1; for(cnt = 0; cnt < 24; cnt++) { writeIntegerLength(cnt,DEC,3); writeChar(':'); writeIntegerLength(runningLight,DEC,3); writeChar(','); writeChar(' '); I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, 3, runningLight); I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 29); uint8_t result = I2CTWI_readByte(I2C_RP6_BASE_ADR); if(result != runningLight) { writeString_P("\nTWI TEST ERROR!\n"); errors++; } runningLight <<= 1; if(runningLight > 32) runningLight = 1; if((cnt+1) % 6 == 0) writeChar('\n'); mSleep(100); } I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, 3, 0); writeString_P("\nTWI TEST DONE!\n"); writeString_P("\nMicrophone Test\n"); writeString_P("Hit the Microphone three times with your finger!\n"); showScreenLCD("MIC TEST:", ""); #define PREPARE 1 #define WAIT 2 uint8_t state = PREPARE; startStopwatch2(); while(true) { static uint8_t peak_count = 3; if(state == PREPARE) { if(getStopwatch2() > 250) { setCursorPosLCD(1, 6); writeIntegerLengthLCD( peak_count, DEC, 1); dischargePeakDetector(); state = WAIT; setStopwatch2(0); } } else if(state == WAIT) { uint8_t key = checkReleasedKeyEvent(); if(key) { break; } if(getStopwatch2() > 50) { uint16_t tmp = getMicrophonePeak(); if(tmp > 4) { externalPort.LEDS = 0; uint16_t i; uint8_t j; for(i = 0, j = 2; i < tmp; i+= 40) { if(i < 40) { externalPort.LEDS++; } else { externalPort.LEDS <<=1; externalPort.LEDS++; } } outputExt(); if(tmp > 120) { state = PREPARE; peak_count--; } if(peak_count == 0) break; } else setLEDs(0b0000); setStopwatch2(0); } } } writeString_P("\nMICROPHONE TEST DONE!\n"); showScreenLCD("ALL TESTS", "DONE!"); writeString_P("\n\n\n\n"); bars(2); writeString_P("\n\nALL TESTS DONE!\n\n"); if(errors) { bars(4); writeString_P("\nERROR ERROR ERROR ERROR ERROR ERROR ERROR\n"); writeString_P("\nATTENTION: TESTS FINISHED WITH ERRORS!!!\n"); writeString_P("PLEASE CHECK RP6-M32 ASSEMBLY!!!\n\n"); bars(4); writeString_P("\n\n"); } // Now we just show a running light... startStopwatch1(); uint8_t runLEDs = 1; uint8_t dir = 0; while(true) { if(getStopwatch1() > 100) { setLEDs(runLEDs); if(dir == 0) runLEDs <<= 1; else runLEDs >>= 1; if(runLEDs > 7 ) dir = 1; else if (runLEDs < 2 ) dir = 0; setStopwatch1(0); } }
int main(void) { initRobotBase(); // Always call this first! The Processor will not work // correctly otherwise. setLEDs(0b111111); // Turn all LEDs on mSleep(500); // delay 500ms setLEDs(0b000000); // All LEDs off // Write a text message to the UART: writeString_P("\nJust a simple counter program\n\n"); // Define a counting variable: uint16_t counter = 0; // --------------------------------------- // Main loop: while(true) { timer = 0; // initialize universal timer variable for measuring how much // time the output required! (this is not directly related to this // example - it was added as a small example for the new System // timer added in Version 1.3 of the RP6Lib) // The timer has a resolution of 100µs and runs all the time. // Now we check what value the counter has, ... if(counter < 100) // ... is it smaller than 100? { // Yes --> output the Counter value with the "writeInteger" // function: writeString_P("Counter: "); writeInteger(counter, BIN); writeString_P("(BIN) | "); writeInteger(counter, OCT); writeString_P("(OCT) | "); writeInteger(counter, DEC); writeString_P("(DEC) | "); writeInteger(counter, HEX); writeString_P("(HEX) "); } else // ... or is it greater than or equal to 100? { // No, the counter >= 100 --> use "writeIntegerLength" instead. writeString_P("Counter L: "); writeIntegerLength(counter, BIN, 16); writeString_P("(BIN) | "); writeIntegerLength(counter, OCT, 6); writeString_P("(OCT) | "); writeIntegerLength(counter, DEC, 6); writeString_P("(DEC) | "); writeIntegerLength(counter, HEX, 4); writeString_P("(HEX) "); } writeChar(' '); writeInteger(timer,DEC); // display time (in 100µs) we needed for this output! // You will directly see that the time increases when // the output gets longer. writeString(" *100us"); writeChar('\n'); // New Line counter++; // Increment counter mSleep(100); // delay 200ms = 0.2s } // End of main loop! // --------------------------------------- return 0; }