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.
main.cpp@2:4d2d1b988c14, 2018-11-03 (annotated)
- Committer:
- hyunsungkim
- Date:
- Sat Nov 03 14:06:28 2018 +0000
- Revision:
- 2:4d2d1b988c14
- Parent:
- 1:450bd5ee8cdc
- Child:
- 3:690740ab3394
?????-????
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| hyunsungkim | 0:2dade6db4d3a | 1 | #include "mbed.h" |
| hyunsungkim | 0:2dade6db4d3a | 2 | #include "RF24.h" |
| hyunsungkim | 0:2dade6db4d3a | 3 | #include "tone.h" |
| hyunsungkim | 0:2dade6db4d3a | 4 | |
| hyunsungkim | 0:2dade6db4d3a | 5 | Serial pc(USBTX, USBRX); |
| hyunsungkim | 0:2dade6db4d3a | 6 | Serial lidar(D1, D0); |
| hyunsungkim | 0:2dade6db4d3a | 7 | PwmOut motor_RA(D9); |
| hyunsungkim | 0:2dade6db4d3a | 8 | PwmOut motor_RB(D10); |
| hyunsungkim | 0:2dade6db4d3a | 9 | PwmOut motor_LA(D3); |
| hyunsungkim | 0:2dade6db4d3a | 10 | PwmOut motor_LB(D6); |
| hyunsungkim | 0:2dade6db4d3a | 11 | PwmOut led_B(A1); |
| hyunsungkim | 0:2dade6db4d3a | 12 | PwmOut led_G(A2); |
| hyunsungkim | 0:2dade6db4d3a | 13 | PwmOut led_R(A5); |
| hyunsungkim | 0:2dade6db4d3a | 14 | PwmOut buzzer(D5); |
| hyunsungkim | 0:2dade6db4d3a | 15 | RF24 nrf(D11,D12,D13,D2,A3); |
| hyunsungkim | 0:2dade6db4d3a | 16 | AnalogIn batteryCheck(A0); |
| hyunsungkim | 0:2dade6db4d3a | 17 | |
| hyunsungkim | 0:2dade6db4d3a | 18 | void startBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 19 | void endBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 20 | void goForward(); |
| hyunsungkim | 0:2dade6db4d3a | 21 | |
| hyunsungkim | 1:450bd5ee8cdc | 22 | uint8_t id = 0; // Listener |
| hyunsungkim | 1:450bd5ee8cdc | 23 | //uint8_t rxAddr[10][6] = {"BOT0R","BOT1R","BOT2R","BOT3R","BOT4R","BOT5R","BOT6R","BOT7R","BOT8R","BOT9R"}; |
| hyunsungkim | 1:450bd5ee8cdc | 24 | //uint8_t txAddr[10][6] = {"BOT0T","BOT1T","BOT2T","BOT3T","BOT4T","BOT5T","BOT6T","BOT7T","BOT8T","BOT9T"}; |
| hyunsungkim | 1:450bd5ee8cdc | 25 | |
| hyunsungkim | 2:4d2d1b988c14 | 26 | uint8_t txAddr[6] = "BTOA0"; |
| hyunsungkim | 2:4d2d1b988c14 | 27 | uint8_t rxAddr[6] = "ATOB0"; |
| hyunsungkim | 0:2dade6db4d3a | 28 | |
| hyunsungkim | 0:2dade6db4d3a | 29 | int main() { |
| hyunsungkim | 2:4d2d1b988c14 | 30 | unsigned char outByte='Q'; |
| hyunsungkim | 1:450bd5ee8cdc | 31 | |
| hyunsungkim | 0:2dade6db4d3a | 32 | led_R=1; |
| hyunsungkim | 0:2dade6db4d3a | 33 | led_G=1; |
| hyunsungkim | 0:2dade6db4d3a | 34 | led_B=1; |
| hyunsungkim | 0:2dade6db4d3a | 35 | startBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 36 | pc.baud(115200); |
| hyunsungkim | 0:2dade6db4d3a | 37 | |
| hyunsungkim | 0:2dade6db4d3a | 38 | nrf.begin(); |
| hyunsungkim | 0:2dade6db4d3a | 39 | nrf.stopListening(); |
| hyunsungkim | 1:450bd5ee8cdc | 40 | nrf.openWritingPipe(txAddr); |
| hyunsungkim | 1:450bd5ee8cdc | 41 | nrf.openReadingPipe(1,rxAddr); |
| hyunsungkim | 0:2dade6db4d3a | 42 | nrf.setChannel(101); |
| hyunsungkim | 0:2dade6db4d3a | 43 | |
| hyunsungkim | 0:2dade6db4d3a | 44 | // Display the (default) setup of the nRF24L01+ chip |
| hyunsungkim | 0:2dade6db4d3a | 45 | pc.printf( "My ID : %d", id); |
| hyunsungkim | 0:2dade6db4d3a | 46 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", 2000+nrf.getChannel() ); |
| hyunsungkim | 0:2dade6db4d3a | 47 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", nrf.getPALevel() ); |
| hyunsungkim | 0:2dade6db4d3a | 48 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", nrf.getDataRate() ); |
| hyunsungkim | 1:450bd5ee8cdc | 49 | pc.printf( "nRF24L01+ TX Address : 0x%X%X%X%X%X\r\n", rxAddr[0], rxAddr[1], rxAddr[2], rxAddr[3], rxAddr[4]); |
| hyunsungkim | 1:450bd5ee8cdc | 50 | pc.printf( "nRF24L01+ RX Address : 0x%X%X%X%X%X\r\n", txAddr[0], txAddr[1], txAddr[2], txAddr[3], txAddr[4]); |
| hyunsungkim | 0:2dade6db4d3a | 51 | pc.printf( "nRF24L01+ CRCWidth : %d Byte\r\n", nrf.getCRCLength() ); |
| hyunsungkim | 0:2dade6db4d3a | 52 | |
| hyunsungkim | 0:2dade6db4d3a | 53 | //goForward(); |
| hyunsungkim | 0:2dade6db4d3a | 54 | |
| hyunsungkim | 1:450bd5ee8cdc | 55 | nrf.startListening(); |
| hyunsungkim | 1:450bd5ee8cdc | 56 | |
| hyunsungkim | 0:2dade6db4d3a | 57 | while(1) { |
| hyunsungkim | 2:4d2d1b988c14 | 58 | wait(0.3f); |
| hyunsungkim | 2:4d2d1b988c14 | 59 | pc.printf("Transmitted\r\n"); |
| hyunsungkim | 2:4d2d1b988c14 | 60 | nrf.write(&outByte, 1); |
| hyunsungkim | 0:2dade6db4d3a | 61 | } |
| hyunsungkim | 0:2dade6db4d3a | 62 | } |
| hyunsungkim | 0:2dade6db4d3a | 63 | |
| hyunsungkim | 0:2dade6db4d3a | 64 | void startBeep() |
| hyunsungkim | 0:2dade6db4d3a | 65 | { |
| hyunsungkim | 0:2dade6db4d3a | 66 | buzzer.write(0.5); |
| hyunsungkim | 0:2dade6db4d3a | 67 | buzzer.period_us(1000000/Do5); |
| hyunsungkim | 0:2dade6db4d3a | 68 | wait(0.1); |
| hyunsungkim | 0:2dade6db4d3a | 69 | buzzer.period_us(1000000/Mi5); |
| hyunsungkim | 0:2dade6db4d3a | 70 | wait(0.1); |
| hyunsungkim | 0:2dade6db4d3a | 71 | buzzer.period_us(1000000/So5); |
| hyunsungkim | 0:2dade6db4d3a | 72 | wait(0.1); |
| hyunsungkim | 0:2dade6db4d3a | 73 | buzzer.write(0); |
| hyunsungkim | 0:2dade6db4d3a | 74 | } |
| hyunsungkim | 0:2dade6db4d3a | 75 | |
| hyunsungkim | 0:2dade6db4d3a | 76 | void endBeep() |
| hyunsungkim | 0:2dade6db4d3a | 77 | { |
| hyunsungkim | 0:2dade6db4d3a | 78 | buzzer.write(0.5); |
| hyunsungkim | 0:2dade6db4d3a | 79 | buzzer.period_us(1000000/So5); |
| hyunsungkim | 0:2dade6db4d3a | 80 | wait(0.1); |
| hyunsungkim | 0:2dade6db4d3a | 81 | buzzer.period_us(1000000/Mi5); |
| hyunsungkim | 0:2dade6db4d3a | 82 | wait(0.1); |
| hyunsungkim | 0:2dade6db4d3a | 83 | buzzer.period_us(1000000/Do5); |
| hyunsungkim | 0:2dade6db4d3a | 84 | wait(0.1); |
| hyunsungkim | 0:2dade6db4d3a | 85 | buzzer.write(0); |
| hyunsungkim | 0:2dade6db4d3a | 86 | } |
| hyunsungkim | 0:2dade6db4d3a | 87 | |
| hyunsungkim | 0:2dade6db4d3a | 88 | void goForward() |
| hyunsungkim | 0:2dade6db4d3a | 89 | { |
| hyunsungkim | 0:2dade6db4d3a | 90 | motor_RA = 0.5; |
| hyunsungkim | 0:2dade6db4d3a | 91 | motor_RB = 0; |
| hyunsungkim | 0:2dade6db4d3a | 92 | motor_LA = 0; |
| hyunsungkim | 0:2dade6db4d3a | 93 | motor_LB = 0.5; |
| hyunsungkim | 0:2dade6db4d3a | 94 | } |
| hyunsungkim | 0:2dade6db4d3a | 95 | |
| hyunsungkim | 0:2dade6db4d3a | 96 | void onLED(int r, int g, int b) |
| hyunsungkim | 0:2dade6db4d3a | 97 | { |
| hyunsungkim | 0:2dade6db4d3a | 98 | |
| hyunsungkim | 0:2dade6db4d3a | 99 | } |
| hyunsungkim | 0:2dade6db4d3a | 100 | |
| hyunsungkim | 0:2dade6db4d3a | 101 | |
| hyunsungkim | 0:2dade6db4d3a | 102 | /* |
| hyunsungkim | 0:2dade6db4d3a | 103 | |
| hyunsungkim | 0:2dade6db4d3a | 104 | // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's |
| hyunsungkim | 0:2dade6db4d3a | 105 | // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) |
| hyunsungkim | 0:2dade6db4d3a | 106 | // only handles 4 byte transfers in the ATMega code. |
| hyunsungkim | 0:2dade6db4d3a | 107 | #define TRANSFER_SIZE 4 |
| hyunsungkim | 0:2dade6db4d3a | 108 | |
| hyunsungkim | 0:2dade6db4d3a | 109 | wait(2.0); |
| hyunsungkim | 0:2dade6db4d3a | 110 | |
| hyunsungkim | 0:2dade6db4d3a | 111 | char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; |
| hyunsungkim | 0:2dade6db4d3a | 112 | int txDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 113 | int rxDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 114 | |
| hyunsungkim | 0:2dade6db4d3a | 115 | nrf.powerUp(); |
| hyunsungkim | 0:2dade6db4d3a | 116 | nrf.setTxAddress(0xE7E7E7EF, 4); |
| hyunsungkim | 0:2dade6db4d3a | 117 | |
| hyunsungkim | 0:2dade6db4d3a | 118 | // Display the (default) setup of the nRF24L01+ chip |
| hyunsungkim | 0:2dade6db4d3a | 119 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", nrf.getRfFrequency() ); |
| hyunsungkim | 0:2dade6db4d3a | 120 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", nrf.getRfOutputPower() ); |
| hyunsungkim | 0:2dade6db4d3a | 121 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", nrf.getAirDataRate() ); |
| hyunsungkim | 0:2dade6db4d3a | 122 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", nrf.getTxAddress() ); |
| hyunsungkim | 0:2dade6db4d3a | 123 | pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", nrf.getRxAddress() ); |
| hyunsungkim | 0:2dade6db4d3a | 124 | pc.printf( "nRF24L01+ CRCWidth : %d \r\n", nrf.getCrcWidth() ); |
| hyunsungkim | 0:2dade6db4d3a | 125 | |
| hyunsungkim | 0:2dade6db4d3a | 126 | pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); |
| hyunsungkim | 0:2dade6db4d3a | 127 | |
| hyunsungkim | 0:2dade6db4d3a | 128 | nrf.setTransferSize( TRANSFER_SIZE ); |
| hyunsungkim | 0:2dade6db4d3a | 129 | |
| hyunsungkim | 0:2dade6db4d3a | 130 | nrf.setReceiveMode(); |
| hyunsungkim | 0:2dade6db4d3a | 131 | nrf.enable(); |
| hyunsungkim | 0:2dade6db4d3a | 132 | |
| hyunsungkim | 0:2dade6db4d3a | 133 | while (1) { |
| hyunsungkim | 0:2dade6db4d3a | 134 | |
| hyunsungkim | 0:2dade6db4d3a | 135 | // If we've received anything over the host serial link... |
| hyunsungkim | 0:2dade6db4d3a | 136 | if ( pc.readable() ) { |
| hyunsungkim | 0:2dade6db4d3a | 137 | |
| hyunsungkim | 0:2dade6db4d3a | 138 | // ...add it to the transmit buffer |
| hyunsungkim | 0:2dade6db4d3a | 139 | txData[txDataCnt++] = pc.getc(); |
| hyunsungkim | 0:2dade6db4d3a | 140 | |
| hyunsungkim | 0:2dade6db4d3a | 141 | // If the transmit buffer is full |
| hyunsungkim | 0:2dade6db4d3a | 142 | if ( txDataCnt >= sizeof( txData ) ) { |
| hyunsungkim | 0:2dade6db4d3a | 143 | |
| hyunsungkim | 0:2dade6db4d3a | 144 | // Send the transmitbuffer via the nRF24L01+ |
| hyunsungkim | 0:2dade6db4d3a | 145 | nrf.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); |
| hyunsungkim | 0:2dade6db4d3a | 146 | |
| hyunsungkim | 0:2dade6db4d3a | 147 | txDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 148 | } |
| hyunsungkim | 0:2dade6db4d3a | 149 | endBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 150 | } |
| hyunsungkim | 0:2dade6db4d3a | 151 | |
| hyunsungkim | 0:2dade6db4d3a | 152 | // If we've received anything in the nRF24L01+... |
| hyunsungkim | 0:2dade6db4d3a | 153 | if ( nrf.readable() ) { |
| hyunsungkim | 0:2dade6db4d3a | 154 | |
| hyunsungkim | 0:2dade6db4d3a | 155 | // ...read the data into the receive buffer |
| hyunsungkim | 0:2dade6db4d3a | 156 | rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); |
| hyunsungkim | 0:2dade6db4d3a | 157 | |
| hyunsungkim | 0:2dade6db4d3a | 158 | // Display the receive buffer contents via the host serial link |
| hyunsungkim | 0:2dade6db4d3a | 159 | for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { |
| hyunsungkim | 0:2dade6db4d3a | 160 | pc.putc( rxData[i] ); |
| hyunsungkim | 0:2dade6db4d3a | 161 | } |
| hyunsungkim | 0:2dade6db4d3a | 162 | startBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 163 | } |
| hyunsungkim | 0:2dade6db4d3a | 164 | } |
| hyunsungkim | 0:2dade6db4d3a | 165 | */ |