Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 16:d9c8e60bfdb1, committed 2018-12-15
- Comitter:
- hyunsungkim
- Date:
- Sat Dec 15 19:34:49 2018 +0000
- Branch:
- RF24_library_test_tx
- Parent:
- 15:07f67c448042
- Commit message:
- before adjusting communication timing
Changed in this revision
slave.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/slave.cpp Sat Dec 01 19:45:24 2018 +0000 +++ b/slave.cpp Sat Dec 15 19:34:49 2018 +0000 @@ -2,13 +2,6 @@ #include "nRF24L01P.h" #include "beep.h" -#define PING 1 -#define PONG 2 -#define PC 3 - -#define ROLE PONG -#define ID 1 - #define nrf_CE D2 #define nrf_CSN A3 #define spi_SCK D13 @@ -16,12 +9,20 @@ #define spi_MISO D12 #define spi_IRQ D4 +#define NRF_TRANSMIT 1 +#define NRF_RECEIVE 2 + +#define NRF_ID 7 + #define TRANSFER_SIZE 15 nRF24L01P nrf(spi_MOSI, spi_MISO, spi_SCK, nrf_CSN, nrf_CE, spi_IRQ); // mosi, miso, sck, csn, ce, irq +uint64_t rxAddr=0xDEADBEEF0F; +uint64_t txAddr=0xDEADBEEF00; + Serial pc(USBTX, USBRX); -Serial lidar(D1, D0); +//Serial lidar(D1, D0); PwmOut motor_RA(D9); PwmOut motor_RB(D10); @@ -34,99 +35,62 @@ AnalogIn batteryCheck(A0); void beepStart(); -void endBeep(); -void initNRF(int role); void dumpRFInfo(); void turnWheel(int rspd, int lspd); -void getPayload(int id, unsigned int count, int lspeed, int rspeed, char* txData); - +void initNRF(int mode, int msg_len); -int main() { - int role = ROLE; - int id=0; - char txData[TRANSFER_SIZE]; - int txDataCnt = 0; +int main() +{ char rxData[TRANSFER_SIZE]; int rxDataCnt = 0; - - + + initNRF(NRF_RECEIVE, TRANSFER_SIZE); int inByteCnt = 0; - char buf[TRANSFER_SIZE+3]; - + beepStart(); pc.baud(115200); - initNRF(role); // dumpRFInfo(); - + led_G = 1; + led_R = 1; + while(1) { - switch(role) { - case PING: - int id = 1; - int lspeed=-40; - int rspeed=50; - txDataCnt++; - getPayload(id, txDataCnt, lspeed, rspeed, txData); - pc.printf("PING:%s\r\n", txData); - nrf.write(NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE); - wait(0.2); - break; - case PONG: - if ( nrf.readable() ) { - rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, TRANSFER_SIZE); - if(rxData[0] =='$') { - int id = (rxData[1]-'0')*10+(rxData[2]-'0'); - int dataCount = (rxData[3]-'0')*10000+(rxData[4]-'0')*1000+(rxData[5]-'0')*100+(rxData[6]-'0')*10+(rxData[7]-'0'); - int rspd = (rxData[9]-'0')*10+(rxData[10]-'0'); - int lspd = (rxData[12]-'0')*10+(rxData[13]-'0'); - if(rxData[8]=='-') - rspd = -rspd; - if(rxData[11]=='-') - lspd = -lspd; - - if(true) { - turnWheel(rspd, lspd); - printf("[%d] RxData: %s, rspd: %d, rspd: %d\r\n", id, rxData, rspd, lspd); - char buf[] = "JUSTDUMMYREPLY"; - wait(0.005); - nrf.setTxAddress(0xDEADBEEF00); - nrf.setTransferSize( TRANSFER_SIZE ); - nrf.setTransmitMode(); - nrf.enable(); - nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE); - - - nrf.setRxAddress(0xDEADBEEF0F); - nrf.powerUp(); - nrf.setTransferSize( TRANSFER_SIZE ); - nrf.setReceiveMode(); - nrf.enable(); - } - } else { - printf("Invalid Data\r\n"); + if ( nrf.readable() ) { + rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, TRANSFER_SIZE); + if(rxData[0] =='$') { + int id = (rxData[1]-'0')*10+(rxData[2]-'0'); + int dataCount = (rxData[3]-'0')*10000+(rxData[4]-'0')*1000+(rxData[5]-'0')*100+(rxData[6]-'0')*10+(rxData[7]-'0'); + int rspd = (rxData[9]-'0')*10+(rxData[10]-'0'); + int lspd = (rxData[12]-'0')*10+(rxData[13]-'0'); + if(rxData[8]=='-') + rspd = -rspd; + if(rxData[11]=='-') + lspd = -lspd; + + if(id==NRF_ID) { + turnWheel(rspd, lspd); + printf("[%d] RxData: %s, rspd: %d, rspd: %d\r\n", id, rxData, rspd, lspd); + char buf[] = "JUSTDUMMYREPLY"; + wait(0.005); + nrf.setTxAddress(0xDEADBEEF00); + nrf.setTransferSize( TRANSFER_SIZE ); + nrf.setTransmitMode(); + nrf.enable(); + nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE); + + nrf.setRxAddress(0xDEADBEEF0F); + nrf.powerUp(); + nrf.setTransferSize( TRANSFER_SIZE ); + nrf.setReceiveMode(); + nrf.enable(); } + } else { + printf("Invalid Data\r\n"); } - break; - case PC: - while(pc.readable()) { - char inByte = pc.getc(); - if(inByteCnt > TRANSFER_SIZE+2) { - printf("Data size overflow!\r\n"); - inByteCnt = 0; - break; - } else if(inByte == '\0') { - buf[inByteCnt] = '\0'; - printf("Command: %s\r\n", buf); - nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE); - inByteCnt=0; - } else { - buf[inByteCnt++] = inByte; - } - } - break; } } } + void turnWheel(int rspd, int lspd) { if(rspd>0) { @@ -156,41 +120,30 @@ printf( "nRF24L01+ RX Address : 0x%010llX\r\n", nrf.getRxAddress() ); } -void initNRF(int role) +void initNRF(int mode, int msg_len) { - if(role == PING || role == PC) { - nrf.setTxAddress(0xDEADBEEF0F); - nrf.powerUp(); - nrf.setTransferSize( TRANSFER_SIZE ); - nrf.setTransmitMode(); - nrf.enable(); - } else { - nrf.setRxAddress(0xDEADBEEF0F); - nrf.powerUp(); - nrf.setTransferSize( TRANSFER_SIZE ); - nrf.setReceiveMode(); - nrf.enable(); +#ifndef NRF_FIRST_INIT +#define NRF_FIRST_INIT + nrf.setTxAddress(txAddr); + nrf.setRxAddress(rxAddr); + nrf.powerUp(); +#endif + switch(mode) { + case NRF_TRANSMIT: + nrf.setTransferSize(msg_len); + nrf.setTransmitMode(); + nrf.enable(); + break; + case NRF_RECEIVE: + nrf.setTransferSize(msg_len); + nrf.setReceiveMode(); + nrf.enable(); + break; + default: + printf("Invalid NRF Mode\r\n"); } } -void getPayload(int id, unsigned int count, int lspeed, int rspeed, char* txData) -{ - *(txData+0) = '$'; - *(txData+1) = id/10+'0'; - *(txData+2) = id%10+'0'; - *(txData+3) = count/10000+'0'; - *(txData+4) = count/1000%10+'0'; - *(txData+5) = count/100%10+'0'; - *(txData+6) = count/10%10+'0'; - *(txData+7) = count%10+'0'; - *(txData+8) = lspeed>0?'+':'-'; - *(txData+9) = abs(lspeed)/10+'0'; - *(txData+10) = abs(lspeed)%10+'0'; - *(txData+11) = rspeed>0?'+':'-'; - *(txData+12) = abs(rspeed)/10+'0'; - *(txData+13) = abs(rspeed)%10+'0'; - *(txData+14) = '\0'; -} /* xxyyyyyabbcddn