上位机

Dependencies:   BufferedSerial mbed nRF24L01P

Files at this revision

API Documentation at this revision

Comitter:
wanzq
Date:
Wed Oct 11 06:53:43 2017 +0000
Commit message:
ty_901

Changed in this revision

BufferedSerial.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
nRF24L01P.lib Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r f7767412c8b5 BufferedSerial.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BufferedSerial.lib	Wed Oct 11 06:53:43 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/sam_grove/code/BufferedSerial/#a0d37088b405
diff -r 000000000000 -r f7767412c8b5 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 11 06:53:43 2017 +0000
@@ -0,0 +1,164 @@
+#include "mbed.h"
+#include "BufferedSerial.h"
+ #include"nRF24L01P.h"
+Serial pc(PA_9, PA_10,  115200);//PA_9 PA_10 作为串口1连接串口转usb模块连接电脑
+BufferedSerial mod(PA_2, PA_3, 32);//PA_2,PA_3作为第二个串口与jy-901的串口端连接,进行通信
+
+nRF24L01P my_nrf24l01p(PB_15, PB_14, PB_13, PB_8, PB_9,PB_7);    // mosi, miso, sck, csn, ce, irq
+ 
+int state, token, payloadLen, recvLen;
+unsigned char payloadBuf[16];
+ 
+void parseCmpt(int token, unsigned char* payloadBuf, int payloadLen)
+{
+    float data[3];
+    switch(token){
+        case 0x51:
+            for (int i = 0; i < 3; ++i)
+            {
+                data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8);
+                data[i] = data[i] * 16 * 9.8 / 32768;
+            }
+            //pc.printf("Ax=%.2f\tAy=%.2f\tAz=%.2f\r\n", data[0], data[1], data[2]);
+            break;
+        case 0x52:
+            for (int i = 0; i < 3; ++i)
+            {
+                data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8);
+                data[i] = data[i] * 2000 / 32768;
+            }
+            //pc.printf("Wx=%.2f\tWy=%.2f\tWz=%.2f\r\n", data[0], data[1], data[2]);
+            break;
+        case 0x53:
+            for (int i = 0; i < 3; ++i)
+            {
+                data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8);
+                data[i] = data[i] * 180 / 32768;
+            }
+            pc.printf("Roll=%.2f\tPitch=%.2f\tYaw=%.2f\r\n", data[0], data[1], data[2]);
+            break;
+        case 0x54:
+            for (int i = 0; i < 3; ++i)
+            {
+                data[i] = payloadBuf[i*2]|((int)payloadBuf[i*2+1]<<8);
+            }
+            //pc.printf("Hx=%.2f\tHy=%.2f\tHz=%.2f\r\n", data[0], data[1], data[2]);
+            break;
+    }
+}
+ 
+void parseInput(const char* data, int len)
+{
+    for (int i = 0; i < len; ++i)
+    {
+        unsigned char ch = data[i], sum;
+        switch(state){
+            case 0:
+                if(ch == 0x55)
+                    state = 1;
+                break;
+            case 1:
+                token = ch;
+                if(0x51 <= token && token <= 0x54){
+                    payloadLen = 8;
+                    recvLen = 0;
+                    state = 2;
+                }else{
+                    pc.printf("%s %x\r\n", "unknown token", token);
+                    state = 0;
+                }
+                break;
+            case 2:
+                payloadBuf[recvLen++] = ch;
+                if(recvLen == payloadLen){
+                    state = 3;
+                }
+                break;
+            case 3:
+                sum = 0x55;
+                sum += token;
+                for (int i = 0; i < payloadLen; ++i)
+                {
+                    sum += payloadBuf[i];
+                }
+                if(sum != ch){
+                    pc.printf("wrong checksum\r\n");
+                }else{
+                    parseCmpt(token, payloadBuf, payloadLen);
+                //    myled = !myled;
+                }
+                state = 0;
+                break;
+        }
+    }
+}
+ 
+int main()
+{
+     while(1) {
+        char ch;
+        if(mod.readable()){
+            ch = mod.getc();
+            pc.printf(&ch);
+        }
+    }//只需将jy-901模块从串口传出的信息原封不动传到电脑即可 在电脑端打开jy模块自带的上位机软件即可查看jy模块的各种信息及可视化后的图像。
+ /* #define TRANSFER_SIZE   4
+ 
+    char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];
+    int txDataCnt = 0;
+    int rxDataCnt = 0;
+ 
+    my_nrf24l01p.powerUp();
+ 
+    // Display the (default) setup of the nRF24L01+ chip
+    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( "Type keys to test transfers:\r\n  (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE );
+ 
+    my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
+ 
+    my_nrf24l01p.setReceiveMode();
+    my_nrf24l01p.enable();
+ 
+ /*   while (1) {
+ 
+        // If we've received anything over the host serial link...
+        if ( pc.readable() ) {
+ 
+            // ...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;
+            }
+ 
+            // 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
+            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;
+        }
+    }*/  
+}
\ No newline at end of file
diff -r 000000000000 -r f7767412c8b5 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Oct 11 06:53:43 2017 +0000
@@ -0,0 +1,1 @@
+https://mbed.org/users/mbed_official/code/mbed/builds/675da3299148
\ No newline at end of file
diff -r 000000000000 -r f7767412c8b5 nRF24L01P.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nRF24L01P.lib	Wed Oct 11 06:53:43 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/Owen/code/nRF24L01P/#8ae48233b4e4