// functions void ir_sendBaseStation(void) { if(lees<schrijf){ I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 27); transmit_buffer[0]= SPI_EEPROM_readByte(lees); transmit_buffer[1]= SPI_EEPROM_readByte(lees+1); transmit_buffer[2]= SPI_EEPROM_readByte(lees+2); transmit_buffer[3]= SPI_EEPROM_readByte(lees+3); mSleep(10); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 1, 9); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[0]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[1]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[2]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[3]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); lees = (lees + 8); }else if(lees == schrijf){ I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 27); transmit_buffer[0]= SPI_EEPROM_readByte(lees); transmit_buffer[1]= SPI_EEPROM_readByte(lees+1); transmit_buffer[2]= SPI_EEPROM_readByte(lees+2); transmit_buffer[3]= SPI_EEPROM_readByte(lees+3); mSleep(10); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 1, 9); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[0]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[1]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[2]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, transmit_buffer[3]); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); mSleep(2000); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 2, 50); I2CTWI_transmit2Bytes(I2C_RP6_BASE_ADR, 0, 10); lees = (lees + 8); } }
void sendByteAndReceiveByte(void) { if(getStopwatch1() > 500) { I2CTWI_transmitByte(ARDUINO_WRITE_ADDRESS, speed); //writing the speed of rp6 uint8_t someByteToRead = 0; someByteToRead = I2CTWI_readByte(ARDUINO_READ_ADDRESS); //read the maximum speed writeInteger(someByteToRead, DEC); getSpeedLimit(someByteToRead); setStopwatch1(0); } }
/** * Here we demonstrate how to read a few specific registers. * It is just the same as above, but we only read 4 registers and * start with register Number 13. * We also show how to combine values from high and low registers * back together to a 16 Bit value. */ void readLightSensors(void) { uint8_t lightSens[4]; I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 13); // Start with register 13 (LSL_L)... I2CTWI_readBytes(I2C_RP6_BASE_ADR, lightSens, 4); // and read all 4 registers up to // register Number 16 (LSR_H) ! writeString_P_WIFI("Light Sensor registers:\n"); writeString_P_WIFI(" | LSL_L:"); writeInteger_WIFI(lightSens[0], DEC); writeString_P_WIFI(" | LSL_H:"); writeInteger_WIFI(lightSens[1], DEC); writeString_P_WIFI(" | LSR_L:"); writeInteger_WIFI(lightSens[2], DEC); writeString_P_WIFI(" | LSR_H:"); writeInteger_WIFI(lightSens[3], DEC); writeString_P_WIFI("\n\n Light Sensor Values:"); writeString_P_WIFI(" | LSL:"); writeInteger_WIFI(lightSens[0] + (lightSens[1]<<8), DEC); writeString_P_WIFI(" | LSR:"); writeInteger_WIFI(lightSens[2] + (lightSens[3]<<8), DEC); writeChar_WIFI('\n'); }
/** * This function reads ALL registers available in the standard I2C Bus Slave * Example program for the Robot Base and outputs their values on the serial interface. * You will see a lot of zeros when the Motors are not running. The main values that are not * zero are the two Light Sensors and the two free ADC Channels. */ void readAllRegisters(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 0); // Start with register 0... I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 30); // and read all 30 registers up to // register Number 29 ! // Now we output the Data we have just read on the serial interface: writeString_P_WIFI("\nREADING ALL RP6 REGISTERS:"); uint8_t i = 0; for(i = 0; i < 30; i++) { if(i % 8 == 0) // add some newline chars otherwise everything writeChar_WIFI('\n'); // is printed on ONE single line... else writeString_P_WIFI(" | "); writeChar_WIFI('#'); writeIntegerLength_WIFI(i,DEC,2); writeChar_WIFI(':'); writeIntegerLength_WIFI(RP6data[i],DEC,3); } writeChar_WIFI('\n'); }
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); } }
void ir_receiveBaseStation(void) { uint8_t tijdelijk; writeString_P("aap!\n"); while ((personX == 0xFF) || (personY == 0xFF) || (startX == 0xFF) || (startY == 0xFF)) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 27); tijdelijk = I2CTWI_readByte(I2C_RP6_BASE_ADR); writeString_P("ADDR: "); writeInteger((int16_t) tijdelijk, DEC); I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 28); tijdelijk = I2CTWI_readByte(I2C_RP6_BASE_ADR); writeString_P(" DATA: "); writeInteger((int16_t) tijdelijk, DEC); writeString_P("\n"); mSleep(100); // implement device bit 0 - device bit - code // Oops! i did it again (van 44 naar 9) if (tijdelijk >= 48 && tijdelijk <= 56) { startY = tijdelijk - 48; } else if (tijdelijk >= 32 && tijdelijk <= 38) { startX = tijdelijk - 32; } else if (tijdelijk >= 16 && tijdelijk <= 24) { personY = tijdelijk - 16; } else if (tijdelijk <= 6) { personX = tijdelijk; } // for now, just put it on the screen clearLCD(); setCursorPosLCD(0, 0); writeCharLCD('X'); setCursorPosLCD(0, 2); writeIntegerLCD(startX, DEC); setCursorPosLCD(0, 10); writeCharLCD('Y'); setCursorPosLCD(0, 12); writeIntegerLCD(startY, DEC); setCursorPosLCD(1, 0); writeCharLCD('X'); setCursorPosLCD(1, 2); writeIntegerLCD(personX, DEC); setCursorPosLCD(1, 10); writeCharLCD('Y'); setCursorPosLCD(1, 12); writeIntegerLCD(personY, DEC); } }