上位机

Dependencies:   BufferedSerial mbed nRF24L01P

Committer:
wanzq
Date:
Wed Oct 11 06:53:43 2017 +0000
Revision:
0:f7767412c8b5
ty_901

Who changed what in which revision?

UserRevisionLine numberNew 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 }