just a messy code..

Dependencies:   mbed nRF24L01P

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?

UserRevisionLine numberNew 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 */