LDSC_Robotics_TAs
/
rf24_main
RF24 main code
main.cpp@0:f92ca0fab66b, 2016-07-28 (annotated)
- Committer:
- adam_z
- Date:
- Thu Jul 28 08:12:37 2016 +0000
- Revision:
- 0:f92ca0fab66b
RF24L01 on platform of STM32F446RE(SPI2)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
adam_z | 0:f92ca0fab66b | 1 | |
adam_z | 0:f92ca0fab66b | 2 | |
adam_z | 0:f92ca0fab66b | 3 | #include <mbed.h> |
adam_z | 0:f92ca0fab66b | 4 | |
adam_z | 0:f92ca0fab66b | 5 | #include "nRF24L01.h" |
adam_z | 0:f92ca0fab66b | 6 | #include "RF24.h" |
adam_z | 0:f92ca0fab66b | 7 | |
adam_z | 0:f92ca0fab66b | 8 | |
adam_z | 0:f92ca0fab66b | 9 | |
adam_z | 0:f92ca0fab66b | 10 | |
adam_z | 0:f92ca0fab66b | 11 | // |
adam_z | 0:f92ca0fab66b | 12 | // Hardware configuration |
adam_z | 0:f92ca0fab66b | 13 | // |
adam_z | 0:f92ca0fab66b | 14 | |
adam_z | 0:f92ca0fab66b | 15 | |
adam_z | 0:f92ca0fab66b | 16 | |
adam_z | 0:f92ca0fab66b | 17 | |
adam_z | 0:f92ca0fab66b | 18 | /* |
adam_z | 0:f92ca0fab66b | 19 | |
adam_z | 0:f92ca0fab66b | 20 | |
adam_z | 0:f92ca0fab66b | 21 | _____ |
adam_z | 0:f92ca0fab66b | 22 | |8|7| pi map with oscillator up front |
adam_z | 0:f92ca0fab66b | 23 | ----- |
adam_z | 0:f92ca0fab66b | 24 | |6|5| |
adam_z | 0:f92ca0fab66b | 25 | ----- |
adam_z | 0:f92ca0fab66b | 26 | |4|3| |
adam_z | 0:f92ca0fab66b | 27 | ----- |
adam_z | 0:f92ca0fab66b | 28 | |2|1| |
adam_z | 0:f92ca0fab66b | 29 | ----- |
adam_z | 0:f92ca0fab66b | 30 | PINOUTS |
adam_z | 0:f92ca0fab66b | 31 | http://docs.spark.io/#/firmware/communication-spi |
adam_z | 0:f92ca0fab66b | 32 | http://maniacbug.wordpress.com/2011/11/02/getting-started-rf24/ |
adam_z | 0:f92ca0fab66b | 33 | |
adam_z | 0:f92ca0fab66b | 34 | SPARK CORE SHIELD SHIELD NRF24L01+ |
adam_z | 0:f92ca0fab66b | 35 | GND GND 1 (GND) |
adam_z | 0:f92ca0fab66b | 36 | 3V3 (3.3V) 3.3V 2 (3V3) |
adam_z | 0:f92ca0fab66b | 37 | D6 (CSN) 9 (D6) 3 (CE) |
adam_z | 0:f92ca0fab66b | 38 | A2 (SS) 10 (SS) 4 (CSN) |
adam_z | 0:f92ca0fab66b | 39 | A3 (SCK) 13 (SCK) 5 (SCK) |
adam_z | 0:f92ca0fab66b | 40 | A5 (MOSI) 11 (MOSI) 6 (MOSI) |
adam_z | 0:f92ca0fab66b | 41 | A4 (MISO) 12 (MISO) 7 (MISO) |
adam_z | 0:f92ca0fab66b | 42 | |
adam_z | 0:f92ca0fab66b | 43 | NOTE: Also place a 10-100uF cap across the power inputs of |
adam_z | 0:f92ca0fab66b | 44 | the NRF24L01+. I/O o fthe NRF24 is 5V tolerant, but |
adam_z | 0:f92ca0fab66b | 45 | do NOT connect more than 3.3V to pin 1!!! |
adam_z | 0:f92ca0fab66b | 46 | */ |
adam_z | 0:f92ca0fab66b | 47 | |
adam_z | 0:f92ca0fab66b | 48 | // Set up nRF24L01 radio on SPI bus, and pins 9 (D6) & 10 (A2) on the Shield Shield |
adam_z | 0:f92ca0fab66b | 49 | RF24 radio(PB_15, PB_14, PB_13, PB_1, PB_2);//*****MOSI MISO SCK CE CS****** |
adam_z | 0:f92ca0fab66b | 50 | |
adam_z | 0:f92ca0fab66b | 51 | const uint64_t send_pipe=0xB01DFACECEL;//These are just arbitrary 64bit numbers to use as pipe identifiers |
adam_z | 0:f92ca0fab66b | 52 | const uint64_t recv_pipe=0xDEADBEEFF1L;//They must be the same on both ends of the communciations |
adam_z | 0:f92ca0fab66b | 53 | |
adam_z | 0:f92ca0fab66b | 54 | DigitalOut HLio(PB_12); |
adam_z | 0:f92ca0fab66b | 55 | Serial pc(SERIAL_TX, SERIAL_RX); |
adam_z | 0:f92ca0fab66b | 56 | |
adam_z | 0:f92ca0fab66b | 57 | |
adam_z | 0:f92ca0fab66b | 58 | int main() |
adam_z | 0:f92ca0fab66b | 59 | { |
adam_z | 0:f92ca0fab66b | 60 | |
adam_z | 0:f92ca0fab66b | 61 | pc.baud(9600);//Set up comm with the IDE serial monitor |
adam_z | 0:f92ca0fab66b | 62 | pc.printf("Ready for commands"); |
adam_z | 0:f92ca0fab66b | 63 | radio.begin();//Start up the radio object |
adam_z | 0:f92ca0fab66b | 64 | radio.setRetries(15,15);//This will improve reliability of the module if it encounters interference |
adam_z | 0:f92ca0fab66b | 65 | radio.setPALevel(RF24_PA_LOW);//This sets the power low. This will reduce the range. RF24_PA_MAX would increase the range |
adam_z | 0:f92ca0fab66b | 66 | radio.openWritingPipe(send_pipe);//Thses are the reverse of the transmit code. |
adam_z | 0:f92ca0fab66b | 67 | radio.openReadingPipe(1,recv_pipe); |
adam_z | 0:f92ca0fab66b | 68 | radio.startListening();//Give the module a kick |
adam_z | 0:f92ca0fab66b | 69 | |
adam_z | 0:f92ca0fab66b | 70 | while(true) { |
adam_z | 0:f92ca0fab66b | 71 | unsigned long motor_code=0; |
adam_z | 0:f92ca0fab66b | 72 | HLio = 0; |
adam_z | 0:f92ca0fab66b | 73 | |
adam_z | 0:f92ca0fab66b | 74 | |
adam_z | 0:f92ca0fab66b | 75 | // pc.printf("%d\r\n",radio.available()); |
adam_z | 0:f92ca0fab66b | 76 | if( radio.available()) { //Keep checking on each loop to see if any data has come in |
adam_z | 0:f92ca0fab66b | 77 | HLio = 1; |
adam_z | 0:f92ca0fab66b | 78 | while(radio.available()) { //Loop while there is incoming data. The packets are one unsigned long in total so it shoudl only loop once |
adam_z | 0:f92ca0fab66b | 79 | radio.read(&motor_code, sizeof(unsigned long));//Stuff the incoming packet into the motor_code variable |
adam_z | 0:f92ca0fab66b | 80 | |
adam_z | 0:f92ca0fab66b | 81 | } |
adam_z | 0:f92ca0fab66b | 82 | HLio = 0; |
adam_z | 0:f92ca0fab66b | 83 | // radio.stopListening();//We have heard so now we will send an ack |
adam_z | 0:f92ca0fab66b | 84 | // radio.write(&motor_code, sizeof(unsigned long));//Turn the motor code around and send it back |
adam_z | 0:f92ca0fab66b | 85 | radio.startListening();//Go back to listening as this is what this mostly does |
adam_z | 0:f92ca0fab66b | 86 | |
adam_z | 0:f92ca0fab66b | 87 | pc.printf("%d\r\n",motor_code); |
adam_z | 0:f92ca0fab66b | 88 | |
adam_z | 0:f92ca0fab66b | 89 | |
adam_z | 0:f92ca0fab66b | 90 | } |
adam_z | 0:f92ca0fab66b | 91 | |
adam_z | 0:f92ca0fab66b | 92 | // wait_ms(10); |
adam_z | 0:f92ca0fab66b | 93 | } |
adam_z | 0:f92ca0fab66b | 94 | |
adam_z | 0:f92ca0fab66b | 95 | } |
adam_z | 0:f92ca0fab66b | 96 | |
adam_z | 0:f92ca0fab66b | 97 |