Arthur Stemmer
/
demo
version used for demonstration
main.cpp@0:02b23ea1d531, 2017-03-20 (annotated)
- Committer:
- apstemmer
- Date:
- Mon Mar 20 13:11:30 2017 +0000
- Revision:
- 0:02b23ea1d531
working version
Who changed what in which revision?
User | Revision | Line number | New 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 |