Node on PIPE0 for Wireless sensor network over NRF.
Fork of WSN_Coordinator by
Diff: Receiver.cpp
- Revision:
- 4:b3a70cbb7c81
- Parent:
- 3:208abcd4751d
diff -r 208abcd4751d -r b3a70cbb7c81 Receiver.cpp --- 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