UD-GS01治具の試作プログラムです

Dependencies:   mbed nRF24L01P SDFileSystem

Revision:
0:53b18a9251ab
Child:
1:960cd07d2ae7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Goto_UD-GS01.cpp	Mon Dec 07 07:55:55 2020 +0000
@@ -0,0 +1,133 @@
+
+//受信用と送信用を一つにする!ボタンで切り替え(元のプログラムは44で、44-2を貼り付ける)
+
+#include "mbed.h"
+#include "nRF24L01P.h"
+RawSerial  pc(PA_2, PA_3,115200);  //ここはpcとケーブルでつないだときにシリアル通信させてたところだから、ここから牛のUARTにつなぐだけで大丈夫なはず。→ここは元々ST基板のPC部分(パキッと折れそうな方)との通信用に使われてるから他のシリアルは無理らしい。
+RawSerial  UDGS01(PA_0, PA_1, 115200);        // UD-GS01とのシリアル通信用にUARTピンを新たに定義。
+Ticker     interrput;
+
+#define TRANSFER_SIZE   32
+int      out_flg = 0;
+int      rcv_flg = 0;
+int      snd_flg = 0;
+char txData[TRANSFER_SIZE*2];    /*char型で一文字ずつ配列に入れていき、表示する。char型は一つ1バイトなので、32個ずつ溜まったら送るようにする。*/
+int      txDataIdx = 0;                 
+int      txDataCnt=0;
+char rxData[TRANSFER_SIZE*2];    /*char型で一文字ずつ配列に入れていき、表示する。char型は一つ1バイトなので、32個ずつ溜まったら送るようにする。*/
+int      rxDataIdx = 0;                 
+int      rxDataCnt=0;
+int      i=0;
+int      which=0;
+
+nRF24L01P my_nrf24l01p(D11, D12, D13, D10, D9,D8);    // mosi, miso, sck, csn, ce, irq
+//nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10);    // mosi, miso, sck, csn, ce, irq
+
+void timer(){     /*タイマー割り込みによるSPEAKER out*/
+   uint16_t ain;
+   
+      
+      if(rcv_flg) {
+         out_flg=1;     
+      } 
+      if(out_flg){    
+        if(which == 1){
+                which = 0;
+                for(i=0; i>32; i++){
+                    pc.printf("%s", rxData[i]);
+            }
+            }
+            if(which == 2){
+             which = 0;
+             for(i=32; i>63; i++){
+                    pc.printf("%s", rxData[i]);
+            }
+            };
+             //ここにSDカードの書き込みを入れようかと!
+        rxDataIdx++;
+      } 
+   
+}
+
+void recieve(){
+    if(UDGS01.readable()){
+             
+     // ...read the data into the receive buffer
+        txData[txDataIdx] = UDGS01.getc();  //getcharだと、PCからのキーボード入力という標準コンソール?のやつだからだめらしい
+        txDataIdx++;
+        
+        
+        
+        if (txDataIdx == TRANSFER_SIZE) {//最初の32回
+               snd_flg = 1;
+        } else if (txDataIdx >= TRANSFER_SIZE*2){//後の32回
+               txDataIdx=0;
+               snd_flg = 2;
+        }
+    }
+}    
+      
+int main() {
+
+  int bufferidx=0;
+   
+
+    my_nrf24l01p.powerUp();
+    my_nrf24l01p.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY);//2400-2525
+    my_nrf24l01p.setRfOutputPower(NRF24L01P_TX_PWR_MINUS_12_DB);//mAX 0  -6 -12 -18
+    my_nrf24l01p.setAirDataRate(NRF24L01P_DATARATE_1_MBPS);//250k,1000,2000K
+    // 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 );//mAX 32
+    my_nrf24l01p.setReceiveMode();
+    my_nrf24l01p.enable();
+    
+    wait_ms(100);
+   // my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)rxData,1);//dummy
+
+    interrput.attach_us(&timer, 100);//100 usec 10Khz
+    UDGS01.attach(recieve,Serial::RxIrq);//牛からのデータ受信したら割り込み発生してrecieveを呼び出す
+
+ //   my_nrf24l01p.flush_rx_fifo();
+ while(1){
+       
+       if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P0) ) {    //受信?
+            // ...read the data into the receive buffer
+            if (rxDataIdx < TRANSFER_SIZE){
+                 bufferidx = TRANSFER_SIZE;
+                 which = 1;
+            }
+            else{
+                 bufferidx = 0;
+                 which = 2;
+            }
+             
+            rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, (char*)(rxData+bufferidx),TRANSFER_SIZE );
+            //myled1 = !myled1;
+            //if (rcv_flg==0) 
+            
+            
+             
+            rcv_flg = 1;                                       
+        }
+        
+       if (snd_flg==1) {//最初のバッファ
+               snd_flg=0;
+               my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char *)txData , TRANSFER_SIZE  );
+               pc.putc('1');
+         }    
+         else if (snd_flg==2)  {//後半のバッファ         
+               snd_flg=0;
+               my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)(txData+TRANSFER_SIZE) , TRANSFER_SIZE  );
+                 pc.putc('2');
+
+         }
+         
+ } //一番最初のwhileの}
+}