ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

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

Committer:
drechtmann3
Date:
Sat Apr 21 17:51:24 2018 +0000
Revision:
24:28c8b01b7d35
Parent:
20:e068469ffb89
Child:
25:02cdaf98e4ab
Setup tranmission and recieve

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