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.
slave.cpp
00001 #include "mbed.h" 00002 #include "nRF24L01P.h" 00003 #include "beep.h" 00004 00005 #define nrf_CE D2 00006 #define nrf_CSN A3 00007 #define spi_SCK D13 00008 #define spi_MOSI D11 00009 #define spi_MISO D12 00010 #define spi_IRQ D4 00011 00012 #define NRF_TRANSMIT 1 00013 #define NRF_RECEIVE 2 00014 00015 #define NRF_ID 7 00016 00017 #define TRANSFER_SIZE 15 00018 00019 nRF24L01P nrf(spi_MOSI, spi_MISO, spi_SCK, nrf_CSN, nrf_CE, spi_IRQ); // mosi, miso, sck, csn, ce, irq 00020 00021 uint64_t rxAddr=0xDEADBEEF0F; 00022 uint64_t txAddr=0xDEADBEEF00; 00023 00024 Serial pc(USBTX, USBRX); 00025 //Serial lidar(D1, D0); 00026 00027 PwmOut motor_RA(D9); 00028 PwmOut motor_RB(D10); 00029 PwmOut motor_LA(D3); 00030 PwmOut motor_LB(D6); 00031 PwmOut led_B(A5); 00032 PwmOut led_G(A2); 00033 PwmOut led_R(A1); 00034 PwmOut buzzer(D5); 00035 AnalogIn batteryCheck(A0); 00036 00037 void beepStart(); 00038 void dumpRFInfo(); 00039 void turnWheel(int rspd, int lspd); 00040 void initNRF(int mode, int msg_len); 00041 00042 int main() 00043 { 00044 char rxData[TRANSFER_SIZE]; 00045 int rxDataCnt = 0; 00046 00047 initNRF(NRF_RECEIVE, TRANSFER_SIZE); 00048 int inByteCnt = 0; 00049 00050 beepStart(); 00051 pc.baud(115200); 00052 // dumpRFInfo(); 00053 led_G = 1; 00054 led_R = 1; 00055 00056 while(1) { 00057 if ( nrf.readable() ) { 00058 rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, TRANSFER_SIZE); 00059 if(rxData[0] =='$') { 00060 int id = (rxData[1]-'0')*10+(rxData[2]-'0'); 00061 int dataCount = (rxData[3]-'0')*10000+(rxData[4]-'0')*1000+(rxData[5]-'0')*100+(rxData[6]-'0')*10+(rxData[7]-'0'); 00062 int rspd = (rxData[9]-'0')*10+(rxData[10]-'0'); 00063 int lspd = (rxData[12]-'0')*10+(rxData[13]-'0'); 00064 if(rxData[8]=='-') 00065 rspd = -rspd; 00066 if(rxData[11]=='-') 00067 lspd = -lspd; 00068 00069 if(id==NRF_ID) { 00070 turnWheel(rspd, lspd); 00071 printf("[%d] RxData: %s, rspd: %d, rspd: %d\r\n", id, rxData, rspd, lspd); 00072 char buf[] = "JUSTDUMMYREPLY"; 00073 wait(0.005); 00074 nrf.setTxAddress(0xDEADBEEF00); 00075 nrf.setTransferSize( TRANSFER_SIZE ); 00076 nrf.setTransmitMode(); 00077 nrf.enable(); 00078 nrf.write(NRF24L01P_PIPE_P0, buf, TRANSFER_SIZE); 00079 00080 nrf.setRxAddress(0xDEADBEEF0F); 00081 nrf.powerUp(); 00082 nrf.setTransferSize( TRANSFER_SIZE ); 00083 nrf.setReceiveMode(); 00084 nrf.enable(); 00085 } 00086 } else { 00087 printf("Invalid Data\r\n"); 00088 } 00089 } 00090 } 00091 } 00092 00093 00094 void turnWheel(int rspd, int lspd) 00095 { 00096 if(rspd>0) { 00097 motor_RA.write((float)rspd/100); 00098 motor_RB = 0; 00099 } else { 00100 rspd=-rspd; 00101 motor_RB.write((float)rspd/100); 00102 motor_RA = 0; 00103 } 00104 if(lspd>0) { 00105 motor_LA.write((float)lspd/100); 00106 motor_LB = 0; 00107 } else { 00108 lspd = -lspd; 00109 motor_LB.write((float)lspd/100); 00110 motor_LA = 0; 00111 } 00112 } 00113 00114 void dumpRFInfo() 00115 { 00116 printf( "nRF24L01+ Frequency : %d MHz\r\n", nrf.getRfFrequency() ); 00117 printf( "nRF24L01+ Output power : %d dBm\r\n", nrf.getRfOutputPower() ); 00118 printf( "nRF24L01+ Data Rate : %d kbps\r\n", nrf.getAirDataRate() ); 00119 printf( "nRF24L01+ TX Address : 0x%010llX\r\n", nrf.getTxAddress() ); 00120 printf( "nRF24L01+ RX Address : 0x%010llX\r\n", nrf.getRxAddress() ); 00121 } 00122 00123 void initNRF(int mode, int msg_len) 00124 { 00125 #ifndef NRF_FIRST_INIT 00126 #define NRF_FIRST_INIT 00127 nrf.setTxAddress(txAddr); 00128 nrf.setRxAddress(rxAddr); 00129 nrf.powerUp(); 00130 #endif 00131 switch(mode) { 00132 case NRF_TRANSMIT: 00133 nrf.setTransferSize(msg_len); 00134 nrf.setTransmitMode(); 00135 nrf.enable(); 00136 break; 00137 case NRF_RECEIVE: 00138 nrf.setTransferSize(msg_len); 00139 nrf.setReceiveMode(); 00140 nrf.enable(); 00141 break; 00142 default: 00143 printf("Invalid NRF Mode\r\n"); 00144 } 00145 } 00146 00147 00148 /* 00149 xxyyyyyabbcddn 00150 00151 14 chars 00152 00153 xx: robot_id 00154 yyyyy: packet_id 00155 a: sign of lspeed 00156 bb: lspeed 00157 c: sign of rspeed 00158 dd: rspeed 00159 n: NULL 0 00160 00161 0100001+30+30 00162 */
Generated on Thu Jul 28 2022 20:37:08 by
1.7.2