Wireless / Mbed 2 deprecated spi_buttons_leds

Dependencies:   mbed nRF24L01P

Committer:
jeroenkoster
Date:
Mon Dec 10 13:58:55 2018 +0000
Revision:
7:43bb8be87709
Parent:
6:c3d9f6a28df6
bla;

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