Wireless / Mbed 2 deprecated spi_buttons_leds

Dependencies:   mbed nRF24L01P

main.cpp

Committer:
jeroenkoster
Date:
2018-12-04
Revision:
4:ae1520241a90
Parent:
3:74f042e3ec10
Child:
5:7891519b8809

File content as of revision 4:ae1520241a90:

#include "mbed.h"
#include "nRF24L01P.h"

//Init Pins
SPI spi(D11, D12, D13);
DigitalOut cs(D10, 1);
nRF24L01P my_nrf24l01p(D11, D12, D13, D8, D9, D7);    // mosi, miso, sck, csn, ce, irq

    
#define TRANSFER_SIZE   4
char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
int txDataCnt = 0;
int rxDataCnt = 0;
    
void init() {
    cs = 0;
 
    spi.write(0x46); // Select IODIR
    spi.write(0x00); // 0000 = Set all to output
    spi.write(0x00);
  
    // Deselect the device
    cs = 1;

    my_nrf24l01p.powerUp();

    // Display the (default) setup of the nRF24L01+ chip
    printf( "nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency() );
    printf( "nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
    printf( "nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
    printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
    printf( "nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() );

    printf( "Type keys to test transfers:\r\n  (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );

    my_nrf24l01p.setTransferSize( TRANSFER_SIZE );

    my_nrf24l01p.setReceiveMode();
    my_nrf24l01p.enable();
}

void setLed(int i) {
    cs = 0;
    spi.write(0x46);
    spi.write(0x09);
    
    int mask = 1;
    int writeValue = 255;
    writeValue ^= mask << i;
    spi.write(writeValue);
    cs = 1;
}

int readButton() {
    cs = 0;
    spi.write(0x47);
    spi.write(0x09);
    int misoOutput = spi.write(0x00);
    cs = 1;
    
    misoOutput = misoOutput & 192;
    printf("output miso: %d \n\r", misoOutput);
    if (misoOutput == 128) { // S1 pressed
        return 1;    
    } else if (misoOutput == 64) { // S2 pressed
        return 5;
    }
    return 0;
}

int sendNumber(int number) {
    // ...add it to the transmit buffer
    txData[txDataCnt++] = number;

    // If the transmit buffer is full
    if ( txDataCnt >= sizeof( txData ) ) {

        // Send the transmitbuffer via the nRF24L01+
        my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt );

        txDataCnt = 0;
    }
    
    // If we've received anything in the nRF24L01+...
    if ( my_nrf24l01p.readable() ) {

        // ...read the data into the receive buffer
        rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) );

        // Display the receive buffer contents via the host serial link
        for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) {
            printf(rxData);
//            pc.putc( rxData[i] );
        }
    }
}

int main() {    
    cs = 1;
    printf("Initializing. \n\r");
    init();
    printf("Setting Led. \n\r");
    
    // Select the device by seting chip select low
    int led = 0;
    printf("Starting \n\r");
    while (true) {
        led = (led + readButton()) % 6;
        setLed(led);
        sendNumber(led);
        wait(0.1);
    }
}