Wireless / Mbed 2 deprecated spi_buttons_leds

Dependencies:   mbed nRF24L01P

Committer:
jeroenkoster
Date:
Mon Dec 10 13:51:23 2018 +0000
Revision:
6:c3d9f6a28df6
Parent:
5:7891519b8809
Child:
7:43bb8be87709
cant think of a message

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jeroenkoster 0:c2ab34dc9018 1 #include "mbed.h"
jeroenkoster 3:74f042e3ec10 2 #include "nRF24L01P.h"
jeroenkoster 0:c2ab34dc9018 3
jeroenkoster 0:c2ab34dc9018 4 //Init Pins
jeroenkoster 0:c2ab34dc9018 5 SPI spi(D11, D12, D13);
jeroenkoster 0:c2ab34dc9018 6 DigitalOut cs(D10, 1);
jeroenkoster 3:74f042e3ec10 7 nRF24L01P my_nrf24l01p(D11, D12, D13, D8, D9, D7); // mosi, miso, sck, csn, ce, irq
jeroenkoster 0:c2ab34dc9018 8
jeroenkoster 3:74f042e3ec10 9
ViriJay 5:7891519b8809 10 #define TRANSFER_SIZE 2
jeroenkoster 3:74f042e3ec10 11 char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
jeroenkoster 3:74f042e3ec10 12 int txDataCnt = 0;
jeroenkoster 3:74f042e3ec10 13 int rxDataCnt = 0;
ViriJay 5:7891519b8809 14
ViriJay 5:7891519b8809 15 int led = 0;
jeroenkoster 6:c3d9f6a28df6 16 bool ackknowledged = true;
jeroenkoster 6:c3d9f6a28df6 17
jeroenkoster 3:74f042e3ec10 18
jeroenkoster 1:cedd9360f5c7 19 void init() {
jeroenkoster 0:c2ab34dc9018 20 cs = 0;
jeroenkoster 0:c2ab34dc9018 21
jeroenkoster 1:cedd9360f5c7 22 spi.write(0x46); // Select IODIR
jeroenkoster 1:cedd9360f5c7 23 spi.write(0x00); // 0000 = Set all to output
jeroenkoster 0:c2ab34dc9018 24 spi.write(0x00);
jeroenkoster 0:c2ab34dc9018 25
jeroenkoster 0:c2ab34dc9018 26 // Deselect the device
jeroenkoster 0:c2ab34dc9018 27 cs = 1;
jeroenkoster 3:74f042e3ec10 28
jeroenkoster 3:74f042e3ec10 29 my_nrf24l01p.powerUp();
jeroenkoster 3:74f042e3ec10 30
jeroenkoster 3:74f042e3ec10 31 // Display the (default) setup of the nRF24L01+ chip
jeroenkoster 3:74f042e3ec10 32 printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
jeroenkoster 3:74f042e3ec10 33 printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
jeroenkoster 3:74f042e3ec10 34 printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
jeroenkoster 3:74f042e3ec10 35 printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
jeroenkoster 3:74f042e3ec10 36 printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );
jeroenkoster 3:74f042e3ec10 37
jeroenkoster 3:74f042e3ec10 38 printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
jeroenkoster 3:74f042e3ec10 39
jeroenkoster 3:74f042e3ec10 40 my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
jeroenkoster 3:74f042e3ec10 41
jeroenkoster 3:74f042e3ec10 42 my_nrf24l01p.setReceiveMode();
jeroenkoster 3:74f042e3ec10 43 my_nrf24l01p.enable();
jeroenkoster 1:cedd9360f5c7 44 }
jeroenkoster 1:cedd9360f5c7 45
jeroenkoster 1:cedd9360f5c7 46 void setLed(int i) {
jeroenkoster 1:cedd9360f5c7 47 cs = 0;
jeroenkoster 1:cedd9360f5c7 48 spi.write(0x46);
jeroenkoster 1:cedd9360f5c7 49 spi.write(0x09);
jeroenkoster 1:cedd9360f5c7 50
jeroenkoster 1:cedd9360f5c7 51 int mask = 1;
jeroenkoster 1:cedd9360f5c7 52 int writeValue = 255;
jeroenkoster 1:cedd9360f5c7 53 writeValue ^= mask << i;
jeroenkoster 1:cedd9360f5c7 54 spi.write(writeValue);
jeroenkoster 1:cedd9360f5c7 55 cs = 1;
jeroenkoster 1:cedd9360f5c7 56 }
jeroenkoster 1:cedd9360f5c7 57
ViriJay 5:7891519b8809 58 void readNRF() {
ViriJay 5:7891519b8809 59 // If we've received anything in the nRF24L01+...
jeroenkoster 3:74f042e3ec10 60 if ( my_nrf24l01p.readable() ) {
jeroenkoster 3:74f042e3ec10 61
jeroenkoster 3:74f042e3ec10 62 // ...read the data into the receive buffer
jeroenkoster 3:74f042e3ec10 63 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
jeroenkoster 3:74f042e3ec10 64
jeroenkoster 3:74f042e3ec10 65 // Display the receive buffer contents via the host serial link
ViriJay 5:7891519b8809 66 printf("Received %d for: %d\n\r", rxData[0], rxData[1]);
jeroenkoster 6:c3d9f6a28df6 67
jeroenkoster 6:c3d9f6a28df6 68 if (rxData[0] == 0) {
jeroenkoster 6:c3d9f6a28df6 69 txData[0] = 1;
jeroenkoster 6:c3d9f6a28df6 70 txData[1] = rxData[1];
jeroenkoster 6:c3d9f6a28df6 71 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE );
jeroenkoster 6:c3d9f6a28df6 72 }
jeroenkoster 6:c3d9f6a28df6 73 if (rxData[0] == 1) {
jeroenkoster 6:c3d9f6a28df6 74 ackknowledged = true;
jeroenkoster 6:c3d9f6a28df6 75 setLed(rxData[1]);
jeroenkoster 6:c3d9f6a28df6 76 }
ViriJay 5:7891519b8809 77 }
ViriJay 5:7891519b8809 78 }
ViriJay 5:7891519b8809 79
jeroenkoster 6:c3d9f6a28df6 80 void sendNumber(int number) {
jeroenkoster 6:c3d9f6a28df6 81
jeroenkoster 6:c3d9f6a28df6 82 // ...add it to the transmit buffer
jeroenkoster 6:c3d9f6a28df6 83 txData[0] = 0;
jeroenkoster 6:c3d9f6a28df6 84 txData[1] = number;
jeroenkoster 6:c3d9f6a28df6 85
jeroenkoster 6:c3d9f6a28df6 86 ackknowledged = false;
jeroenkoster 6:c3d9f6a28df6 87
jeroenkoster 6:c3d9f6a28df6 88 while (!ackknowledged) {
jeroenkoster 6:c3d9f6a28df6 89 printf("Sending led: %d\n\r", number);
jeroenkoster 6:c3d9f6a28df6 90 // Send the transmitbuffer via the nRF24L01+
jeroenkoster 6:c3d9f6a28df6 91 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, TRANSFER_SIZE );
jeroenkoster 6:c3d9f6a28df6 92 readNRF();
jeroenkoster 6:c3d9f6a28df6 93 wait(0.5);
jeroenkoster 6:c3d9f6a28df6 94 }
jeroenkoster 6:c3d9f6a28df6 95 }
jeroenkoster 6:c3d9f6a28df6 96
ViriJay 5:7891519b8809 97 void readButton() {
ViriJay 5:7891519b8809 98 cs = 0;
ViriJay 5:7891519b8809 99 spi.write(0x47);
ViriJay 5:7891519b8809 100 spi.write(0x09);
ViriJay 5:7891519b8809 101 int misoOutput = spi.write(0x00);
ViriJay 5:7891519b8809 102 cs = 1;
ViriJay 5:7891519b8809 103 misoOutput = misoOutput & 192;
ViriJay 5:7891519b8809 104
ViriJay 5:7891519b8809 105 //printf("output miso: %d \n\r", misoOutput);
ViriJay 5:7891519b8809 106 if (misoOutput == 128) { // S1 pressed
ViriJay 5:7891519b8809 107 led = (led + 1) % 6;
ViriJay 5:7891519b8809 108 sendNumber(led);
ViriJay 5:7891519b8809 109 } else if (misoOutput == 64) { // S2 pressed
ViriJay 5:7891519b8809 110 led = (led + 5) % 6;
ViriJay 5:7891519b8809 111 sendNumber(led);
jeroenkoster 3:74f042e3ec10 112 }
jeroenkoster 3:74f042e3ec10 113 }
jeroenkoster 3:74f042e3ec10 114
jeroenkoster 1:cedd9360f5c7 115 int main() {
jeroenkoster 1:cedd9360f5c7 116 cs = 1;
jeroenkoster 1:cedd9360f5c7 117 printf("Initializing. \n\r");
jeroenkoster 1:cedd9360f5c7 118 init();
jeroenkoster 1:cedd9360f5c7 119 printf("Setting Led. \n\r");
jeroenkoster 1:cedd9360f5c7 120
jeroenkoster 1:cedd9360f5c7 121 // Select the device by seting chip select low
jeroenkoster 0:c2ab34dc9018 122 printf("Starting \n\r");
jeroenkoster 0:c2ab34dc9018 123 while (true) {
ViriJay 5:7891519b8809 124 readButton();
ViriJay 5:7891519b8809 125 readNRF();
jeroenkoster 1:cedd9360f5c7 126 wait(0.1);
jeroenkoster 0:c2ab34dc9018 127 }
jeroenkoster 0:c2ab34dc9018 128 }