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@7:faf9014d2512, 2018-11-21 (annotated)
- Committer:
- hyunsungkim
- Date:
- Wed Nov 21 12:08:43 2018 +0000
- Revision:
- 7:faf9014d2512
- Parent:
- 6:42ecdff5956a
- Child:
- 8:78294b936c70
update libraries
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| hyunsungkim | 0:2dade6db4d3a | 1 | #include "mbed.h" |
| hyunsungkim | 3:690740ab3394 | 2 | #include <RF24Network.h> |
| hyunsungkim | 3:690740ab3394 | 3 | #include <RF24.h> |
| hyunsungkim | 3:690740ab3394 | 4 | #include "beep.h" |
| hyunsungkim | 3:690740ab3394 | 5 | |
| hyunsungkim | 3:690740ab3394 | 6 | /* Set */ |
| hyunsungkim | 3:690740ab3394 | 7 | #define NODE_ADDR 00 |
| hyunsungkim | 3:690740ab3394 | 8 | |
| hyunsungkim | 3:690740ab3394 | 9 | #define nrf_CE D2 |
| hyunsungkim | 3:690740ab3394 | 10 | #define nrf_CSN A3 |
| hyunsungkim | 3:690740ab3394 | 11 | #define spi_SCK D13 |
| hyunsungkim | 3:690740ab3394 | 12 | #define spi_MOSI D11 |
| hyunsungkim | 3:690740ab3394 | 13 | #define spi_MISO D12 |
| hyunsungkim | 3:690740ab3394 | 14 | RF24 radio(spi_MOSI, spi_MISO, spi_SCK, nrf_CE, nrf_CSN ); |
| hyunsungkim | 3:690740ab3394 | 15 | RF24Network network(radio); |
| hyunsungkim | 0:2dade6db4d3a | 16 | |
| hyunsungkim | 0:2dade6db4d3a | 17 | Serial pc(USBTX, USBRX); |
| hyunsungkim | 0:2dade6db4d3a | 18 | Serial lidar(D1, D0); |
| hyunsungkim | 0:2dade6db4d3a | 19 | PwmOut motor_RA(D9); |
| hyunsungkim | 0:2dade6db4d3a | 20 | PwmOut motor_RB(D10); |
| hyunsungkim | 0:2dade6db4d3a | 21 | PwmOut motor_LA(D3); |
| hyunsungkim | 0:2dade6db4d3a | 22 | PwmOut motor_LB(D6); |
| hyunsungkim | 4:ae81aeeed069 | 23 | PwmOut led_B(A5); |
| hyunsungkim | 0:2dade6db4d3a | 24 | PwmOut led_G(A2); |
| hyunsungkim | 4:ae81aeeed069 | 25 | PwmOut led_R(A1); |
| hyunsungkim | 0:2dade6db4d3a | 26 | PwmOut buzzer(D5); |
| hyunsungkim | 0:2dade6db4d3a | 27 | AnalogIn batteryCheck(A0); |
| hyunsungkim | 0:2dade6db4d3a | 28 | |
| hyunsungkim | 3:690740ab3394 | 29 | const uint16_t addr = NODE_ADDR; |
| hyunsungkim | 3:690740ab3394 | 30 | struct payload_t |
| hyunsungkim | 3:690740ab3394 | 31 | { |
| hyunsungkim | 3:690740ab3394 | 32 | unsigned long ms; |
| hyunsungkim | 3:690740ab3394 | 33 | unsigned long counter; |
| hyunsungkim | 3:690740ab3394 | 34 | }; |
| hyunsungkim | 3:690740ab3394 | 35 | |
| hyunsungkim | 0:2dade6db4d3a | 36 | void goForward(); |
| hyunsungkim | 7:faf9014d2512 | 37 | void initLED(); |
| hyunsungkim | 0:2dade6db4d3a | 38 | |
| hyunsungkim | 6:42ecdff5956a | 39 | |
| hyunsungkim | 0:2dade6db4d3a | 40 | int main() { |
| hyunsungkim | 6:42ecdff5956a | 41 | |
| hyunsungkim | 6:42ecdff5956a | 42 | initLED(); |
| hyunsungkim | 7:faf9014d2512 | 43 | initBuzzer(); |
| hyunsungkim | 0:2dade6db4d3a | 44 | pc.baud(115200); |
| hyunsungkim | 3:690740ab3394 | 45 | radio.begin(); |
| hyunsungkim | 3:690740ab3394 | 46 | network.begin(/*channel*/ 90, /*node address*/ addr); |
| hyunsungkim | 4:ae81aeeed069 | 47 | wait(2.0f); |
| hyunsungkim | 0:2dade6db4d3a | 48 | |
| hyunsungkim | 4:ae81aeeed069 | 49 | // Display the (default) setup this node |
| hyunsungkim | 3:690740ab3394 | 50 | pc.printf("My ADDR : %d\r\n", NODE_ADDR); |
| hyunsungkim | 4:ae81aeeed069 | 51 | pc.printf("Complete Setting\r\n"); |
| hyunsungkim | 1:450bd5ee8cdc | 52 | |
| hyunsungkim | 0:2dade6db4d3a | 53 | while(1) { |
| hyunsungkim | 4:ae81aeeed069 | 54 | // Network should be updated regularly to keep layer going |
| hyunsungkim | 3:690740ab3394 | 55 | network.update(); |
| hyunsungkim | 3:690740ab3394 | 56 | |
| hyunsungkim | 4:ae81aeeed069 | 57 | while (network.available()) { |
| hyunsungkim | 3:690740ab3394 | 58 | RF24NetworkHeader header_rx; |
| hyunsungkim | 3:690740ab3394 | 59 | payload_t payload_rx; |
| hyunsungkim | 3:690740ab3394 | 60 | network.read(header_rx,&payload_rx,sizeof(payload_rx)); |
| hyunsungkim | 3:690740ab3394 | 61 | pc.printf("Received packet # %d at %d ms\n",payload_rx.counter,payload_rx.ms); |
| hyunsungkim | 3:690740ab3394 | 62 | } |
| hyunsungkim | 0:2dade6db4d3a | 63 | } |
| hyunsungkim | 0:2dade6db4d3a | 64 | } |
| hyunsungkim | 0:2dade6db4d3a | 65 | |
| hyunsungkim | 7:faf9014d2512 | 66 | void initLED() { |
| hyunsungkim | 7:faf9014d2512 | 67 | led_R=1; |
| hyunsungkim | 7:faf9014d2512 | 68 | led_G=1; |
| hyunsungkim | 7:faf9014d2512 | 69 | led_B=1; |
| hyunsungkim | 7:faf9014d2512 | 70 | } |
| hyunsungkim | 0:2dade6db4d3a | 71 | |
| hyunsungkim | 0:2dade6db4d3a | 72 | void goForward() |
| hyunsungkim | 0:2dade6db4d3a | 73 | { |
| hyunsungkim | 4:ae81aeeed069 | 74 | motor_RA = 1; |
| hyunsungkim | 0:2dade6db4d3a | 75 | motor_RB = 0; |
| hyunsungkim | 0:2dade6db4d3a | 76 | motor_LA = 0; |
| hyunsungkim | 4:ae81aeeed069 | 77 | motor_LB = 1; |
| hyunsungkim | 0:2dade6db4d3a | 78 | } |
| hyunsungkim | 0:2dade6db4d3a | 79 | |
| hyunsungkim | 0:2dade6db4d3a | 80 | /* |
| hyunsungkim | 0:2dade6db4d3a | 81 | |
| hyunsungkim | 0:2dade6db4d3a | 82 | // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's |
| hyunsungkim | 0:2dade6db4d3a | 83 | // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) |
| hyunsungkim | 0:2dade6db4d3a | 84 | // only handles 4 byte transfers in the ATMega code. |
| hyunsungkim | 0:2dade6db4d3a | 85 | #define TRANSFER_SIZE 4 |
| hyunsungkim | 0:2dade6db4d3a | 86 | |
| hyunsungkim | 0:2dade6db4d3a | 87 | wait(2.0); |
| hyunsungkim | 0:2dade6db4d3a | 88 | |
| hyunsungkim | 0:2dade6db4d3a | 89 | char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; |
| hyunsungkim | 0:2dade6db4d3a | 90 | int txDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 91 | int rxDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 92 | |
| hyunsungkim | 0:2dade6db4d3a | 93 | nrf.powerUp(); |
| hyunsungkim | 0:2dade6db4d3a | 94 | nrf.setTxAddress(0xE7E7E7EF, 4); |
| hyunsungkim | 0:2dade6db4d3a | 95 | |
| hyunsungkim | 0:2dade6db4d3a | 96 | // Display the (default) setup of the nRF24L01+ chip |
| hyunsungkim | 0:2dade6db4d3a | 97 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", nrf.getRfFrequency() ); |
| hyunsungkim | 0:2dade6db4d3a | 98 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", nrf.getRfOutputPower() ); |
| hyunsungkim | 0:2dade6db4d3a | 99 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", nrf.getAirDataRate() ); |
| hyunsungkim | 0:2dade6db4d3a | 100 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", nrf.getTxAddress() ); |
| hyunsungkim | 0:2dade6db4d3a | 101 | pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", nrf.getRxAddress() ); |
| hyunsungkim | 0:2dade6db4d3a | 102 | pc.printf( "nRF24L01+ CRCWidth : %d \r\n", nrf.getCrcWidth() ); |
| hyunsungkim | 0:2dade6db4d3a | 103 | |
| hyunsungkim | 0:2dade6db4d3a | 104 | pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); |
| hyunsungkim | 0:2dade6db4d3a | 105 | |
| hyunsungkim | 0:2dade6db4d3a | 106 | nrf.setTransferSize( TRANSFER_SIZE ); |
| hyunsungkim | 0:2dade6db4d3a | 107 | |
| hyunsungkim | 0:2dade6db4d3a | 108 | nrf.setReceiveMode(); |
| hyunsungkim | 0:2dade6db4d3a | 109 | nrf.enable(); |
| hyunsungkim | 0:2dade6db4d3a | 110 | |
| hyunsungkim | 0:2dade6db4d3a | 111 | while (1) { |
| hyunsungkim | 0:2dade6db4d3a | 112 | |
| hyunsungkim | 0:2dade6db4d3a | 113 | // If we've received anything over the host serial link... |
| hyunsungkim | 0:2dade6db4d3a | 114 | if ( pc.readable() ) { |
| hyunsungkim | 0:2dade6db4d3a | 115 | |
| hyunsungkim | 0:2dade6db4d3a | 116 | // ...add it to the transmit buffer |
| hyunsungkim | 0:2dade6db4d3a | 117 | txData[txDataCnt++] = pc.getc(); |
| hyunsungkim | 0:2dade6db4d3a | 118 | |
| hyunsungkim | 0:2dade6db4d3a | 119 | // If the transmit buffer is full |
| hyunsungkim | 0:2dade6db4d3a | 120 | if ( txDataCnt >= sizeof( txData ) ) { |
| hyunsungkim | 0:2dade6db4d3a | 121 | |
| hyunsungkim | 0:2dade6db4d3a | 122 | // Send the transmitbuffer via the nRF24L01+ |
| hyunsungkim | 0:2dade6db4d3a | 123 | nrf.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); |
| hyunsungkim | 0:2dade6db4d3a | 124 | |
| hyunsungkim | 0:2dade6db4d3a | 125 | txDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 126 | } |
| hyunsungkim | 0:2dade6db4d3a | 127 | endBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 128 | } |
| hyunsungkim | 0:2dade6db4d3a | 129 | |
| hyunsungkim | 0:2dade6db4d3a | 130 | // If we've received anything in the nRF24L01+... |
| hyunsungkim | 0:2dade6db4d3a | 131 | if ( nrf.readable() ) { |
| hyunsungkim | 0:2dade6db4d3a | 132 | |
| hyunsungkim | 0:2dade6db4d3a | 133 | // ...read the data into the receive buffer |
| hyunsungkim | 0:2dade6db4d3a | 134 | rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); |
| hyunsungkim | 0:2dade6db4d3a | 135 | |
| hyunsungkim | 0:2dade6db4d3a | 136 | // Display the receive buffer contents via the host serial link |
| hyunsungkim | 0:2dade6db4d3a | 137 | for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { |
| hyunsungkim | 0:2dade6db4d3a | 138 | pc.putc( rxData[i] ); |
| hyunsungkim | 0:2dade6db4d3a | 139 | } |
| hyunsungkim | 3:690740ab3394 | 140 | beepStart(); |
| hyunsungkim | 0:2dade6db4d3a | 141 | } |
| hyunsungkim | 0:2dade6db4d3a | 142 | } |
| hyunsungkim | 0:2dade6db4d3a | 143 | */ |