![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Microduino的cube小车。
Protocol.h@1:758ccab13947, 2016-05-25 (annotated)
- Committer:
- lixianyu
- Date:
- Wed May 25 11:52:03 2016 +0000
- Revision:
- 1:758ccab13947
- Child:
- 3:e4ac7c1a14de
??????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lixianyu | 1:758ccab13947 | 1 | //#include "Arduino.h" |
lixianyu | 1:758ccab13947 | 2 | |
lixianyu | 1:758ccab13947 | 3 | //BLE////////////////////// |
lixianyu | 1:758ccab13947 | 4 | #ifdef BLE_SoftSerial |
lixianyu | 1:758ccab13947 | 5 | #include <Microduino_Protocol_SoftSer.h> |
lixianyu | 1:758ccab13947 | 6 | #include <SoftwareSerial.h> |
lixianyu | 1:758ccab13947 | 7 | SoftwareSerial mySerial(4, -1); // RX, TX (D5与电机冲突 屏蔽 只用RX) |
lixianyu | 1:758ccab13947 | 8 | Protocol bleProtocol(&mySerial, TYPE_NUM); //软串口,校验数据类 |
lixianyu | 1:758ccab13947 | 9 | #else |
lixianyu | 1:758ccab13947 | 10 | #include <Microduino_Protocol_HardSer.h> |
lixianyu | 1:758ccab13947 | 11 | Protocol bleProtocol(&BLE_HardSerial, TYPE_NUM); //软串口,校验数据类 |
lixianyu | 1:758ccab13947 | 12 | #endif |
lixianyu | 1:758ccab13947 | 13 | |
lixianyu | 1:758ccab13947 | 14 | //nRF////////////////////// |
lixianyu | 1:758ccab13947 | 15 | #include <RF24Network.h> |
lixianyu | 1:758ccab13947 | 16 | #include <RF24.h> |
lixianyu | 1:758ccab13947 | 17 | #include <SPI.h> |
lixianyu | 1:758ccab13947 | 18 | RF24 radio(9, 10); |
lixianyu | 1:758ccab13947 | 19 | RF24Network network(radio); |
lixianyu | 1:758ccab13947 | 20 | #define this_node 1 //设置本机ID |
lixianyu | 1:758ccab13947 | 21 | #define other_node 0 |
lixianyu | 1:758ccab13947 | 22 | struct send_a { //发送 |
lixianyu | 1:758ccab13947 | 23 | uint32_t node_ms; //节点运行时间 |
lixianyu | 1:758ccab13947 | 24 | }; |
lixianyu | 1:758ccab13947 | 25 | struct receive_a { //接收 |
lixianyu | 1:758ccab13947 | 26 | uint32_t ms; |
lixianyu | 1:758ccab13947 | 27 | uint16_t rf_CH[CHANNEL_NUM]; |
lixianyu | 1:758ccab13947 | 28 | }; |
lixianyu | 1:758ccab13947 | 29 | |
lixianyu | 1:758ccab13947 | 30 | //Mode////////////////////// |
lixianyu | 1:758ccab13947 | 31 | enum _Mode { |
lixianyu | 1:758ccab13947 | 32 | NRF, |
lixianyu | 1:758ccab13947 | 33 | BLE |
lixianyu | 1:758ccab13947 | 34 | }; |
lixianyu | 1:758ccab13947 | 35 | |
lixianyu | 1:758ccab13947 | 36 | bool protocolSetup() |
lixianyu | 1:758ccab13947 | 37 | { |
lixianyu | 1:758ccab13947 | 38 | SPI.begin(); //初始化SPI总线 |
lixianyu | 1:758ccab13947 | 39 | radio.begin(); |
lixianyu | 1:758ccab13947 | 40 | if (radio.isPVariant()) { |
lixianyu | 1:758ccab13947 | 41 | network.begin(NRF_CHANNEL, this_node); |
lixianyu | 1:758ccab13947 | 42 | return NRF; |
lixianyu | 1:758ccab13947 | 43 | } else { |
lixianyu | 1:758ccab13947 | 44 | bleProtocol.begin(BLE_SPEED); |
lixianyu | 1:758ccab13947 | 45 | return BLE; |
lixianyu | 1:758ccab13947 | 46 | } |
lixianyu | 1:758ccab13947 | 47 | } |
lixianyu | 1:758ccab13947 | 48 | |
lixianyu | 1:758ccab13947 | 49 | bool protocolRead(uint16_t *_channel, bool _mode) |
lixianyu | 1:758ccab13947 | 50 | { |
lixianyu | 1:758ccab13947 | 51 | if (_mode == NRF) { |
lixianyu | 1:758ccab13947 | 52 | network.update(); |
lixianyu | 1:758ccab13947 | 53 | while ( network.available() ) { |
lixianyu | 1:758ccab13947 | 54 | RF24NetworkHeader header; |
lixianyu | 1:758ccab13947 | 55 | receive_a rec; |
lixianyu | 1:758ccab13947 | 56 | network.read(header, &rec, sizeof(rec)); |
lixianyu | 1:758ccab13947 | 57 | for (int a = 0; a < CHANNEL_NUM; a++) { |
lixianyu | 1:758ccab13947 | 58 | _channel[a] = rec.rf_CH[a]; |
lixianyu | 1:758ccab13947 | 59 | } |
lixianyu | 1:758ccab13947 | 60 | |
lixianyu | 1:758ccab13947 | 61 | { |
lixianyu | 1:758ccab13947 | 62 | send_a sen = { millis() }; //把这些数据发送出去,对应前面的发送数组 |
lixianyu | 1:758ccab13947 | 63 | RF24NetworkHeader header(other_node); |
lixianyu | 1:758ccab13947 | 64 | if (network.write(header, &sen, sizeof(sen))) { |
lixianyu | 1:758ccab13947 | 65 | return true; |
lixianyu | 1:758ccab13947 | 66 | } |
lixianyu | 1:758ccab13947 | 67 | } |
lixianyu | 1:758ccab13947 | 68 | } |
lixianyu | 1:758ccab13947 | 69 | } else { |
lixianyu | 1:758ccab13947 | 70 | switch (bleProtocol.parse(_channel, MODE_WHILE)) { |
lixianyu | 1:758ccab13947 | 71 | case P_NONE: //DATA NONE |
lixianyu | 1:758ccab13947 | 72 | break; |
lixianyu | 1:758ccab13947 | 73 | case P_FINE: //DATA OK |
lixianyu | 1:758ccab13947 | 74 | return true; |
lixianyu | 1:758ccab13947 | 75 | break; |
lixianyu | 1:758ccab13947 | 76 | case P_ERROR: //DATA ERROR |
lixianyu | 1:758ccab13947 | 77 | #ifdef BLE_SoftSerial |
lixianyu | 1:758ccab13947 | 78 | mySerial.stopListening(); |
lixianyu | 1:758ccab13947 | 79 | mySerial.listen(); |
lixianyu | 1:758ccab13947 | 80 | #endif |
lixianyu | 1:758ccab13947 | 81 | break; |
lixianyu | 1:758ccab13947 | 82 | case P_TIMEOUT: //DATA TIMEOUT |
lixianyu | 1:758ccab13947 | 83 | #ifdef BLE_SoftSerial |
lixianyu | 1:758ccab13947 | 84 | mySerial.stopListening(); |
lixianyu | 1:758ccab13947 | 85 | mySerial.listen(); |
lixianyu | 1:758ccab13947 | 86 | #endif |
lixianyu | 1:758ccab13947 | 87 | break; |
lixianyu | 1:758ccab13947 | 88 | } |
lixianyu | 1:758ccab13947 | 89 | } |
lixianyu | 1:758ccab13947 | 90 | |
lixianyu | 1:758ccab13947 | 91 | return false; |
lixianyu | 1:758ccab13947 | 92 | } |