Test program for the Nordic Semi nRF24L01 Transceiver Module (http://www.sparkfun.com/products/691), talking to another module connected to SparkFun\'s Nordic Serial Interface Board (http://www.sparkfun.com/products/9019).

Dependencies:   mbed nRF24L01P

Revision:
3:37c053b30ca0
Parent:
2:766f2f117453
Child:
4:7fa578849b23
--- a/main.cpp	Wed Dec 12 12:14:42 2018 +0000
+++ b/main.cpp	Thu Dec 13 11:30:36 2018 +0000
@@ -3,41 +3,36 @@
 
 Serial pc(USBTX, USBRX); // tx, rx
 
-SPI spi(D11, D12, D13);
-DigitalOut cs(D10, 1);
 nRF24L01P my_nrf24l01p(D11, D12, D13, D8, D9, D7);
 
-int led = 0;
-int newLed = 0;
+#define TRANSFER_SIZE   4
 
-void setLed(int i) {
-    led = i;
-    cs = 0;
-    spi.write(0x46);
-    spi.write(0x09);
-    
-    int mask = 1;
-    int writeValue = 255;
-    writeValue ^= mask << i;
-    spi.write(writeValue);
-    cs = 1;
+void setDefaults() {
+    my_nrf24l01p.setRfFrequency(DEFAULT_NRF24L01P_RF_FREQUENCY);
+    my_nrf24l01p.setRfOutputPower(DEFAULT_NRF24L01P_TX_PWR);
+    my_nrf24l01p.setAirDataRate(DEFAULT_NRF24L01P_DATARATE);
+}
+
+void setFrequency(int frequency) {
+    my_nrf24l01p.setRfFrequency(frequency);
 }
 
+void setPower(int power) {
+    my_nrf24l01p.setRfOutputPower(power);
+}
 
-int readButton() {
-    cs = 0;
-    spi.write(0x47);
-    spi.write(0x09);
-    int misoOutput = spi.write(0x00);
-    cs = 1;
-    
-    misoOutput = misoOutput & 192;
-    if (misoOutput == 128) { // S1 pressed
-        return 1;    
-    } else if (misoOutput == 64) { // S2 pressed
-        return 5;
-    }
-    return 0;
+void setDataReet(int datareet) {
+    my_nrf24l01p.setAirDataRate(datareet);
+}
+
+void printSettings() {
+    // 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 );
 }
 
 int main() {
@@ -45,73 +40,60 @@
 // 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   2
-
-    cs = 0;
- 
-    spi.write(0x46); // Select IODIR
-    spi.write(0x00); // 0000 = Set all to output
-    spi.write(0x00);
-  
-    // Deselect the device
-    cs = 1;
-
     char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
-    
-    bool ackknowledged = false;
+    int txDataCnt = 0;
+    int rxDataCnt = 0;
 
     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 );
+    
+    printSettings();
+    
+    setFrequency(2450);
+    setPower(-6);
+    setDataReet(1000);
+    
+    printSettings();
+    
+    setDefaults();
+    
+    printSettings();
 
     my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
 
     my_nrf24l01p.setReceiveMode();
     my_nrf24l01p.enable();
 
-    setLed(led);
     while (1) {
-        if (ackknowledged == false) {
-            my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE );
+
+        // 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;
+            }
+
         }
+
         // If we've received anything in the nRF24L01+...
         if ( my_nrf24l01p.readable() ) {
-            led = rxData[1];
+
             // ...read the data into the receive buffer
-            my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
+            rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
 
-            if (rxData[0] == 0) { // Request
-                setLed(led);
-                pc.printf("Received request: %d \n\r",rxData[1]);
-                txData[0] = 1;
-                txData[1] = led;
-                my_nrf24l01p.write( NRF24L01P_PIPE_P0
-                , txData, TRANSFER_SIZE );
-                
-            } else if (rxData[0] == 1) { // Ack
-                ackknowledged = true;
-                pc.printf("Received Ack: %d \n\r",rxData[1]);
-                setLed(led);
-                
-                // Set light
-            } else {
-                pc.printf("rxData[0] not recognized \n\r");
+            // Display the receive buffer contents via the host serial link
+            for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {
+
+                pc.putc( rxData[i] );
             }
-        }
-        newLed = (led + readButton()) % 6;
-        while (newLed != led && !ackknowledged) {
-            printf("Should request %d \n\r", newLed);
-            txData[0] = 0;
-            txData[1] = newLed;
-            my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE );
-            wait(0.2);
+
         }
     }
-}
+}
\ No newline at end of file