현성 김
/
181202_Castone_design_slave
just a messy code..
Diff: slave.cpp
- Branch:
- RF24_library_test_tx
- Revision:
- 16:d9c8e60bfdb1
- Parent:
- 15:07f67c448042
--- 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