Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: nRF24L01P_Hello_World nRF24L01P
Diff: main.cpp
- Revision:
- 5:668dd9395ca5
- Parent:
- 4:5caf9e1dc16c
--- a/main.cpp Fri Jan 08 08:51:10 2021 +0000 +++ b/main.cpp Fri Apr 16 16:01:03 2021 +0000 @@ -1,100 +1,73 @@ #include "main.h" #include "mbed.h" #include "nRF24L01P.h" -#include "protocol.h" +#include "circularBuffer.h" -//Protocole de communication possible : -//SOF, Function, Payload Length, Payload, Checksum -//1By, 2By, 2By, nBy, 1By - -Serial pc(USBTX, USBRX); // tx, rx +UnbufferedSerial pc(USBTX, USBRX, 115200); // tx, rx, baudrate nRF24L01P my_nrf24l01p(SPI3_MOSI, SPI3_MISO, SPI3_SCLK, CSN, CE, IRQ); // mosi, miso, sck, csn, ce, irq DigitalOut myled1(D4); DigitalOut myled2(D5); +char sendFlag = 0; + int main() { - // The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's - // "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) - // only handles 4 byte transfers in the ATMega code. - - char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; - int txDataCnt = 0; - int rxDataCnt = 0; +// The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's +// "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) +// only handles 4 byte transfers in the ATMega code. + char txData[TRANSFERT_SIZE]; + //Interruption sur réception Port Série + pc.attach(&usbRxInterrupt, SerialBase::RxIrq); + + my_nrf24l01p.powerUp(); - - // Display the (default) setup of the nRF24L01+ chip - pc.printf("Default setup : \r\n"); - pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); - pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); - pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); - pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); - pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); - pc.printf("\r\n\r\n"); + //Configuration nRF24101P my_nrf24l01p.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY); my_nrf24l01p.setAirDataRate(NRF24L01P_DATARATE_2_MBPS); - my_nrf24l01p.setTxAddress(0xFFE); - my_nrf24l01p.setRxAddress(0xFFA); - - // Display the (custom) setup of the nRF24L01+ chip - pc.printf("Custom setup : \r\n"); - pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); - pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); - pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); - pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); - pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); - pc.printf("\r\n\r\n"); - - - my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); - - my_nrf24l01p.setReceiveMode(); + my_nrf24l01p.setRfOutputPower(-6); + my_nrf24l01p.setTxAddress(0xFFA); + my_nrf24l01p.setRxAddress(0xFFE); + my_nrf24l01p.setTransferSize(TRANSFERT_SIZE); + my_nrf24l01p.setTransmitMode(); + my_nrf24l01p.enable(); - - pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); - - //Infinite loop + + + //Infinite Loop while (1) { - // If we've received anything over the host serial link... - if (pc.readable()) + // Si une trame est prête (4 octets) + if (sendFlag) { - // ...add it to the transmit buffer - txData[txDataCnt++] = pc.getc(); - // 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; - } - + sendFlag = 0; + int i; + + //On récupère la trame du buffer + for (i = 0; i < TRANSFERT_SIZE; i++) + txData[i] = cbTxGetOne(); + + // Send the transmitbuffer via the nRF24L01+ + my_nrf24l01p.write(NRF24L01P_PIPE_P0, txData, TRANSFERT_SIZE); + // Toggle LED1 (to help debug Host -> nRF24L01+ communication) myled1 = !myled1; } - - // If we've received anything in the nRF24L01+... - if ( my_nrf24l01p.readable() ) - { - - // ...read the data into the receive buffer - int 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++ ) - { - - pc.putc( rxData[i] ); - } - - // Toggle LED2 (to help debug nRF24L01+ -> Host communication) - myled2 = !myled2; - } + } +} + +void usbRxInterrupt() +{ + //On a reçu un octet, on le récupère et on le met dans le buffer + char c; + if(pc.read(&c, 1)) + { + cbTxAddOne(c); + //S'il y a 4 octets dans le buffer, on peut les envoyer (passage du flag à 1) + if (cbTxGetDataSize() >= 4) + sendFlag = 1; } } \ No newline at end of file