ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

Dependencies:   mbed 4DGL-uLCD-SE mbed-rtos nRF24L01P

Committer:
drechtmann3
Date:
Sat Apr 21 17:55:10 2018 +0000
Revision:
25:02cdaf98e4ab
Parent:
24:28c8b01b7d35
Parent:
22:e835b3490280
Child:
26:57731422b129
Merged

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nurchu 0:c35b54fb9c3c 1 #include "mbed.h"
Nurchu 7:0ac1f1ca8aa6 2 #include "rtos.h"
Nurchu 20:e068469ffb89 3
Nurchu 2:dc046ff72566 4 #include "Microphone.h"
Nurchu 20:e068469ffb89 5 #include "Speaker.h"
drechtmann3 18:e2a8ea6f55d3 6 #include "HUD.h"
Nurchu 20:e068469ffb89 7 #include "nRF24L01P.h"
jacksacane 21:95009b231c1f 8 #include "uLCD_4DGL.h"
Nurchu 20:e068469ffb89 9
Nurchu 20:e068469ffb89 10 #include "CircularBuf.h"
Nurchu 20:e068469ffb89 11 #include "CircularBuf.cpp" // Hack to get templates to work
Nurchu 20:e068469ffb89 12
Nurchu 20:e068469ffb89 13 #define TRANSFER_SIZE 4 //added 5:54pm 4/18/18
Nurchu 20:e068469ffb89 14
Nurchu 20:e068469ffb89 15
drechtmann3 1:fc0a2c17e086 16 Serial pc(USBTX, USBRX); // tx, rx
drechtmann3 1:fc0a2c17e086 17 DigitalOut myled1(LED1);
drechtmann3 1:fc0a2c17e086 18 DigitalOut myled2(LED2);
drechtmann3 1:fc0a2c17e086 19 DigitalOut myled3(LED3);
Nurchu 20:e068469ffb89 20
Nurchu 20:e068469ffb89 21 Speaker spkr(p18);
Nurchu 20:e068469ffb89 22 Microphone mymicrophone(p16);
Nurchu 20:e068469ffb89 23
Nurchu 20:e068469ffb89 24 nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq
jacksacane 21:95009b231c1f 25 uLCD_4DGL uLCD(p27,p28,p30); // serial tx, serial rx, reset pin;
Nurchu 20:e068469ffb89 26 CircularBuf<uint8_t> txbuff(30);
Nurchu 20:e068469ffb89 27 CircularBuf<uint8_t> rxbuff(30);
drechtmann3 13:fbcc71fca474 28 Ticker t; //10:41 am 4/20
Nurchu 20:e068469ffb89 29
drechtmann3 24:28c8b01b7d35 30 InterruptIn Button(p18); //changed DitialIn to InterruptIn at 5:54 4/18/18
jacksacane 21:95009b231c1f 31 Thread lcd;
drechtmann3 11:a9f4237eaaa1 32
Nurchu 12:efcfe4c0d9f2 33 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; //making these usable by other voids.
Nurchu 12:efcfe4c0d9f2 34 int txDataCnt = 0;//and this.
Nurchu 12:efcfe4c0d9f2 35 int rxDataCnt = 0;//and this. //David Rechtmann 6.24 pm 4/18/18
Nurchu 20:e068469ffb89 36 uint8_t micvalue[30];
Nurchu 20:e068469ffb89 37 int micvalcount = 0;
Nurchu 20:e068469ffb89 38
jacksacane 21:95009b231c1f 39 int rfFreq;
jacksacane 21:95009b231c1f 40 int dataRate;
jacksacane 21:95009b231c1f 41 unsigned long long rxAddr, txAddr;
jacksacane 21:95009b231c1f 42
jacksacane 21:95009b231c1f 43 enum operatingMode {
jacksacane 21:95009b231c1f 44 RECEIVE = 0,
jacksacane 21:95009b231c1f 45 TRANSMIT
jacksacane 21:95009b231c1f 46 };
jacksacane 21:95009b231c1f 47
jacksacane 21:95009b231c1f 48 operatingMode mode;
jacksacane 21:95009b231c1f 49
jacksacane 21:95009b231c1f 50
Nurchu 12:efcfe4c0d9f2 51 void startup()
Nurchu 12:efcfe4c0d9f2 52 {
drechtmann3 1:fc0a2c17e086 53
drechtmann3 1:fc0a2c17e086 54 // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's
drechtmann3 1:fc0a2c17e086 55 // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019)
drechtmann3 1:fc0a2c17e086 56 // only handles 4 byte transfers in the ATMega code.
drechtmann3 1:fc0a2c17e086 57
Nurchu 12:efcfe4c0d9f2 58 // char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; //making these usable by other voids.
Nurchu 12:efcfe4c0d9f2 59 // int txDataCnt = 0;//and this.
Nurchu 12:efcfe4c0d9f2 60 // int rxDataCnt = 0;//and this. //David Rechtmann 6:24 pm 4/18/18
drechtmann3 1:fc0a2c17e086 61
drechtmann3 1:fc0a2c17e086 62 my_nrf24l01p.powerUp();
drechtmann3 1:fc0a2c17e086 63
drechtmann3 1:fc0a2c17e086 64 // Display the (default) setup of the nRF24L01+ chip
drechtmann3 1:fc0a2c17e086 65 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
drechtmann3 1:fc0a2c17e086 66 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
drechtmann3 1:fc0a2c17e086 67 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
drechtmann3 1:fc0a2c17e086 68 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
drechtmann3 1:fc0a2c17e086 69 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
drechtmann3 1:fc0a2c17e086 70
drechtmann3 1:fc0a2c17e086 71 pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
drechtmann3 1:fc0a2c17e086 72
drechtmann3 1:fc0a2c17e086 73 my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
drechtmann3 1:fc0a2c17e086 74
drechtmann3 1:fc0a2c17e086 75 my_nrf24l01p.setReceiveMode();
drechtmann3 1:fc0a2c17e086 76 my_nrf24l01p.enable();
drechtmann3 10:a8fcfc869fa5 77 }
drechtmann3 1:fc0a2c17e086 78
Nurchu 12:efcfe4c0d9f2 79
Nurchu 12:efcfe4c0d9f2 80 void pctransmit()
Nurchu 12:efcfe4c0d9f2 81 {
Nurchu 12:efcfe4c0d9f2 82 // If we've received anything over the host serial link...
Nurchu 12:efcfe4c0d9f2 83 if ( pc.readable() ) {
drechtmann3 1:fc0a2c17e086 84
Nurchu 12:efcfe4c0d9f2 85 // ...add it to the transmit buffer
Nurchu 12:efcfe4c0d9f2 86 txData[txDataCnt++] = pc.getc();
Nurchu 12:efcfe4c0d9f2 87
Nurchu 12:efcfe4c0d9f2 88 // If the transmit buffer is full
Nurchu 12:efcfe4c0d9f2 89 if ( txDataCnt >= sizeof( txData ) ) {
Nurchu 12:efcfe4c0d9f2 90
Nurchu 12:efcfe4c0d9f2 91 // Send the transmitbuffer via the nRF24L01+
Nurchu 12:efcfe4c0d9f2 92 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
drechtmann3 1:fc0a2c17e086 93
Nurchu 12:efcfe4c0d9f2 94 txDataCnt = 0;
Nurchu 12:efcfe4c0d9f2 95 }
drechtmann3 1:fc0a2c17e086 96
Nurchu 12:efcfe4c0d9f2 97 // Toggle LED1 (to help debug Host -> nRF24L01+ communication)
Nurchu 12:efcfe4c0d9f2 98 myled3 = !myled3;
Nurchu 12:efcfe4c0d9f2 99 }
drechtmann3 1:fc0a2c17e086 100
Nurchu 12:efcfe4c0d9f2 101 // If we've received anything in the nRF24L01+...
Nurchu 12:efcfe4c0d9f2 102 if ( my_nrf24l01p.readable() ) {
drechtmann3 1:fc0a2c17e086 103
Nurchu 12:efcfe4c0d9f2 104 // ...read the data into the receive buffer
Nurchu 12:efcfe4c0d9f2 105 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
Nurchu 12:efcfe4c0d9f2 106
Nurchu 12:efcfe4c0d9f2 107 // Display the receive buffer contents via the host serial link
Nurchu 12:efcfe4c0d9f2 108 for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {
Nurchu 12:efcfe4c0d9f2 109
Nurchu 12:efcfe4c0d9f2 110 pc.putc( rxData[i] );
drechtmann3 1:fc0a2c17e086 111 }
drechtmann3 1:fc0a2c17e086 112
Nurchu 12:efcfe4c0d9f2 113 // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
Nurchu 12:efcfe4c0d9f2 114 myled3 = !myled3;
Nurchu 12:efcfe4c0d9f2 115 }
Nurchu 12:efcfe4c0d9f2 116 }
drechtmann3 1:fc0a2c17e086 117
Nurchu 12:efcfe4c0d9f2 118 void receive() //most of this function added by david at 6:02pm 4/18/18
Nurchu 12:efcfe4c0d9f2 119 {
drechtmann3 24:28c8b01b7d35 120 uint8_t spkrarray[30];
drechtmann3 24:28c8b01b7d35 121 uint8_t spkrtemp;
drechtmann3 24:28c8b01b7d35 122 while (Button.read() == 0) {
jacksacane 22:e835b3490280 123 mode = RECEIVE;
Nurchu 12:efcfe4c0d9f2 124 if (my_nrf24l01p.readable(0)) {
drechtmann3 24:28c8b01b7d35 125 pc.printf("receiving....");
drechtmann3 24:28c8b01b7d35 126 my_nrf24l01p.read(0, (char*)spkrarray, 30);
drechtmann3 24:28c8b01b7d35 127 rxbuff.push(spkrarray, 30);
drechtmann3 24:28c8b01b7d35 128 // rxbuff.push(spkrarray, 30);
drechtmann3 24:28c8b01b7d35 129 rxbuff.pop(&spkrtemp, 1);
drechtmann3 24:28c8b01b7d35 130 spkr.write(spkrtemp);
drechtmann3 24:28c8b01b7d35 131 myled2 = !myled2;
Nurchu 12:efcfe4c0d9f2 132 }
Nurchu 12:efcfe4c0d9f2 133 }
Nurchu 20:e068469ffb89 134 }
drechtmann3 11:a9f4237eaaa1 135
Nurchu 12:efcfe4c0d9f2 136 void transmit()
Nurchu 12:efcfe4c0d9f2 137 {
Nurchu 12:efcfe4c0d9f2 138 // while (mymycrophone.getData()) {
drechtmann3 10:a8fcfc869fa5 139 // txData[txDataCnt++] = mymicrophone.getData();
drechtmann3 10:a8fcfc869fa5 140 // }
Nurchu 12:efcfe4c0d9f2 141 // txData[txDataCnt++] = ;
Nurchu 20:e068469ffb89 142 spkr.turnOff();
drechtmann3 25:02cdaf98e4ab 143
drechtmann3 24:28c8b01b7d35 144 uint8_t txsendary[30];
drechtmann3 24:28c8b01b7d35 145 txbuff.pop(txsendary, 30);
drechtmann3 24:28c8b01b7d35 146 while (Button.read()) {
drechtmann3 24:28c8b01b7d35 147 // my_nrf24l01p.write(0, (char *)micvalue, 30);
drechtmann3 24:28c8b01b7d35 148 pc.printf("transmitting....");
drechtmann3 24:28c8b01b7d35 149 my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*) txsendary, 30);
drechtmann3 24:28c8b01b7d35 150 myled1 = !myled1;
jacksacane 22:e835b3490280 151 mode = TRANSMIT;
drechtmann3 10:a8fcfc869fa5 152 }
Nurchu 12:efcfe4c0d9f2 153 }
Nurchu 12:efcfe4c0d9f2 154
drechtmann3 13:fbcc71fca474 155 void pollmic()
drechtmann3 13:fbcc71fca474 156 {
drechtmann3 24:28c8b01b7d35 157 uint8_t txentry = mymicrophone.getData();
drechtmann3 24:28c8b01b7d35 158 txbuff.push(&txentry, 1);
drechtmann3 24:28c8b01b7d35 159 pc.printf("polling....");
drechtmann3 24:28c8b01b7d35 160 // micvalcount = micvalcount + 1;
drechtmann3 24:28c8b01b7d35 161 // if (micvalcount > 30);
drechtmann3 24:28c8b01b7d35 162 // {
drechtmann3 24:28c8b01b7d35 163 // micvalcount = 0;
drechtmann3 24:28c8b01b7d35 164 // }
Nurchu 20:e068469ffb89 165
Nurchu 20:e068469ffb89 166 }
drechtmann3 13:fbcc71fca474 167
jacksacane 21:95009b231c1f 168 void lcdThread()
jacksacane 21:95009b231c1f 169 {
jacksacane 21:95009b231c1f 170 while (1) {
jacksacane 21:95009b231c1f 171 uLCD.locate(64, 20);
jacksacane 21:95009b231c1f 172 uLCD.printf("Frequency: %d MHz", rfFreq);
jacksacane 21:95009b231c1f 173 uLCD.locate(64, 40);
jacksacane 21:95009b231c1f 174 uLCD.printf("Data Rate: %d kbps", dataRate);
jacksacane 21:95009b231c1f 175 uLCD.locate(64, 60);
jacksacane 21:95009b231c1f 176 uLCD.printf("TX Address: 0x%010llX", txAddr);
jacksacane 21:95009b231c1f 177 uLCD.locate(64, 80);
jacksacane 21:95009b231c1f 178 uLCD.printf("RX Address: 0x%010llX", rxAddr);
jacksacane 21:95009b231c1f 179 uLCD.locate(64, 100);
jacksacane 21:95009b231c1f 180 switch (mode) {
jacksacane 21:95009b231c1f 181 case RECEIVE:
jacksacane 21:95009b231c1f 182 uLCD.printf("Mode: Receiving");
jacksacane 21:95009b231c1f 183 break;
jacksacane 21:95009b231c1f 184 case TRANSMIT:
jacksacane 21:95009b231c1f 185 uLCD.printf("Mode: Transmitting");
jacksacane 21:95009b231c1f 186 break;
jacksacane 21:95009b231c1f 187 }
jacksacane 21:95009b231c1f 188 // Maybe add some graphics too idk
jacksacane 21:95009b231c1f 189 }
jacksacane 21:95009b231c1f 190 }
jacksacane 21:95009b231c1f 191
Nurchu 12:efcfe4c0d9f2 192 int main()
Nurchu 12:efcfe4c0d9f2 193 {
drechtmann3 24:28c8b01b7d35 194 startup();
drechtmann3 24:28c8b01b7d35 195 pc.printf("starting up....");
drechtmann3 24:28c8b01b7d35 196 Button.mode(PullDown);//added 6:23pm 4/18/18
drechtmann3 24:28c8b01b7d35 197 Button.rise(&transmit);
drechtmann3 24:28c8b01b7d35 198 Button.fall(&receive);
drechtmann3 24:28c8b01b7d35 199 t.attach(&pollmic, 0.1);
jacksacane 21:95009b231c1f 200
jacksacane 21:95009b231c1f 201 rfFreq = my_nrf24l01p.getRfFrequency();
jacksacane 21:95009b231c1f 202 dataRate = my_nrf24l01p.getAirDataRate();
jacksacane 21:95009b231c1f 203 rxAddr = my_nrf24l01p.getRxAddress();
jacksacane 21:95009b231c1f 204 txAddr = my_nrf24l01p.getTxAddress();
jacksacane 21:95009b231c1f 205
jacksacane 21:95009b231c1f 206 my_nrf24l01p.setTransferSize(TRANSFER_SIZE);
jacksacane 21:95009b231c1f 207
jacksacane 21:95009b231c1f 208 my_nrf24l01p.setReceiveMode();
jacksacane 21:95009b231c1f 209 my_nrf24l01p.enable();
jacksacane 21:95009b231c1f 210
jacksacane 22:e835b3490280 211 mode = RECEIVE;
jacksacane 22:e835b3490280 212
jacksacane 21:95009b231c1f 213 // Initialize the uLCD
jacksacane 21:95009b231c1f 214 uLCD.baudrate(3000000);
jacksacane 21:95009b231c1f 215 uLCD.background_color(BLACK);
jacksacane 21:95009b231c1f 216
jacksacane 21:95009b231c1f 217 // Register interrupts
drechtmann3 11:a9f4237eaaa1 218 Button.mode(PullUp);//added 6:23pm 4/18/18
drechtmann3 13:fbcc71fca474 219 t.attach(&pollmic, 0.0001);
drechtmann3 13:fbcc71fca474 220 t.attach(&receive, 0.0001);
jacksacane 21:95009b231c1f 221
jacksacane 21:95009b231c1f 222 // Spawn threads
jacksacane 21:95009b231c1f 223 lcd.start(lcdThread);
jacksacane 21:95009b231c1f 224
jacksacane 21:95009b231c1f 225 // Main thread
drechtmann3 1:fc0a2c17e086 226 while (1) {
drechtmann3 24:28c8b01b7d35 227 Thread::yield();
Nurchu 12:efcfe4c0d9f2 228 }
Nurchu 12:efcfe4c0d9f2 229 }