Project for MPOA 2015/2016. Communication link with nRF24L01+.
Fork of nRF24L01P_Hello_World by
menu.cpp@3:10a2f47a53a6, 2016-01-17 (annotated)
- Committer:
- petrsedlacek
- Date:
- Sun Jan 17 19:00:58 2016 +0000
- Revision:
- 3:10a2f47a53a6
- Parent:
- 2:f555c7caa707
Some functions changed to public
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
petrsedlacek | 2:f555c7caa707 | 1 | #include "mbed.h" |
petrsedlacek | 2:f555c7caa707 | 2 | #include "nRF24L01P.h" |
petrsedlacek | 2:f555c7caa707 | 3 | #include "menu.h" |
petrsedlacek | 2:f555c7caa707 | 4 | |
petrsedlacek | 2:f555c7caa707 | 5 | extern bool tx_mode; //Global variable for TX/RX mode setting |
petrsedlacek | 2:f555c7caa707 | 6 | extern bool keyboard_mode; //Global variable for keyboard mode setting |
petrsedlacek | 2:f555c7caa707 | 7 | extern uint8_t interval; //Global variable for time interval setting |
petrsedlacek | 2:f555c7caa707 | 8 | |
petrsedlacek | 2:f555c7caa707 | 9 | Serial pc2(USBTX, USBRX); // tx, rx |
petrsedlacek | 2:f555c7caa707 | 10 | nRF24L01P nrf24l01p(PTD2, PTD3, PTD1, PTD0, PTD5, PTA13); // mosi, miso, sck, csn, ce, irq |
petrsedlacek | 2:f555c7caa707 | 11 | |
petrsedlacek | 2:f555c7caa707 | 12 | |
petrsedlacek | 2:f555c7caa707 | 13 | void settings() { |
petrsedlacek | 2:f555c7caa707 | 14 | uint16_t frequency; |
petrsedlacek | 2:f555c7caa707 | 15 | char input[]= ""; |
petrsedlacek | 2:f555c7caa707 | 16 | char *ptr; |
petrsedlacek | 2:f555c7caa707 | 17 | |
petrsedlacek | 2:f555c7caa707 | 18 | pc2.printf("***Experimental 2.4 GHz Radio Link. Setup below: ***\n\n"); |
petrsedlacek | 2:f555c7caa707 | 19 | |
petrsedlacek | 2:f555c7caa707 | 20 | pc2.printf("Select TX or RX Mode. TX calculates BER (only in automatic mode) and ACKs,\n RX shows number of incoming packets.:\n"); |
petrsedlacek | 2:f555c7caa707 | 21 | pc2.printf("1: TX\n2: RX\n"); |
petrsedlacek | 2:f555c7caa707 | 22 | //Select TX or RX mode |
petrsedlacek | 2:f555c7caa707 | 23 | switch (pc2.getc()) { |
petrsedlacek | 2:f555c7caa707 | 24 | case '1': |
petrsedlacek | 2:f555c7caa707 | 25 | tx_mode = true; |
petrsedlacek | 2:f555c7caa707 | 26 | break; |
petrsedlacek | 2:f555c7caa707 | 27 | case '2': |
petrsedlacek | 2:f555c7caa707 | 28 | tx_mode = false; |
petrsedlacek | 2:f555c7caa707 | 29 | break; |
petrsedlacek | 2:f555c7caa707 | 30 | default: |
petrsedlacek | 2:f555c7caa707 | 31 | tx_mode = true; |
petrsedlacek | 2:f555c7caa707 | 32 | pc2.printf("Wrong number! Default TX Mode was set"); |
petrsedlacek | 2:f555c7caa707 | 33 | wait_ms(1000); |
petrsedlacek | 2:f555c7caa707 | 34 | break; |
petrsedlacek | 2:f555c7caa707 | 35 | } |
petrsedlacek | 2:f555c7caa707 | 36 | //Clear the console window |
petrsedlacek | 2:f555c7caa707 | 37 | pc2.puts("\e[2J\e[H"); |
petrsedlacek | 2:f555c7caa707 | 38 | |
petrsedlacek | 2:f555c7caa707 | 39 | pc2.printf("Select Input. If automatic is set, the message is transmitted repeatedly\n in short intervals.:\n"); |
petrsedlacek | 2:f555c7caa707 | 40 | pc2.printf("1: Keyboard\n2: Automatic\n"); |
petrsedlacek | 2:f555c7caa707 | 41 | //Select keyboard input or automatic mode, if automatic mode is set and the device is in TX mode, select time interval |
petrsedlacek | 2:f555c7caa707 | 42 | switch (pc2.getc()) { |
petrsedlacek | 2:f555c7caa707 | 43 | case '1': |
petrsedlacek | 2:f555c7caa707 | 44 | keyboard_mode = true; |
petrsedlacek | 2:f555c7caa707 | 45 | break; |
petrsedlacek | 2:f555c7caa707 | 46 | case '2': |
petrsedlacek | 2:f555c7caa707 | 47 | keyboard_mode = false; |
petrsedlacek | 2:f555c7caa707 | 48 | if (tx_mode) { |
petrsedlacek | 2:f555c7caa707 | 49 | pc2.puts("\e[2J\e[H"); |
petrsedlacek | 2:f555c7caa707 | 50 | pc2.printf("Please specify a time interval. The interval must be an integer number:\n"); |
petrsedlacek | 2:f555c7caa707 | 51 | interval = pc2.getc() - '0'; |
petrsedlacek | 2:f555c7caa707 | 52 | } |
petrsedlacek | 2:f555c7caa707 | 53 | break; |
petrsedlacek | 2:f555c7caa707 | 54 | default: |
petrsedlacek | 2:f555c7caa707 | 55 | keyboard_mode = true; |
petrsedlacek | 2:f555c7caa707 | 56 | pc2.printf("Wrong number! Default Automatic mode was set"); |
petrsedlacek | 2:f555c7caa707 | 57 | wait_ms(1000); |
petrsedlacek | 2:f555c7caa707 | 58 | break; |
petrsedlacek | 2:f555c7caa707 | 59 | } |
petrsedlacek | 2:f555c7caa707 | 60 | //Clear the console window |
petrsedlacek | 2:f555c7caa707 | 61 | pc2.puts("\e[2J\e[H"); |
petrsedlacek | 2:f555c7caa707 | 62 | |
petrsedlacek | 2:f555c7caa707 | 63 | pc2.printf("Type in the RF channel depending on the speed in the range of 2400 - 2525.\n The channel must be the same for RX and TX!: \n"); |
petrsedlacek | 2:f555c7caa707 | 64 | //Type the number of desired RF channel in range |
petrsedlacek | 2:f555c7caa707 | 65 | pc2.gets(input, 5); |
petrsedlacek | 2:f555c7caa707 | 66 | frequency = (int) strtol(input, &ptr, 10); |
petrsedlacek | 2:f555c7caa707 | 67 | pc2.printf("Selected frequency: %d\n", frequency); |
petrsedlacek | 2:f555c7caa707 | 68 | if (frequency >= 2400 && frequency <=2525) { |
petrsedlacek | 2:f555c7caa707 | 69 | nrf24l01p.setRfFrequency(frequency); |
petrsedlacek | 2:f555c7caa707 | 70 | } |
petrsedlacek | 2:f555c7caa707 | 71 | //If wrong number was set, default frequency will be set |
petrsedlacek | 2:f555c7caa707 | 72 | else { |
petrsedlacek | 2:f555c7caa707 | 73 | pc2.printf("Wrong frequency! Default frequency was set (2402 MHz)\n"); |
petrsedlacek | 2:f555c7caa707 | 74 | } |
petrsedlacek | 2:f555c7caa707 | 75 | //Clear the console window |
petrsedlacek | 2:f555c7caa707 | 76 | pc2.puts("\e[2J\e[H"); |
petrsedlacek | 2:f555c7caa707 | 77 | |
petrsedlacek | 2:f555c7caa707 | 78 | pc2.printf("Select radio output power:\n"); |
petrsedlacek | 2:f555c7caa707 | 79 | pc2.printf("1: 0 dB\n2: -6 dB\n3: -12 dB\n4: -18 dB\n"); |
petrsedlacek | 2:f555c7caa707 | 80 | //Select the RF output power |
petrsedlacek | 2:f555c7caa707 | 81 | switch (pc2.getc()) { |
petrsedlacek | 2:f555c7caa707 | 82 | case '1': |
petrsedlacek | 2:f555c7caa707 | 83 | nrf24l01p.setRfOutputPower(NRF24L01P_TX_PWR_ZERO_DB); |
petrsedlacek | 2:f555c7caa707 | 84 | break; |
petrsedlacek | 2:f555c7caa707 | 85 | case '2': |
petrsedlacek | 2:f555c7caa707 | 86 | nrf24l01p.setRfOutputPower(NRF24L01P_TX_PWR_MINUS_6_DB); |
petrsedlacek | 2:f555c7caa707 | 87 | break; |
petrsedlacek | 2:f555c7caa707 | 88 | case '3': |
petrsedlacek | 2:f555c7caa707 | 89 | nrf24l01p.setRfOutputPower(NRF24L01P_TX_PWR_MINUS_12_DB); |
petrsedlacek | 2:f555c7caa707 | 90 | break; |
petrsedlacek | 2:f555c7caa707 | 91 | case '4': |
petrsedlacek | 2:f555c7caa707 | 92 | nrf24l01p.setRfOutputPower(NRF24L01P_TX_PWR_MINUS_18_DB); |
petrsedlacek | 2:f555c7caa707 | 93 | break; |
petrsedlacek | 2:f555c7caa707 | 94 | default: |
petrsedlacek | 2:f555c7caa707 | 95 | pc2.printf("Wrong number! Default value was set (0 dB)\n"); |
petrsedlacek | 2:f555c7caa707 | 96 | wait_ms(1000); |
petrsedlacek | 2:f555c7caa707 | 97 | break; |
petrsedlacek | 2:f555c7caa707 | 98 | } |
petrsedlacek | 2:f555c7caa707 | 99 | //Clear the console window |
petrsedlacek | 2:f555c7caa707 | 100 | pc2.puts("\e[2J\e[H"); |
petrsedlacek | 2:f555c7caa707 | 101 | |
petrsedlacek | 2:f555c7caa707 | 102 | pc2.printf("Set air data rate. The air data rate must be the same for RX and TX!:\n"); |
petrsedlacek | 2:f555c7caa707 | 103 | pc2.printf("1: 250 KBps\n2: 1 MBps\n3: 2 MBps\n"); |
petrsedlacek | 2:f555c7caa707 | 104 | //Set the air data rate |
petrsedlacek | 2:f555c7caa707 | 105 | switch (pc2.getc()) { |
petrsedlacek | 2:f555c7caa707 | 106 | case '1': |
petrsedlacek | 2:f555c7caa707 | 107 | nrf24l01p.setAirDataRate(NRF24L01P_DATARATE_250_KBPS); |
petrsedlacek | 2:f555c7caa707 | 108 | break; |
petrsedlacek | 2:f555c7caa707 | 109 | case '2': |
petrsedlacek | 2:f555c7caa707 | 110 | nrf24l01p.setAirDataRate(NRF24L01P_DATARATE_1_MBPS); |
petrsedlacek | 2:f555c7caa707 | 111 | break; |
petrsedlacek | 2:f555c7caa707 | 112 | case '3': |
petrsedlacek | 2:f555c7caa707 | 113 | nrf24l01p.setAirDataRate(NRF24L01P_DATARATE_2_MBPS); |
petrsedlacek | 2:f555c7caa707 | 114 | break; |
petrsedlacek | 2:f555c7caa707 | 115 | default: |
petrsedlacek | 2:f555c7caa707 | 116 | pc2.printf("Wrong number! Default value was set (1 MBps)\n"); |
petrsedlacek | 2:f555c7caa707 | 117 | wait_ms(1000); |
petrsedlacek | 2:f555c7caa707 | 118 | break; |
petrsedlacek | 2:f555c7caa707 | 119 | } |
petrsedlacek | 2:f555c7caa707 | 120 | //Clear the console window |
petrsedlacek | 2:f555c7caa707 | 121 | pc2.puts("\e[2J\e[H"); |
petrsedlacek | 2:f555c7caa707 | 122 | } |
petrsedlacek | 2:f555c7caa707 | 123 | |
petrsedlacek | 2:f555c7caa707 | 124 | |
petrsedlacek | 2:f555c7caa707 | 125 |