ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

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

Committer:
Nurchu
Date:
Fri Apr 20 14:38:27 2018 +0000
Revision:
12:efcfe4c0d9f2
Parent:
11:a9f4237eaaa1
Child:
13:fbcc71fca474
Set up speaker class and cleaned up main

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