version used for demonstration

Dependencies:   mbed nRF24L01P

Committer:
apstemmer
Date:
Mon Mar 20 13:11:30 2017 +0000
Revision:
0:02b23ea1d531
working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
apstemmer 0:02b23ea1d531 1 #include "mbed.h"
apstemmer 0:02b23ea1d531 2 #include "nRF24L01P.h"
apstemmer 0:02b23ea1d531 3
apstemmer 0:02b23ea1d531 4 #define TRANSFER_SIZE 2
apstemmer 0:02b23ea1d531 5 #define MAX_HOPS 3
apstemmer 0:02b23ea1d531 6
apstemmer 0:02b23ea1d531 7 DigitalOut led1(LED1);
apstemmer 0:02b23ea1d531 8 DigitalOut led2(LED2);
apstemmer 0:02b23ea1d531 9 DigitalOut mL(p24);
apstemmer 0:02b23ea1d531 10 DigitalOut mR(p23);
apstemmer 0:02b23ea1d531 11
apstemmer 0:02b23ea1d531 12 Ticker send;
apstemmer 0:02b23ea1d531 13 Ticker recv;
apstemmer 0:02b23ea1d531 14
apstemmer 0:02b23ea1d531 15
apstemmer 0:02b23ea1d531 16 Serial pc(USBTX, USBRX); // tx, rx
apstemmer 0:02b23ea1d531 17 nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq
apstemmer 0:02b23ea1d531 18
apstemmer 0:02b23ea1d531 19 void sendData();
apstemmer 0:02b23ea1d531 20 void recvData();
apstemmer 0:02b23ea1d531 21 void retransmit(char (&txData)[TRANSFER_SIZE]);
apstemmer 0:02b23ea1d531 22
apstemmer 0:02b23ea1d531 23 char status = 'n';
apstemmer 0:02b23ea1d531 24
apstemmer 0:02b23ea1d531 25 int main() {
apstemmer 0:02b23ea1d531 26 pc.printf("started mbed\r\n");
apstemmer 0:02b23ea1d531 27 my_nrf24l01p.powerUp();
apstemmer 0:02b23ea1d531 28 pc.baud(57600);
apstemmer 0:02b23ea1d531 29 my_nrf24l01p.setRfFrequency(2480);
apstemmer 0:02b23ea1d531 30 my_nrf24l01p.setAirDataRate(2000);
apstemmer 0:02b23ea1d531 31 my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
apstemmer 0:02b23ea1d531 32 my_nrf24l01p.setReceiveMode();
apstemmer 0:02b23ea1d531 33 my_nrf24l01p.enable();
apstemmer 0:02b23ea1d531 34 recv.attach(&recvData, 0.01);
apstemmer 0:02b23ea1d531 35
apstemmer 0:02b23ea1d531 36 while(1){
apstemmer 0:02b23ea1d531 37 if(pc.readable()){
apstemmer 0:02b23ea1d531 38 status = pc.getc();
apstemmer 0:02b23ea1d531 39 send.attach(&sendData, 0.05);
apstemmer 0:02b23ea1d531 40 pc.printf("set status to %c \n\r", status);
apstemmer 0:02b23ea1d531 41 }
apstemmer 0:02b23ea1d531 42 }
apstemmer 0:02b23ea1d531 43
apstemmer 0:02b23ea1d531 44
apstemmer 0:02b23ea1d531 45 }
apstemmer 0:02b23ea1d531 46
apstemmer 0:02b23ea1d531 47 void sendData(){
apstemmer 0:02b23ea1d531 48 char txData[TRANSFER_SIZE]; //transferring 17bits
apstemmer 0:02b23ea1d531 49 txData[0] = status;
apstemmer 0:02b23ea1d531 50 txData[1] = MAX_HOPS;
apstemmer 0:02b23ea1d531 51 pc.printf("sent packet %c, %d \n\r", txData[0], txData[1]);
apstemmer 0:02b23ea1d531 52 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE);
apstemmer 0:02b23ea1d531 53 led1 = !led1;
apstemmer 0:02b23ea1d531 54 }
apstemmer 0:02b23ea1d531 55
apstemmer 0:02b23ea1d531 56 void recvData(){
apstemmer 0:02b23ea1d531 57 if ( my_nrf24l01p.readable() ) {
apstemmer 0:02b23ea1d531 58
apstemmer 0:02b23ea1d531 59 led2 = !led2;
apstemmer 0:02b23ea1d531 60
apstemmer 0:02b23ea1d531 61 char rxData[TRANSFER_SIZE];
apstemmer 0:02b23ea1d531 62 my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
apstemmer 0:02b23ea1d531 63 retransmit(rxData); //rtr
apstemmer 0:02b23ea1d531 64 switch(rxData[0]){
apstemmer 0:02b23ea1d531 65 case 'g':
apstemmer 0:02b23ea1d531 66 mL = true;
apstemmer 0:02b23ea1d531 67 mR = true;
apstemmer 0:02b23ea1d531 68 break;
apstemmer 0:02b23ea1d531 69 case 's':
apstemmer 0:02b23ea1d531 70 mR = false;
apstemmer 0:02b23ea1d531 71 mL = false;
apstemmer 0:02b23ea1d531 72 break;
apstemmer 0:02b23ea1d531 73 case 'l':
apstemmer 0:02b23ea1d531 74 mR = true;
apstemmer 0:02b23ea1d531 75 mL = false;
apstemmer 0:02b23ea1d531 76 case 'r':
apstemmer 0:02b23ea1d531 77 mR = false;
apstemmer 0:02b23ea1d531 78 mL = true;
apstemmer 0:02b23ea1d531 79 }
apstemmer 0:02b23ea1d531 80 }
apstemmer 0:02b23ea1d531 81 }
apstemmer 0:02b23ea1d531 82
apstemmer 0:02b23ea1d531 83 void retransmit(char (&txData)[TRANSFER_SIZE]){
apstemmer 0:02b23ea1d531 84 char trs[TRANSFER_SIZE];
apstemmer 0:02b23ea1d531 85 for(int i = 0; i < TRANSFER_SIZE; i++) {
apstemmer 0:02b23ea1d531 86 trs[i] = txData[i];
apstemmer 0:02b23ea1d531 87 }
apstemmer 0:02b23ea1d531 88
apstemmer 0:02b23ea1d531 89 trs[1]--;
apstemmer 0:02b23ea1d531 90 if(trs[1] == 0) {
apstemmer 0:02b23ea1d531 91 //pc.printf("Message expired");
apstemmer 0:02b23ea1d531 92 } else {
apstemmer 0:02b23ea1d531 93 my_nrf24l01p.write( NRF24L01P_PIPE_P0, trs, TRANSFER_SIZE);
apstemmer 0:02b23ea1d531 94 }
apstemmer 0:02b23ea1d531 95 }
apstemmer 0:02b23ea1d531 96