ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

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

Committer:
Nurchu
Date:
Fri Apr 20 18:39:20 2018 +0000
Revision:
20:e068469ffb89
Parent:
18:e2a8ea6f55d3
Child:
21:95009b231c1f
Child:
24:28c8b01b7d35
Cleaned up some comments/code; Compiles now

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"
Nurchu 20:e068469ffb89 8
Nurchu 20:e068469ffb89 9 #include "CircularBuf.h"
Nurchu 20:e068469ffb89 10 #include "CircularBuf.cpp" // Hack to get templates to work
Nurchu 20:e068469ffb89 11
Nurchu 20:e068469ffb89 12 #define TRANSFER_SIZE 4 //added 5:54pm 4/18/18
Nurchu 20:e068469ffb89 13
Nurchu 20:e068469ffb89 14
drechtmann3 1:fc0a2c17e086 15 Serial pc(USBTX, USBRX); // tx, rx
drechtmann3 1:fc0a2c17e086 16 DigitalOut myled1(LED1);
drechtmann3 1:fc0a2c17e086 17 DigitalOut myled2(LED2);
drechtmann3 1:fc0a2c17e086 18 DigitalOut myled3(LED3);
Nurchu 20:e068469ffb89 19
Nurchu 20:e068469ffb89 20 Speaker spkr(p18);
Nurchu 20:e068469ffb89 21 Microphone mymicrophone(p16);
Nurchu 20:e068469ffb89 22
Nurchu 20:e068469ffb89 23 nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq
Nurchu 20:e068469ffb89 24 CircularBuf<uint8_t> txbuff(30);
Nurchu 20:e068469ffb89 25 CircularBuf<uint8_t> rxbuff(30);
Nurchu 20:e068469ffb89 26
drechtmann3 13:fbcc71fca474 27 Ticker t; //10:41 am 4/20
drechtmann3 11:a9f4237eaaa1 28 InterruptIn Button(p20); //changed DitialIn to InterruptIn at 5:54 4/18/18
drechtmann3 11:a9f4237eaaa1 29
Nurchu 12:efcfe4c0d9f2 30 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; //making these usable by other voids.
Nurchu 12:efcfe4c0d9f2 31 int txDataCnt = 0;//and this.
Nurchu 12:efcfe4c0d9f2 32 int rxDataCnt = 0;//and this. //David Rechtmann 6.24 pm 4/18/18
Nurchu 20:e068469ffb89 33 uint8_t micvalue[30];
Nurchu 20:e068469ffb89 34 int micvalcount = 0;
Nurchu 20:e068469ffb89 35
Nurchu 12:efcfe4c0d9f2 36 void startup()
Nurchu 12:efcfe4c0d9f2 37 {
drechtmann3 1:fc0a2c17e086 38
drechtmann3 1:fc0a2c17e086 39 // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's
drechtmann3 1:fc0a2c17e086 40 // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019)
drechtmann3 1:fc0a2c17e086 41 // only handles 4 byte transfers in the ATMega code.
drechtmann3 1:fc0a2c17e086 42
Nurchu 12:efcfe4c0d9f2 43 // char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; //making these usable by other voids.
Nurchu 12:efcfe4c0d9f2 44 // int txDataCnt = 0;//and this.
Nurchu 12:efcfe4c0d9f2 45 // int rxDataCnt = 0;//and this. //David Rechtmann 6:24 pm 4/18/18
drechtmann3 1:fc0a2c17e086 46
drechtmann3 1:fc0a2c17e086 47 my_nrf24l01p.powerUp();
drechtmann3 1:fc0a2c17e086 48
drechtmann3 1:fc0a2c17e086 49 // Display the (default) setup of the nRF24L01+ chip
drechtmann3 1:fc0a2c17e086 50 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
drechtmann3 1:fc0a2c17e086 51 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
drechtmann3 1:fc0a2c17e086 52 pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
drechtmann3 1:fc0a2c17e086 53 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
drechtmann3 1:fc0a2c17e086 54 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
drechtmann3 1:fc0a2c17e086 55
drechtmann3 1:fc0a2c17e086 56 pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
drechtmann3 1:fc0a2c17e086 57
drechtmann3 1:fc0a2c17e086 58 my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
drechtmann3 1:fc0a2c17e086 59
drechtmann3 1:fc0a2c17e086 60 my_nrf24l01p.setReceiveMode();
drechtmann3 1:fc0a2c17e086 61 my_nrf24l01p.enable();
drechtmann3 10:a8fcfc869fa5 62 }
drechtmann3 1:fc0a2c17e086 63
Nurchu 12:efcfe4c0d9f2 64
Nurchu 12:efcfe4c0d9f2 65 void pctransmit()
Nurchu 12:efcfe4c0d9f2 66 {
Nurchu 12:efcfe4c0d9f2 67 // If we've received anything over the host serial link...
Nurchu 12:efcfe4c0d9f2 68 if ( pc.readable() ) {
drechtmann3 1:fc0a2c17e086 69
Nurchu 12:efcfe4c0d9f2 70 // ...add it to the transmit buffer
Nurchu 12:efcfe4c0d9f2 71 txData[txDataCnt++] = pc.getc();
Nurchu 12:efcfe4c0d9f2 72
Nurchu 12:efcfe4c0d9f2 73 // If the transmit buffer is full
Nurchu 12:efcfe4c0d9f2 74 if ( txDataCnt >= sizeof( txData ) ) {
Nurchu 12:efcfe4c0d9f2 75
Nurchu 12:efcfe4c0d9f2 76 // Send the transmitbuffer via the nRF24L01+
Nurchu 12:efcfe4c0d9f2 77 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
drechtmann3 1:fc0a2c17e086 78
Nurchu 12:efcfe4c0d9f2 79 txDataCnt = 0;
Nurchu 12:efcfe4c0d9f2 80 }
drechtmann3 1:fc0a2c17e086 81
Nurchu 12:efcfe4c0d9f2 82 // Toggle LED1 (to help debug Host -> nRF24L01+ communication)
Nurchu 12:efcfe4c0d9f2 83 myled3 = !myled3;
Nurchu 12:efcfe4c0d9f2 84 }
drechtmann3 1:fc0a2c17e086 85
Nurchu 12:efcfe4c0d9f2 86 // If we've received anything in the nRF24L01+...
Nurchu 12:efcfe4c0d9f2 87 if ( my_nrf24l01p.readable() ) {
drechtmann3 1:fc0a2c17e086 88
Nurchu 12:efcfe4c0d9f2 89 // ...read the data into the receive buffer
Nurchu 12:efcfe4c0d9f2 90 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
Nurchu 12:efcfe4c0d9f2 91
Nurchu 12:efcfe4c0d9f2 92 // Display the receive buffer contents via the host serial link
Nurchu 12:efcfe4c0d9f2 93 for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {
Nurchu 12:efcfe4c0d9f2 94
Nurchu 12:efcfe4c0d9f2 95 pc.putc( rxData[i] );
drechtmann3 1:fc0a2c17e086 96 }
drechtmann3 1:fc0a2c17e086 97
Nurchu 12:efcfe4c0d9f2 98 // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
Nurchu 12:efcfe4c0d9f2 99 myled3 = !myled3;
Nurchu 12:efcfe4c0d9f2 100 }
Nurchu 12:efcfe4c0d9f2 101 }
drechtmann3 1:fc0a2c17e086 102
Nurchu 12:efcfe4c0d9f2 103 void receive() //most of this function added by david at 6:02pm 4/18/18
Nurchu 12:efcfe4c0d9f2 104 {
Nurchu 20:e068469ffb89 105 uint8_t spkrarray[29];
Nurchu 12:efcfe4c0d9f2 106 while (Button == 0) {
Nurchu 12:efcfe4c0d9f2 107 if (my_nrf24l01p.readable(0)) {
Nurchu 20:e068469ffb89 108 rxbuff.push(spkrarray, 30);
drechtmann3 18:e2a8ea6f55d3 109 spkr.write(spkrarray[1]);
Nurchu 12:efcfe4c0d9f2 110 }
Nurchu 12:efcfe4c0d9f2 111 }
Nurchu 20:e068469ffb89 112 }
drechtmann3 11:a9f4237eaaa1 113
Nurchu 12:efcfe4c0d9f2 114 void transmit()
Nurchu 12:efcfe4c0d9f2 115 {
Nurchu 12:efcfe4c0d9f2 116 // while (mymycrophone.getData()) {
drechtmann3 10:a8fcfc869fa5 117 // txData[txDataCnt++] = mymicrophone.getData();
drechtmann3 10:a8fcfc869fa5 118 // }
Nurchu 12:efcfe4c0d9f2 119 // txData[txDataCnt++] = ;
Nurchu 20:e068469ffb89 120 spkr.turnOff();
Nurchu 12:efcfe4c0d9f2 121 while (Button == 1) {
Nurchu 20:e068469ffb89 122 my_nrf24l01p.write(0, (char *)micvalue, 30);
drechtmann3 10:a8fcfc869fa5 123 }
Nurchu 12:efcfe4c0d9f2 124 }
Nurchu 12:efcfe4c0d9f2 125
drechtmann3 13:fbcc71fca474 126 void pollmic()
drechtmann3 13:fbcc71fca474 127 {
drechtmann3 13:fbcc71fca474 128 micvalue[micvalcount] = mymicrophone.getData();
drechtmann3 13:fbcc71fca474 129 micvalcount = micvalcount + 1;
Nurchu 20:e068469ffb89 130 if (micvalcount > 30);
Nurchu 20:e068469ffb89 131 {
Nurchu 20:e068469ffb89 132 micvalcount = 0;
drechtmann3 13:fbcc71fca474 133 }
Nurchu 20:e068469ffb89 134
Nurchu 20:e068469ffb89 135 }
drechtmann3 13:fbcc71fca474 136
Nurchu 12:efcfe4c0d9f2 137 int main()
Nurchu 12:efcfe4c0d9f2 138 {
drechtmann3 11:a9f4237eaaa1 139 Button.mode(PullUp);//added 6:23pm 4/18/18
drechtmann3 13:fbcc71fca474 140 t.attach(&pollmic, 0.0001);
drechtmann3 13:fbcc71fca474 141 t.attach(&receive, 0.0001);
drechtmann3 1:fc0a2c17e086 142 while (1) {
Nurchu 12:efcfe4c0d9f2 143
Nurchu 12:efcfe4c0d9f2 144 }
Nurchu 12:efcfe4c0d9f2 145 }