Project for MPOA 2015/2016. Communication link with nRF24L01+.

Dependencies:   mbed

Fork of nRF24L01P_Hello_World by Owen Edwards

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?

UserRevisionLine numberNew 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