Eduvance SIT2017 / Mbed 2 deprecated WSN_Node1

Dependencies:   mbed nRF24L01P

Fork of WSN_Coordinator by Eduvance SIT2017

Files at this revision

API Documentation at this revision

Comitter:
janhavi
Date:
Mon Jun 06 10:57:33 2016 +0000
Parent:
3:208abcd4751d
Child:
5:c44298b018f4
Commit message:
Single Receiver for multiple sensors connected to different transmitters. Uses NRF logical pipes for communication over same RF channel.

Changed in this revision

Receiver.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Receiver.cpp	Tue May 24 10:08:51 2016 +0000
+++ b/Receiver.cpp	Mon Jun 06 10:57:33 2016 +0000
@@ -1,55 +1,81 @@
+/*****Multiceiver wireless network*****/
+
 #include "mbed.h"
 #include "nRF24L01P.h"
  
 Serial pc(USBTX, USBRX); // tx, rx
  
 nRF24L01P my_nrf24l01p(PTD2, PTD3, PTD1, PTD0, PTD5, PTD4);    // mosi, miso, sck, csn, ce, irq
-DigitalOut GreenLED(LED2);
-PwmOut RedLed(LED1);
+
+//blue for pipe1 and green for pipe0
+DigitalOut GreenLED(PTA12);
+DigitalOut BlueLED(PTC8);
  
 int main() {
     
-    char count[2];
-    char RxDataCnt;
+    char count[1];
+    char RxDataCnt_PIPE0, RxDataCnt_PIPE1;
     char temp;
     
-    float ldr_val, pot_val;
- 
+    //specifying address same as transmitter for pipe0 and pipe1
+    long long RxAddress_PIPE1 = 0xE2E2E2E2E2;
+    long long RxAddress_PIPE0 = 0xC2C2C2C2C2;
+    
     my_nrf24l01p.powerUp();
     my_nrf24l01p.setRfFrequency(2410);
+    
+    //set rx address with default address and for specified pipe
+    my_nrf24l01p.setRxAddress(RxAddress_PIPE1, DEFAULT_NRF24L01P_ADDRESS_WIDTH, NRF24L01P_PIPE_P1);
+    my_nrf24l01p.setRxAddress(RxAddress_PIPE0, DEFAULT_NRF24L01P_ADDRESS_WIDTH, NRF24L01P_PIPE_P0);
+    
  
     // 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() );
+    
+    //display rx address for both pipes
+    pc.printf( "nRF24L01+ RX Address - PIPE0  : 0x%010llX\r\n", my_nrf24l01p.getRxAddress(NRF24L01P_PIPE_P0) );
+    pc.printf( "nRF24L01+ RX Address - PIPE1  : 0x%010llX\r\n", my_nrf24l01p.getRxAddress(NRF24L01P_PIPE_P1) );
  
-    pc.printf( "Simple 2 Byte Receiver\r\n" );
+    pc.printf( "Wireless Sensor Network - Multiceiver\r\n" );
     
-    RxDataCnt = 2;
-    my_nrf24l01p.setTransferSize( RxDataCnt );
+    RxDataCnt_PIPE0 = 1;
+    RxDataCnt_PIPE1 = 1;
+    
+    //set transfer size explicitly for both pipes
+    my_nrf24l01p.setTransferSize(RxDataCnt_PIPE1, NRF24L01P_PIPE_P1);
+    my_nrf24l01p.setTransferSize(RxDataCnt_PIPE0, NRF24L01P_PIPE_P0);
     
     my_nrf24l01p.setReceiveMode();
     my_nrf24l01p.enable();
  
     while (1) {
- 
-        // If we've received anything in the nRF24L01+...
-        if ( my_nrf24l01p.readable() ) {
+        
+        //check if data is available in pipe0
+        if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P0) ) {
  
             // ...read the data into the receive buffer
-            temp = my_nrf24l01p.read( NRF24L01P_PIPE_P0, count, RxDataCnt );
+            temp = my_nrf24l01p.read( NRF24L01P_PIPE_P0, count, RxDataCnt_PIPE0 );
  
-            ldr_val = count[0]/255.0;
-            pot_val = count[1]/255.0;
-            
-            //change according to need here; Im printing on serial terminal
-            pc.printf("Received: %d bytes ;LDR=%.3f, POT=%.3f\r\n",temp,ldr_val, pot_val);
+            pc.printf("Received: %d bytes from PIPE0; POT=%d\r\n",temp, count[0]);
             
             // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
             GreenLED = !GreenLED;
             wait_ms(10);
         }
+        
+        //check if data is there in pipe1
+        if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P1) ) {
+ 
+            // ...read the data into the receive buffer
+            temp = my_nrf24l01p.read( NRF24L01P_PIPE_P1, count, RxDataCnt_PIPE1 );
+ 
+            pc.printf("Received: %d bytes from PIPE1; POT=%d\r\n",temp, count[0]);
+            
+            // Toggle LED2 (to help debug nRF24L01+ -> Host communication)
+            BlueLED = !BlueLED;
+            wait_ms(10);
+        }
     }
 }
\ No newline at end of file