Wireless / Mbed 2 deprecated spi_buttons_leds

Dependencies:   mbed nRF24L01P

Committer:
jeroenkoster
Date:
Tue Dec 04 13:34:17 2018 +0000
Revision:
3:74f042e3ec10
Parent:
1:cedd9360f5c7
Child:
4:ae1520241a90
add first RF code

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