Wireless / Mbed 2 deprecated spi_buttons_leds

Dependencies:   mbed nRF24L01P

Committer:
ViriJay
Date:
Mon Dec 10 13:26:08 2018 +0000
Revision:
5:7891519b8809
Parent:
4:ae1520241a90
Child:
6:c3d9f6a28df6
kinda working (nog geen ack systeem)

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 3:74f042e3ec10 16
jeroenkoster 1:cedd9360f5c7 17 void init() {
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
ViriJay 5:7891519b8809 56 void sendNumber(int number) {
ViriJay 5:7891519b8809 57 printf("Sending led: %d\n\r", number);
ViriJay 5:7891519b8809 58 // ...add it to the transmit buffer
ViriJay 5:7891519b8809 59 txData[txDataCnt++] = 0;
ViriJay 5:7891519b8809 60 txData[txDataCnt++] = (number);
jeroenkoster 1:cedd9360f5c7 61
ViriJay 5:7891519b8809 62 bool ackReceived = false;
jeroenkoster 3:74f042e3ec10 63
jeroenkoster 3:74f042e3ec10 64 // If the transmit buffer is full
jeroenkoster 3:74f042e3ec10 65 if ( txDataCnt >= sizeof( txData ) ) {
ViriJay 5:7891519b8809 66 for(int i = 0; i <= txDataCnt; i++){
ViriJay 5:7891519b8809 67 printf("%c\n\r", txData[i]);
ViriJay 5:7891519b8809 68 }
jeroenkoster 3:74f042e3ec10 69
jeroenkoster 3:74f042e3ec10 70 // Send the transmitbuffer via the nRF24L01+
jeroenkoster 3:74f042e3ec10 71 my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );
jeroenkoster 3:74f042e3ec10 72
jeroenkoster 3:74f042e3ec10 73 txDataCnt = 0;
jeroenkoster 3:74f042e3ec10 74 }
ViriJay 5:7891519b8809 75 }
ViriJay 5:7891519b8809 76
ViriJay 5:7891519b8809 77 void readNRF() {
ViriJay 5:7891519b8809 78 // If we've received anything in the nRF24L01+...
jeroenkoster 3:74f042e3ec10 79 if ( my_nrf24l01p.readable() ) {
jeroenkoster 3:74f042e3ec10 80
jeroenkoster 3:74f042e3ec10 81 // ...read the data into the receive buffer
jeroenkoster 3:74f042e3ec10 82 rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );
jeroenkoster 3:74f042e3ec10 83
jeroenkoster 3:74f042e3ec10 84 // Display the receive buffer contents via the host serial link
ViriJay 5:7891519b8809 85 printf("Received %d for: %d\n\r", rxData[0], rxData[1]);
ViriJay 5:7891519b8809 86 }
ViriJay 5:7891519b8809 87 }
ViriJay 5:7891519b8809 88
ViriJay 5:7891519b8809 89 void readButton() {
ViriJay 5:7891519b8809 90 cs = 0;
ViriJay 5:7891519b8809 91 spi.write(0x47);
ViriJay 5:7891519b8809 92 spi.write(0x09);
ViriJay 5:7891519b8809 93 int misoOutput = spi.write(0x00);
ViriJay 5:7891519b8809 94 cs = 1;
ViriJay 5:7891519b8809 95 misoOutput = misoOutput & 192;
ViriJay 5:7891519b8809 96
ViriJay 5:7891519b8809 97 //printf("output miso: %d \n\r", misoOutput);
ViriJay 5:7891519b8809 98 if (misoOutput == 128) { // S1 pressed
ViriJay 5:7891519b8809 99 led = (led + 1) % 6;
ViriJay 5:7891519b8809 100 sendNumber(led);
ViriJay 5:7891519b8809 101 } else if (misoOutput == 64) { // S2 pressed
ViriJay 5:7891519b8809 102 led = (led + 5) % 6;
ViriJay 5:7891519b8809 103 sendNumber(led);
jeroenkoster 3:74f042e3ec10 104 }
ViriJay 5:7891519b8809 105
ViriJay 5:7891519b8809 106 setLed(led);
jeroenkoster 3:74f042e3ec10 107 }
jeroenkoster 3:74f042e3ec10 108
jeroenkoster 1:cedd9360f5c7 109 int main() {
jeroenkoster 1:cedd9360f5c7 110 cs = 1;
jeroenkoster 1:cedd9360f5c7 111 printf("Initializing. \n\r");
jeroenkoster 1:cedd9360f5c7 112 init();
jeroenkoster 1:cedd9360f5c7 113 printf("Setting Led. \n\r");
jeroenkoster 1:cedd9360f5c7 114
jeroenkoster 1:cedd9360f5c7 115 // Select the device by seting chip select low
jeroenkoster 0:c2ab34dc9018 116 printf("Starting \n\r");
jeroenkoster 0:c2ab34dc9018 117 while (true) {
ViriJay 5:7891519b8809 118 readButton();
ViriJay 5:7891519b8809 119 readNRF();
jeroenkoster 1:cedd9360f5c7 120 wait(0.1);
jeroenkoster 0:c2ab34dc9018 121 }
jeroenkoster 0:c2ab34dc9018 122 }