ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

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

main.cpp

Committer:
drechtmann3
Date:
2018-04-18
Revision:
11:a9f4237eaaa1
Parent:
10:a8fcfc869fa5
Child:
12:efcfe4c0d9f2

File content as of revision 11:a9f4237eaaa1:

#include "mbed.h"
#include "rtos.h"
#include "Microphone.h"
#include "nRF24L01P.h"
#define TRANSFER_SIZE   4 //added 5:54pm 4/18/18
Serial pc(USBTX, USBRX); // tx, rx
 
nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10);    // mosi, miso, sck, csn, ce, irq
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);

Microphone mymicrophone(p16);
InterruptIn Button(p20); //changed DitialIn to InterruptIn at 5:54 4/18/18
AnalogOut speaker(p18); //added 6:34 pm at 4/18/18

    char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; //making these usable by other voids.
    int txDataCnt = 0;//and this.
    int rxDataCnt = 0;//and this. //David Rechtmann 6.24 pm 4/18/18
    
void startup() {

// The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's
//  "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019)
//  only handles 4 byte transfers in the ATMega code.
//define TRANSFER_SIZE   4

 //   char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; //making these usable by other voids.
   // int txDataCnt = 0;//and this.
   // int rxDataCnt = 0;//and this. //David Rechtmann 6:24 pm 4/18/18

    my_nrf24l01p.powerUp();

    // Display the (default) setup of the nRF24L01+ chip
    pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
    pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
    pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
    pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
    pc.printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );

    pc.printf( "Type keys to test transfers:\r\n  (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );

    my_nrf24l01p.setTransferSize( TRANSFER_SIZE );

    my_nrf24l01p.setReceiveMode();
    my_nrf24l01p.enable();
}

    
void pctransmit() {
      // If we've received anything over the host serial link...
        if ( pc.readable() ) {

            // ...add it to the transmit buffer
            txData[txDataCnt++] = pc.getc();

            // If the transmit buffer is full
            if ( txDataCnt >= sizeof( txData ) ) {

                // Send the transmitbuffer via the nRF24L01+
                my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );

                txDataCnt = 0;
            }

            // Toggle LED1 (to help debug Host -> nRF24L01+ communication)
            myled3 = !myled3;
        }

        // If we've received anything in the nRF24L01+...
        if ( my_nrf24l01p.readable() ) {

            // ...read the data into the receive buffer
            rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );

            // Display the receive buffer contents via the host serial link
            for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {

                pc.putc( rxData[i] );
            }

            // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
            myled3 = !myled3;
        }
    }
    //}   
    
void receive() { //most of this function added by david at 6:02pm 4/18/18
   float sample;
    float average = 0.67/3.3;//initial DC bias level
 while (Button == 0) {
     if (my_nrf24l01p.readable(0)) {
         my_nrf24l01p.read(0, rxData, 1 );//replace thrid val w/ 1?
          sample = uint8_t (rxData);
          average =  0.9999*average + 0.0001*sample; //This is in the mPA demo but I'm not sure how it works -david
          speaker = 0.5 +((sample - average)*33.0);
         }
   if ( txDataCnt >= sizeof( txData ) ) { //i'm not sure what this does??? -david

                // Send the transmitbuffer via the nRF24L01+
                my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );

                txDataCnt = 0;
            }      
     
     }
 }
 
void transmit() {
  //  while   (mymycrophone.getData()) {
    //     txData[txDataCnt++] = mymicrophone.getData();
    //    }
   // txData[txDataCnt++] = ;
   my_nrf24l01P.setTransmitMode(); // for latest revision 5:52pm 4/18/1, this doesn't compile and I don't know why.
   speaker = 0;
   while (Button == 1) {
    my_nrf24l01P.write(0, mymicrophone.getData(), txDataCnt);
    }
    }
int main() {
    Button.mode(PullUp);//added 6:23pm 4/18/18
    Button.rise(&transmit);
    Button.fall(&receive);
    while (1) {
        
        }
    }