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@4:ae81aeeed069, 2018-11-15 (annotated)
- Committer:
- hyunsungkim
- Date:
- Thu Nov 15 07:28:39 2018 +0000
- Revision:
- 4:ae81aeeed069
- Parent:
- 3:690740ab3394
- Child:
- 5:ad66d64c3d33
Before changing buzzer pwm to softpwm
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 | 3:690740ab3394 | 36 | void beepStart(); |
| hyunsungkim | 0:2dade6db4d3a | 37 | void endBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 38 | void goForward(); |
| hyunsungkim | 0:2dade6db4d3a | 39 | |
| hyunsungkim | 0:2dade6db4d3a | 40 | int main() { |
| hyunsungkim | 4:ae81aeeed069 | 41 | led_R=0.5; |
| hyunsungkim | 4:ae81aeeed069 | 42 | led_G=0.4; |
| hyunsungkim | 0:2dade6db4d3a | 43 | led_B=1; |
| hyunsungkim | 3:690740ab3394 | 44 | beepStart(); |
| hyunsungkim | 0:2dade6db4d3a | 45 | pc.baud(115200); |
| hyunsungkim | 3:690740ab3394 | 46 | radio.begin(); |
| hyunsungkim | 3:690740ab3394 | 47 | network.begin(/*channel*/ 90, /*node address*/ addr); |
| hyunsungkim | 4:ae81aeeed069 | 48 | wait(2.0f); |
| hyunsungkim | 0:2dade6db4d3a | 49 | |
| hyunsungkim | 4:ae81aeeed069 | 50 | // goForward(); |
| hyunsungkim | 4:ae81aeeed069 | 51 | |
| hyunsungkim | 4:ae81aeeed069 | 52 | // Display the (default) setup this node |
| hyunsungkim | 3:690740ab3394 | 53 | pc.printf("My ADDR : %d\r\n", NODE_ADDR); |
| hyunsungkim | 4:ae81aeeed069 | 54 | pc.printf("Complete Setting\r\n"); |
| hyunsungkim | 4:ae81aeeed069 | 55 | // beepAfterset(); |
| hyunsungkim | 1:450bd5ee8cdc | 56 | |
| hyunsungkim | 4:ae81aeeed069 | 57 | led_B.write(0.5); |
| hyunsungkim | 0:2dade6db4d3a | 58 | while(1) { |
| hyunsungkim | 4:ae81aeeed069 | 59 | // Network should be updated regularly to keep layer going |
| hyunsungkim | 3:690740ab3394 | 60 | network.update(); |
| hyunsungkim | 3:690740ab3394 | 61 | |
| hyunsungkim | 4:ae81aeeed069 | 62 | while (network.available()) { |
| hyunsungkim | 3:690740ab3394 | 63 | RF24NetworkHeader header_rx; |
| hyunsungkim | 3:690740ab3394 | 64 | payload_t payload_rx; |
| hyunsungkim | 3:690740ab3394 | 65 | network.read(header_rx,&payload_rx,sizeof(payload_rx)); |
| hyunsungkim | 3:690740ab3394 | 66 | pc.printf("Received packet # %d at %d ms\n",payload_rx.counter,payload_rx.ms); |
| hyunsungkim | 3:690740ab3394 | 67 | } |
| hyunsungkim | 0:2dade6db4d3a | 68 | } |
| hyunsungkim | 0:2dade6db4d3a | 69 | } |
| hyunsungkim | 0:2dade6db4d3a | 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 | void onLED(int r, int g, int b) |
| hyunsungkim | 0:2dade6db4d3a | 81 | { |
| hyunsungkim | 0:2dade6db4d3a | 82 | |
| hyunsungkim | 0:2dade6db4d3a | 83 | } |
| hyunsungkim | 0:2dade6db4d3a | 84 | |
| hyunsungkim | 0:2dade6db4d3a | 85 | |
| hyunsungkim | 0:2dade6db4d3a | 86 | /* |
| hyunsungkim | 0:2dade6db4d3a | 87 | |
| hyunsungkim | 0:2dade6db4d3a | 88 | // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's |
| hyunsungkim | 0:2dade6db4d3a | 89 | // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) |
| hyunsungkim | 0:2dade6db4d3a | 90 | // only handles 4 byte transfers in the ATMega code. |
| hyunsungkim | 0:2dade6db4d3a | 91 | #define TRANSFER_SIZE 4 |
| hyunsungkim | 0:2dade6db4d3a | 92 | |
| hyunsungkim | 0:2dade6db4d3a | 93 | wait(2.0); |
| hyunsungkim | 0:2dade6db4d3a | 94 | |
| hyunsungkim | 0:2dade6db4d3a | 95 | char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; |
| hyunsungkim | 0:2dade6db4d3a | 96 | int txDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 97 | int rxDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 98 | |
| hyunsungkim | 0:2dade6db4d3a | 99 | nrf.powerUp(); |
| hyunsungkim | 0:2dade6db4d3a | 100 | nrf.setTxAddress(0xE7E7E7EF, 4); |
| hyunsungkim | 0:2dade6db4d3a | 101 | |
| hyunsungkim | 0:2dade6db4d3a | 102 | // Display the (default) setup of the nRF24L01+ chip |
| hyunsungkim | 0:2dade6db4d3a | 103 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", nrf.getRfFrequency() ); |
| hyunsungkim | 0:2dade6db4d3a | 104 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", nrf.getRfOutputPower() ); |
| hyunsungkim | 0:2dade6db4d3a | 105 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", nrf.getAirDataRate() ); |
| hyunsungkim | 0:2dade6db4d3a | 106 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", nrf.getTxAddress() ); |
| hyunsungkim | 0:2dade6db4d3a | 107 | pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", nrf.getRxAddress() ); |
| hyunsungkim | 0:2dade6db4d3a | 108 | pc.printf( "nRF24L01+ CRCWidth : %d \r\n", nrf.getCrcWidth() ); |
| hyunsungkim | 0:2dade6db4d3a | 109 | |
| hyunsungkim | 0:2dade6db4d3a | 110 | pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); |
| hyunsungkim | 0:2dade6db4d3a | 111 | |
| hyunsungkim | 0:2dade6db4d3a | 112 | nrf.setTransferSize( TRANSFER_SIZE ); |
| hyunsungkim | 0:2dade6db4d3a | 113 | |
| hyunsungkim | 0:2dade6db4d3a | 114 | nrf.setReceiveMode(); |
| hyunsungkim | 0:2dade6db4d3a | 115 | nrf.enable(); |
| hyunsungkim | 0:2dade6db4d3a | 116 | |
| hyunsungkim | 0:2dade6db4d3a | 117 | while (1) { |
| hyunsungkim | 0:2dade6db4d3a | 118 | |
| hyunsungkim | 0:2dade6db4d3a | 119 | // If we've received anything over the host serial link... |
| hyunsungkim | 0:2dade6db4d3a | 120 | if ( pc.readable() ) { |
| hyunsungkim | 0:2dade6db4d3a | 121 | |
| hyunsungkim | 0:2dade6db4d3a | 122 | // ...add it to the transmit buffer |
| hyunsungkim | 0:2dade6db4d3a | 123 | txData[txDataCnt++] = pc.getc(); |
| hyunsungkim | 0:2dade6db4d3a | 124 | |
| hyunsungkim | 0:2dade6db4d3a | 125 | // If the transmit buffer is full |
| hyunsungkim | 0:2dade6db4d3a | 126 | if ( txDataCnt >= sizeof( txData ) ) { |
| hyunsungkim | 0:2dade6db4d3a | 127 | |
| hyunsungkim | 0:2dade6db4d3a | 128 | // Send the transmitbuffer via the nRF24L01+ |
| hyunsungkim | 0:2dade6db4d3a | 129 | nrf.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); |
| hyunsungkim | 0:2dade6db4d3a | 130 | |
| hyunsungkim | 0:2dade6db4d3a | 131 | txDataCnt = 0; |
| hyunsungkim | 0:2dade6db4d3a | 132 | } |
| hyunsungkim | 0:2dade6db4d3a | 133 | endBeep(); |
| hyunsungkim | 0:2dade6db4d3a | 134 | } |
| hyunsungkim | 0:2dade6db4d3a | 135 | |
| hyunsungkim | 0:2dade6db4d3a | 136 | // If we've received anything in the nRF24L01+... |
| hyunsungkim | 0:2dade6db4d3a | 137 | if ( nrf.readable() ) { |
| hyunsungkim | 0:2dade6db4d3a | 138 | |
| hyunsungkim | 0:2dade6db4d3a | 139 | // ...read the data into the receive buffer |
| hyunsungkim | 0:2dade6db4d3a | 140 | rxDataCnt = nrf.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); |
| hyunsungkim | 0:2dade6db4d3a | 141 | |
| hyunsungkim | 0:2dade6db4d3a | 142 | // Display the receive buffer contents via the host serial link |
| hyunsungkim | 0:2dade6db4d3a | 143 | for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { |
| hyunsungkim | 0:2dade6db4d3a | 144 | pc.putc( rxData[i] ); |
| hyunsungkim | 0:2dade6db4d3a | 145 | } |
| hyunsungkim | 3:690740ab3394 | 146 | beepStart(); |
| hyunsungkim | 0:2dade6db4d3a | 147 | } |
| hyunsungkim | 0:2dade6db4d3a | 148 | } |
| hyunsungkim | 0:2dade6db4d3a | 149 | */ |