현성 김
/
181202_Castone_design_slave
just a messy code..
slave.cpp@16:d9c8e60bfdb1, 2018-12-15 (annotated)
- Committer:
- hyunsungkim
- Date:
- Sat Dec 15 19:34:49 2018 +0000
- Branch:
- RF24_library_test_tx
- Revision:
- 16:d9c8e60bfdb1
- Parent:
- 15:07f67c448042
before adjusting communication timing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hyunsungkim | 15:07f67c448042 | 1 | #include "mbed.h" |
hyunsungkim | 15:07f67c448042 | 2 | #include "nRF24L01P.h" |
hyunsungkim | 15:07f67c448042 | 3 | #include "beep.h" |
hyunsungkim | 15:07f67c448042 | 4 | |
hyunsungkim | 15:07f67c448042 | 5 | #define nrf_CE D2 |
hyunsungkim | 15:07f67c448042 | 6 | #define nrf_CSN A3 |
hyunsungkim | 15:07f67c448042 | 7 | #define spi_SCK D13 |
hyunsungkim | 15:07f67c448042 | 8 | #define spi_MOSI D11 |
hyunsungkim | 15:07f67c448042 | 9 | #define spi_MISO D12 |
hyunsungkim | 15:07f67c448042 | 10 | #define spi_IRQ D4 |
hyunsungkim | 15:07f67c448042 | 11 | |
hyunsungkim | 16:d9c8e60bfdb1 | 12 | #define NRF_TRANSMIT 1 |
hyunsungkim | 16:d9c8e60bfdb1 | 13 | #define NRF_RECEIVE 2 |
hyunsungkim | 16:d9c8e60bfdb1 | 14 | |
hyunsungkim | 16:d9c8e60bfdb1 | 15 | #define NRF_ID 7 |
hyunsungkim | 16:d9c8e60bfdb1 | 16 | |
hyunsungkim | 15:07f67c448042 | 17 | #define TRANSFER_SIZE 15 |
hyunsungkim | 15:07f67c448042 | 18 | |
hyunsungkim | 15:07f67c448042 | 19 | nRF24L01P nrf(spi_MOSI, spi_MISO, spi_SCK, nrf_CSN, nrf_CE, spi_IRQ); // mosi, miso, sck, csn, ce, irq |
hyunsungkim | 15:07f67c448042 | 20 | |
hyunsungkim | 16:d9c8e60bfdb1 | 21 | uint64_t rxAddr=0xDEADBEEF0F; |
hyunsungkim | 16:d9c8e60bfdb1 | 22 | uint64_t txAddr=0xDEADBEEF00; |
hyunsungkim | 16:d9c8e60bfdb1 | 23 | |
hyunsungkim | 15:07f67c448042 | 24 | Serial pc(USBTX, USBRX); |
hyunsungkim | 16:d9c8e60bfdb1 | 25 | //Serial lidar(D1, D0); |
hyunsungkim | 15:07f67c448042 | 26 | |
hyunsungkim | 15:07f67c448042 | 27 | PwmOut motor_RA(D9); |
hyunsungkim | 15:07f67c448042 | 28 | PwmOut motor_RB(D10); |
hyunsungkim | 15:07f67c448042 | 29 | PwmOut motor_LA(D3); |
hyunsungkim | 15:07f67c448042 | 30 | PwmOut motor_LB(D6); |
hyunsungkim | 15:07f67c448042 | 31 | PwmOut led_B(A5); |
hyunsungkim | 15:07f67c448042 | 32 | PwmOut led_G(A2); |
hyunsungkim | 15:07f67c448042 | 33 | PwmOut led_R(A1); |
hyunsungkim | 15:07f67c448042 | 34 | PwmOut buzzer(D5); |
hyunsungkim | 15:07f67c448042 | 35 | AnalogIn batteryCheck(A0); |
hyunsungkim | 15:07f67c448042 | 36 | |
hyunsungkim | 15:07f67c448042 | 37 | void beepStart(); |
hyunsungkim | 15:07f67c448042 | 38 | void dumpRFInfo(); |
hyunsungkim | 15:07f67c448042 | 39 | void turnWheel(int rspd, int lspd); |
hyunsungkim | 16:d9c8e60bfdb1 | 40 | void initNRF(int mode, int msg_len); |
hyunsungkim | 15:07f67c448042 | 41 | |
hyunsungkim | 16:d9c8e60bfdb1 | 42 | int main() |
hyunsungkim | 16:d9c8e60bfdb1 | 43 | { |
hyunsungkim | 15:07f67c448042 | 44 | char rxData[TRANSFER_SIZE]; |
hyunsungkim | 15:07f67c448042 | 45 | int rxDataCnt = 0; |
hyunsungkim | 16:d9c8e60bfdb1 | 46 | |
hyunsungkim | 16:d9c8e60bfdb1 | 47 | initNRF(NRF_RECEIVE, TRANSFER_SIZE); |
hyunsungkim | 15:07f67c448042 | 48 | int inByteCnt = 0; |
hyunsungkim | 16:d9c8e60bfdb1 | 49 | |
hyunsungkim | 15:07f67c448042 | 50 | beepStart(); |
hyunsungkim | 15:07f67c448042 | 51 | pc.baud(115200); |
hyunsungkim | 15:07f67c448042 | 52 | // dumpRFInfo(); |
hyunsungkim | 16:d9c8e60bfdb1 | 53 | led_G = 1; |
hyunsungkim | 16:d9c8e60bfdb1 | 54 | led_R = 1; |
hyunsungkim | 16:d9c8e60bfdb1 | 55 | |
hyunsungkim | 15:07f67c448042 | 56 | while(1) { |
hyunsungkim | 16:d9c8e60bfdb1 | 57 | if ( nrf.readable() ) { |
hyunsungkim | 16:d9c8e60bfdb1 | 58 | rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, TRANSFER_SIZE); |
hyunsungkim | 16:d9c8e60bfdb1 | 59 | if(rxData[0] =='$') { |
hyunsungkim | 16:d9c8e60bfdb1 | 60 | int id = (rxData[1]-'0')*10+(rxData[2]-'0'); |
hyunsungkim | 16:d9c8e60bfdb1 | 61 | int dataCount = (rxData[3]-'0')*10000+(rxData[4]-'0')*1000+(rxData[5]-'0')*100+(rxData[6]-'0')*10+(rxData[7]-'0'); |
hyunsungkim | 16:d9c8e60bfdb1 | 62 | int rspd = (rxData[9]-'0')*10+(rxData[10]-'0'); |
hyunsungkim | 16:d9c8e60bfdb1 | 63 | int lspd = (rxData[12]-'0')*10+(rxData[13]-'0'); |
hyunsungkim | 16:d9c8e60bfdb1 | 64 | if(rxData[8]=='-') |
hyunsungkim | 16:d9c8e60bfdb1 | 65 | rspd = -rspd; |
hyunsungkim | 16:d9c8e60bfdb1 | 66 | if(rxData[11]=='-') |
hyunsungkim | 16:d9c8e60bfdb1 | 67 | lspd = -lspd; |
hyunsungkim | 16:d9c8e60bfdb1 | 68 | |
hyunsungkim | 16:d9c8e60bfdb1 | 69 | if(id==NRF_ID) { |
hyunsungkim | 16:d9c8e60bfdb1 | 70 | turnWheel(rspd, lspd); |
hyunsungkim | 16:d9c8e60bfdb1 | 71 | printf("[%d] RxData: %s, rspd: %d, rspd: %d\r\n", id, rxData, rspd, lspd); |
hyunsungkim | 16:d9c8e60bfdb1 | 72 | char buf[] = "JUSTDUMMYREPLY"; |
hyunsungkim | 16:d9c8e60bfdb1 | 73 | wait(0.005); |
hyunsungkim | 16:d9c8e60bfdb1 | 74 | nrf.setTxAddress(0xDEADBEEF00); |
hyunsungkim | 16:d9c8e60bfdb1 | 75 | nrf.setTransferSize( TRANSFER_SIZE ); |
hyunsungkim | 16:d9c8e60bfdb1 | 76 | nrf.setTransmitMode(); |
hyunsungkim | 16:d9c8e60bfdb1 | 77 | nrf.enable(); |
hyunsungkim | 16:d9c8e60bfdb1 | 78 | nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE); |
hyunsungkim | 16:d9c8e60bfdb1 | 79 | |
hyunsungkim | 16:d9c8e60bfdb1 | 80 | nrf.setRxAddress(0xDEADBEEF0F); |
hyunsungkim | 16:d9c8e60bfdb1 | 81 | nrf.powerUp(); |
hyunsungkim | 16:d9c8e60bfdb1 | 82 | nrf.setTransferSize( TRANSFER_SIZE ); |
hyunsungkim | 16:d9c8e60bfdb1 | 83 | nrf.setReceiveMode(); |
hyunsungkim | 16:d9c8e60bfdb1 | 84 | nrf.enable(); |
hyunsungkim | 15:07f67c448042 | 85 | } |
hyunsungkim | 16:d9c8e60bfdb1 | 86 | } else { |
hyunsungkim | 16:d9c8e60bfdb1 | 87 | printf("Invalid Data\r\n"); |
hyunsungkim | 15:07f67c448042 | 88 | } |
hyunsungkim | 15:07f67c448042 | 89 | } |
hyunsungkim | 15:07f67c448042 | 90 | } |
hyunsungkim | 15:07f67c448042 | 91 | } |
hyunsungkim | 15:07f67c448042 | 92 | |
hyunsungkim | 16:d9c8e60bfdb1 | 93 | |
hyunsungkim | 15:07f67c448042 | 94 | void turnWheel(int rspd, int lspd) |
hyunsungkim | 15:07f67c448042 | 95 | { |
hyunsungkim | 15:07f67c448042 | 96 | if(rspd>0) { |
hyunsungkim | 15:07f67c448042 | 97 | motor_RA.write((float)rspd/100); |
hyunsungkim | 15:07f67c448042 | 98 | motor_RB = 0; |
hyunsungkim | 15:07f67c448042 | 99 | } else { |
hyunsungkim | 15:07f67c448042 | 100 | rspd=-rspd; |
hyunsungkim | 15:07f67c448042 | 101 | motor_RB.write((float)rspd/100); |
hyunsungkim | 15:07f67c448042 | 102 | motor_RA = 0; |
hyunsungkim | 15:07f67c448042 | 103 | } |
hyunsungkim | 15:07f67c448042 | 104 | if(lspd>0) { |
hyunsungkim | 15:07f67c448042 | 105 | motor_LA.write((float)lspd/100); |
hyunsungkim | 15:07f67c448042 | 106 | motor_LB = 0; |
hyunsungkim | 15:07f67c448042 | 107 | } else { |
hyunsungkim | 15:07f67c448042 | 108 | lspd = -lspd; |
hyunsungkim | 15:07f67c448042 | 109 | motor_LB.write((float)lspd/100); |
hyunsungkim | 15:07f67c448042 | 110 | motor_LA = 0; |
hyunsungkim | 15:07f67c448042 | 111 | } |
hyunsungkim | 15:07f67c448042 | 112 | } |
hyunsungkim | 15:07f67c448042 | 113 | |
hyunsungkim | 15:07f67c448042 | 114 | void dumpRFInfo() |
hyunsungkim | 15:07f67c448042 | 115 | { |
hyunsungkim | 15:07f67c448042 | 116 | printf( "nRF24L01+ Frequency : %d MHz\r\n", nrf.getRfFrequency() ); |
hyunsungkim | 15:07f67c448042 | 117 | printf( "nRF24L01+ Output power : %d dBm\r\n", nrf.getRfOutputPower() ); |
hyunsungkim | 15:07f67c448042 | 118 | printf( "nRF24L01+ Data Rate : %d kbps\r\n", nrf.getAirDataRate() ); |
hyunsungkim | 15:07f67c448042 | 119 | printf( "nRF24L01+ TX Address : 0x%010llX\r\n", nrf.getTxAddress() ); |
hyunsungkim | 15:07f67c448042 | 120 | printf( "nRF24L01+ RX Address : 0x%010llX\r\n", nrf.getRxAddress() ); |
hyunsungkim | 15:07f67c448042 | 121 | } |
hyunsungkim | 15:07f67c448042 | 122 | |
hyunsungkim | 16:d9c8e60bfdb1 | 123 | void initNRF(int mode, int msg_len) |
hyunsungkim | 15:07f67c448042 | 124 | { |
hyunsungkim | 16:d9c8e60bfdb1 | 125 | #ifndef NRF_FIRST_INIT |
hyunsungkim | 16:d9c8e60bfdb1 | 126 | #define NRF_FIRST_INIT |
hyunsungkim | 16:d9c8e60bfdb1 | 127 | nrf.setTxAddress(txAddr); |
hyunsungkim | 16:d9c8e60bfdb1 | 128 | nrf.setRxAddress(rxAddr); |
hyunsungkim | 16:d9c8e60bfdb1 | 129 | nrf.powerUp(); |
hyunsungkim | 16:d9c8e60bfdb1 | 130 | #endif |
hyunsungkim | 16:d9c8e60bfdb1 | 131 | switch(mode) { |
hyunsungkim | 16:d9c8e60bfdb1 | 132 | case NRF_TRANSMIT: |
hyunsungkim | 16:d9c8e60bfdb1 | 133 | nrf.setTransferSize(msg_len); |
hyunsungkim | 16:d9c8e60bfdb1 | 134 | nrf.setTransmitMode(); |
hyunsungkim | 16:d9c8e60bfdb1 | 135 | nrf.enable(); |
hyunsungkim | 16:d9c8e60bfdb1 | 136 | break; |
hyunsungkim | 16:d9c8e60bfdb1 | 137 | case NRF_RECEIVE: |
hyunsungkim | 16:d9c8e60bfdb1 | 138 | nrf.setTransferSize(msg_len); |
hyunsungkim | 16:d9c8e60bfdb1 | 139 | nrf.setReceiveMode(); |
hyunsungkim | 16:d9c8e60bfdb1 | 140 | nrf.enable(); |
hyunsungkim | 16:d9c8e60bfdb1 | 141 | break; |
hyunsungkim | 16:d9c8e60bfdb1 | 142 | default: |
hyunsungkim | 16:d9c8e60bfdb1 | 143 | printf("Invalid NRF Mode\r\n"); |
hyunsungkim | 15:07f67c448042 | 144 | } |
hyunsungkim | 15:07f67c448042 | 145 | } |
hyunsungkim | 15:07f67c448042 | 146 | |
hyunsungkim | 15:07f67c448042 | 147 | |
hyunsungkim | 15:07f67c448042 | 148 | /* |
hyunsungkim | 15:07f67c448042 | 149 | xxyyyyyabbcddn |
hyunsungkim | 15:07f67c448042 | 150 | |
hyunsungkim | 15:07f67c448042 | 151 | 14 chars |
hyunsungkim | 15:07f67c448042 | 152 | |
hyunsungkim | 15:07f67c448042 | 153 | xx: robot_id |
hyunsungkim | 15:07f67c448042 | 154 | yyyyy: packet_id |
hyunsungkim | 15:07f67c448042 | 155 | a: sign of lspeed |
hyunsungkim | 15:07f67c448042 | 156 | bb: lspeed |
hyunsungkim | 15:07f67c448042 | 157 | c: sign of rspeed |
hyunsungkim | 15:07f67c448042 | 158 | dd: rspeed |
hyunsungkim | 15:07f67c448042 | 159 | n: NULL 0 |
hyunsungkim | 15:07f67c448042 | 160 | |
hyunsungkim | 15:07f67c448042 | 161 | 0100001+30+30 |
hyunsungkim | 15:07f67c448042 | 162 | */ |