init

Dependencies:   mbed nRF24L01P

Committer:
ViriJay
Date:
Fri Jan 18 10:42:18 2019 +0000
Revision:
1:053b63d70298
Parent:
0:7c3fd90d5bd9
Child:
2:8dc7ee41e9a7
copy van led opdracht

Who changed what in which revision?

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