上位机
Dependencies: BufferedSerial mbed nRF24L01P
main.cpp@0:f7767412c8b5, 2017-10-11 (annotated)
- Committer:
- wanzq
- Date:
- Wed Oct 11 06:53:43 2017 +0000
- Revision:
- 0:f7767412c8b5
ty_901
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wanzq | 0:f7767412c8b5 | 1 | #include "mbed.h" |
wanzq | 0:f7767412c8b5 | 2 | #include "BufferedSerial.h" |
wanzq | 0:f7767412c8b5 | 3 | #include"nRF24L01P.h" |
wanzq | 0:f7767412c8b5 | 4 | Serial pc(PA_9, PA_10, 115200);//PA_9 PA_10 作为串口1连接串口转usb模块连接电脑 |
wanzq | 0:f7767412c8b5 | 5 | BufferedSerial mod(PA_2, PA_3, 32);//PA_2,PA_3作为第二个串口与jy-901的串口端连接,进行通信 |
wanzq | 0:f7767412c8b5 | 6 | |
wanzq | 0:f7767412c8b5 | 7 | nRF24L01P my_nrf24l01p(PB_15, PB_14, PB_13, PB_8, PB_9,PB_7); // mosi, miso, sck, csn, ce, irq |
wanzq | 0:f7767412c8b5 | 8 | |
wanzq | 0:f7767412c8b5 | 9 | int state, token, payloadLen, recvLen; |
wanzq | 0:f7767412c8b5 | 10 | unsigned char payloadBuf[16]; |
wanzq | 0:f7767412c8b5 | 11 | |
wanzq | 0:f7767412c8b5 | 12 | void parseCmpt(int token, unsigned char* payloadBuf, int payloadLen) |
wanzq | 0:f7767412c8b5 | 13 | { |
wanzq | 0:f7767412c8b5 | 14 | float data[3]; |
wanzq | 0:f7767412c8b5 | 15 | switch(token){ |
wanzq | 0:f7767412c8b5 | 16 | case 0x51: |
wanzq | 0:f7767412c8b5 | 17 | for (int i = 0; i < 3; ++i) |
wanzq | 0:f7767412c8b5 | 18 | { |
wanzq | 0:f7767412c8b5 | 19 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
wanzq | 0:f7767412c8b5 | 20 | data[i] = data[i] * 16 * 9.8 / 32768; |
wanzq | 0:f7767412c8b5 | 21 | } |
wanzq | 0:f7767412c8b5 | 22 | //pc.printf("Ax=%.2f\tAy=%.2f\tAz=%.2f\r\n", data[0], data[1], data[2]); |
wanzq | 0:f7767412c8b5 | 23 | break; |
wanzq | 0:f7767412c8b5 | 24 | case 0x52: |
wanzq | 0:f7767412c8b5 | 25 | for (int i = 0; i < 3; ++i) |
wanzq | 0:f7767412c8b5 | 26 | { |
wanzq | 0:f7767412c8b5 | 27 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
wanzq | 0:f7767412c8b5 | 28 | data[i] = data[i] * 2000 / 32768; |
wanzq | 0:f7767412c8b5 | 29 | } |
wanzq | 0:f7767412c8b5 | 30 | //pc.printf("Wx=%.2f\tWy=%.2f\tWz=%.2f\r\n", data[0], data[1], data[2]); |
wanzq | 0:f7767412c8b5 | 31 | break; |
wanzq | 0:f7767412c8b5 | 32 | case 0x53: |
wanzq | 0:f7767412c8b5 | 33 | for (int i = 0; i < 3; ++i) |
wanzq | 0:f7767412c8b5 | 34 | { |
wanzq | 0:f7767412c8b5 | 35 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
wanzq | 0:f7767412c8b5 | 36 | data[i] = data[i] * 180 / 32768; |
wanzq | 0:f7767412c8b5 | 37 | } |
wanzq | 0:f7767412c8b5 | 38 | pc.printf("Roll=%.2f\tPitch=%.2f\tYaw=%.2f\r\n", data[0], data[1], data[2]); |
wanzq | 0:f7767412c8b5 | 39 | break; |
wanzq | 0:f7767412c8b5 | 40 | case 0x54: |
wanzq | 0:f7767412c8b5 | 41 | for (int i = 0; i < 3; ++i) |
wanzq | 0:f7767412c8b5 | 42 | { |
wanzq | 0:f7767412c8b5 | 43 | data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8); |
wanzq | 0:f7767412c8b5 | 44 | } |
wanzq | 0:f7767412c8b5 | 45 | //pc.printf("Hx=%.2f\tHy=%.2f\tHz=%.2f\r\n", data[0], data[1], data[2]); |
wanzq | 0:f7767412c8b5 | 46 | break; |
wanzq | 0:f7767412c8b5 | 47 | } |
wanzq | 0:f7767412c8b5 | 48 | } |
wanzq | 0:f7767412c8b5 | 49 | |
wanzq | 0:f7767412c8b5 | 50 | void parseInput(const char* data, int len) |
wanzq | 0:f7767412c8b5 | 51 | { |
wanzq | 0:f7767412c8b5 | 52 | for (int i = 0; i < len; ++i) |
wanzq | 0:f7767412c8b5 | 53 | { |
wanzq | 0:f7767412c8b5 | 54 | unsigned char ch = data[i], sum; |
wanzq | 0:f7767412c8b5 | 55 | switch(state){ |
wanzq | 0:f7767412c8b5 | 56 | case 0: |
wanzq | 0:f7767412c8b5 | 57 | if(ch == 0x55) |
wanzq | 0:f7767412c8b5 | 58 | state = 1; |
wanzq | 0:f7767412c8b5 | 59 | break; |
wanzq | 0:f7767412c8b5 | 60 | case 1: |
wanzq | 0:f7767412c8b5 | 61 | token = ch; |
wanzq | 0:f7767412c8b5 | 62 | if(0x51 <= token && token <= 0x54){ |
wanzq | 0:f7767412c8b5 | 63 | payloadLen = 8; |
wanzq | 0:f7767412c8b5 | 64 | recvLen = 0; |
wanzq | 0:f7767412c8b5 | 65 | state = 2; |
wanzq | 0:f7767412c8b5 | 66 | }else{ |
wanzq | 0:f7767412c8b5 | 67 | pc.printf("%s %x\r\n", "unknown token", token); |
wanzq | 0:f7767412c8b5 | 68 | state = 0; |
wanzq | 0:f7767412c8b5 | 69 | } |
wanzq | 0:f7767412c8b5 | 70 | break; |
wanzq | 0:f7767412c8b5 | 71 | case 2: |
wanzq | 0:f7767412c8b5 | 72 | payloadBuf[recvLen++] = ch; |
wanzq | 0:f7767412c8b5 | 73 | if(recvLen == payloadLen){ |
wanzq | 0:f7767412c8b5 | 74 | state = 3; |
wanzq | 0:f7767412c8b5 | 75 | } |
wanzq | 0:f7767412c8b5 | 76 | break; |
wanzq | 0:f7767412c8b5 | 77 | case 3: |
wanzq | 0:f7767412c8b5 | 78 | sum = 0x55; |
wanzq | 0:f7767412c8b5 | 79 | sum += token; |
wanzq | 0:f7767412c8b5 | 80 | for (int i = 0; i < payloadLen; ++i) |
wanzq | 0:f7767412c8b5 | 81 | { |
wanzq | 0:f7767412c8b5 | 82 | sum += payloadBuf[i]; |
wanzq | 0:f7767412c8b5 | 83 | } |
wanzq | 0:f7767412c8b5 | 84 | if(sum != ch){ |
wanzq | 0:f7767412c8b5 | 85 | pc.printf("wrong checksum\r\n"); |
wanzq | 0:f7767412c8b5 | 86 | }else{ |
wanzq | 0:f7767412c8b5 | 87 | parseCmpt(token, payloadBuf, payloadLen); |
wanzq | 0:f7767412c8b5 | 88 | // myled = !myled; |
wanzq | 0:f7767412c8b5 | 89 | } |
wanzq | 0:f7767412c8b5 | 90 | state = 0; |
wanzq | 0:f7767412c8b5 | 91 | break; |
wanzq | 0:f7767412c8b5 | 92 | } |
wanzq | 0:f7767412c8b5 | 93 | } |
wanzq | 0:f7767412c8b5 | 94 | } |
wanzq | 0:f7767412c8b5 | 95 | |
wanzq | 0:f7767412c8b5 | 96 | int main() |
wanzq | 0:f7767412c8b5 | 97 | { |
wanzq | 0:f7767412c8b5 | 98 | while(1) { |
wanzq | 0:f7767412c8b5 | 99 | char ch; |
wanzq | 0:f7767412c8b5 | 100 | if(mod.readable()){ |
wanzq | 0:f7767412c8b5 | 101 | ch = mod.getc(); |
wanzq | 0:f7767412c8b5 | 102 | pc.printf(&ch); |
wanzq | 0:f7767412c8b5 | 103 | } |
wanzq | 0:f7767412c8b5 | 104 | }//只需将jy-901模块从串口传出的信息原封不动传到电脑即可 在电脑端打开jy模块自带的上位机软件即可查看jy模块的各种信息及可视化后的图像。 |
wanzq | 0:f7767412c8b5 | 105 | /* #define TRANSFER_SIZE 4 |
wanzq | 0:f7767412c8b5 | 106 | |
wanzq | 0:f7767412c8b5 | 107 | char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; |
wanzq | 0:f7767412c8b5 | 108 | int txDataCnt = 0; |
wanzq | 0:f7767412c8b5 | 109 | int rxDataCnt = 0; |
wanzq | 0:f7767412c8b5 | 110 | |
wanzq | 0:f7767412c8b5 | 111 | my_nrf24l01p.powerUp(); |
wanzq | 0:f7767412c8b5 | 112 | |
wanzq | 0:f7767412c8b5 | 113 | // Display the (default) setup of the nRF24L01+ chip |
wanzq | 0:f7767412c8b5 | 114 | pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); |
wanzq | 0:f7767412c8b5 | 115 | pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); |
wanzq | 0:f7767412c8b5 | 116 | pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); |
wanzq | 0:f7767412c8b5 | 117 | pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); |
wanzq | 0:f7767412c8b5 | 118 | pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); |
wanzq | 0:f7767412c8b5 | 119 | |
wanzq | 0:f7767412c8b5 | 120 | pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); |
wanzq | 0:f7767412c8b5 | 121 | |
wanzq | 0:f7767412c8b5 | 122 | my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); |
wanzq | 0:f7767412c8b5 | 123 | |
wanzq | 0:f7767412c8b5 | 124 | my_nrf24l01p.setReceiveMode(); |
wanzq | 0:f7767412c8b5 | 125 | my_nrf24l01p.enable(); |
wanzq | 0:f7767412c8b5 | 126 | |
wanzq | 0:f7767412c8b5 | 127 | /* while (1) { |
wanzq | 0:f7767412c8b5 | 128 | |
wanzq | 0:f7767412c8b5 | 129 | // If we've received anything over the host serial link... |
wanzq | 0:f7767412c8b5 | 130 | if ( pc.readable() ) { |
wanzq | 0:f7767412c8b5 | 131 | |
wanzq | 0:f7767412c8b5 | 132 | // ...add it to the transmit buffer |
wanzq | 0:f7767412c8b5 | 133 | txData[txDataCnt++] = pc.getc(); |
wanzq | 0:f7767412c8b5 | 134 | |
wanzq | 0:f7767412c8b5 | 135 | // If the transmit buffer is full |
wanzq | 0:f7767412c8b5 | 136 | if ( txDataCnt >= sizeof( txData ) ) { |
wanzq | 0:f7767412c8b5 | 137 | |
wanzq | 0:f7767412c8b5 | 138 | // Send the transmitbuffer via the nRF24L01+ |
wanzq | 0:f7767412c8b5 | 139 | my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); |
wanzq | 0:f7767412c8b5 | 140 | |
wanzq | 0:f7767412c8b5 | 141 | txDataCnt = 0; |
wanzq | 0:f7767412c8b5 | 142 | } |
wanzq | 0:f7767412c8b5 | 143 | |
wanzq | 0:f7767412c8b5 | 144 | // Toggle LED1 (to help debug Host -> nRF24L01+ communication) |
wanzq | 0:f7767412c8b5 | 145 | myled1 = !myled1; |
wanzq | 0:f7767412c8b5 | 146 | } |
wanzq | 0:f7767412c8b5 | 147 | |
wanzq | 0:f7767412c8b5 | 148 | // If we've received anything in the nRF24L01+... |
wanzq | 0:f7767412c8b5 | 149 | if ( my_nrf24l01p.readable() ) { |
wanzq | 0:f7767412c8b5 | 150 | |
wanzq | 0:f7767412c8b5 | 151 | // ...read the data into the receive buffer |
wanzq | 0:f7767412c8b5 | 152 | rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); |
wanzq | 0:f7767412c8b5 | 153 | |
wanzq | 0:f7767412c8b5 | 154 | // Display the receive buffer contents via the host serial link |
wanzq | 0:f7767412c8b5 | 155 | for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { |
wanzq | 0:f7767412c8b5 | 156 | |
wanzq | 0:f7767412c8b5 | 157 | pc.putc( rxData[i] ); |
wanzq | 0:f7767412c8b5 | 158 | } |
wanzq | 0:f7767412c8b5 | 159 | |
wanzq | 0:f7767412c8b5 | 160 | // Toggle LED2 (to help debug nRF24L01+ -> Host communication) |
wanzq | 0:f7767412c8b5 | 161 | myled2 = !myled2; |
wanzq | 0:f7767412c8b5 | 162 | } |
wanzq | 0:f7767412c8b5 | 163 | }*/ |
wanzq | 0:f7767412c8b5 | 164 | } |