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

Dependencies:   mbed nRF24L01P SDFileSystem

Revision:
8:3369eef8f9e1
Parent:
7:bad081470837
Child:
9:086fae0bd5f8
--- a/Goto_UD-GS01.cpp	Wed Dec 09 09:14:56 2020 +0000
+++ b/Goto_UD-GS01.cpp	Thu Dec 10 02:05:19 2020 +0000
@@ -3,10 +3,12 @@
 
 #include "mbed.h"
 #include "nRF24L01P.h"
-#include <assert.h>
-#include <stdbool.h>
-RawSerial  pc(PA_2, PA_3,115200);  //ここはpcとケーブルでつないだときにシリアル通信させてたところだから、ここから牛のUARTにつなぐだけで大丈夫なはず。→ここは元々ST基板のPC部分(パキッと折れそうな方)との通信用に使われてるから他のシリアルは無理らしい。
-RawSerial  UDGS01(PA_0, PA_1, 115200);        // UD-GS01とのシリアル通信用にUARTピンを新たに定義。
+//#include <assert.h>
+//#include <stdbool.h>
+#include "SDFileSystem.h"
+Serial  pc(PA_2, PA_3);  //ここはpcとケーブルでつないだときにシリアル通信させてたところだから、ここから牛のUARTにつなぐだけで大丈夫なはず。→ここは元々ST基板のPC部分(パキッと折れそうな方)との通信用に使われてるから他のシリアルは無理らしい。
+Serial  UDGS01(PA_0, PA_1); // UD-GS01とのシリアル通信用にUARTピンを新たに定義。
+       
 Ticker     interrput;
 
 #define TRANSFER_SIZE   32
@@ -27,7 +29,7 @@
 int bufferidx=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;
@@ -46,7 +48,6 @@
         pc.printf("\r\n");
         rcv_flg = 0;    
       }
-   //ここらへんにSDカードの書き込みを入れようかと!
 }
 
 void recieve(){
@@ -56,8 +57,13 @@
         txData1[txDataIdx] = UDGS01.getc();  //getcharだと、PCからのキーボード入力という標準コンソール?のやつだからだめらしい
 //        pc.printf("tx[%d] = %s", txDataIdx, &txData[txDataIdx]);
         txDataIdx++;
-              
-        if (txDataIdx == TRANSFER_SIZE) {//最初の32回
+/*        
+        if(txData1[txDataIdx] == 0x0A){ //改行(0x0A)があればその時点で送りたい
+              memcpy(txData2, txData1, txDataIdx);
+              txDataIdx = 0;
+              snd_flg = 2;
+*/              
+        }else if (txDataIdx == TRANSFER_SIZE) {//最初の32回
            memcpy(txData2, txData1, TRANSFER_SIZE);
                
                txDataIdx=0;
@@ -65,36 +71,34 @@
                
         }
                
-        }
+//    }
     
 }
 
-//for文でrxData1とrxData2を比較して、まったく同じ中身なら0,違えば1を返す関数 
-bool rxData_equal(char* rxData1,/* size_t size1,*/ const char* rxData2/*, size_t size2*/)
-{
-    assert(rxData1 != NULL);
-    assert(rxData2 != NULL);
+//for文でrxData1とrxData2を比較して、まったく同じ中身なら0,違えば1を返す関数のつもり 
+//bool rxData_equal(char* rxData1,/* size_t size1,*/ const char* rxData2/*, size_t size2*/)
+//{
+//    assert(rxData1 != NULL);
+//    assert(rxData2 != NULL);
 //    assert(size1 != 0);
 //    assert(size2 != 0);
-/*
+
     // 要素数が違うなら、絶対に一致しない
-    if (size1 != size2) {
-        return false;
-    }
-*/
-    for (i = 0; i < TRANSFER_SIZE; ++i) {
-        if (rxData1[i] != rxData2[i]) {
-            return false;
-        }
-    }
-    return true;
-}  
-      
+//    if (size1 != size2) {
+//        return false;
+//    }
+
+//    for (i = 0; i < TRANSFER_SIZE; ++i) {
+//        if (rxData1[i] != rxData2[i]) {
+//            return false;
+//        }
+//    }
+//    return true;
+//}  
+    
 int main() {
-
- 
-   
-
+    pc.baud(115200);
+    UDGS01.baud(115200);  
     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
@@ -111,21 +115,29 @@
     my_nrf24l01p.setReceiveMode();
     my_nrf24l01p.enable();
     
+    
     wait_ms(100);
    // my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)rxData,1);//dummy
 
-    interrput.attach(&timer, 1);//100 usec 10Khz
+    interrput.attach(&timer, 0.5);//100 usec 10Khz
     UDGS01.attach(recieve,Serial::RxIrq);//牛からのデータ受信したら割り込み発生してrecieveを呼び出す
 
  //   my_nrf24l01p.flush_rx_fifo();
  while(1){
        
        if ( my_nrf24l01p.readable(NRF24L01P_PIPE_P0) ) {    //受信可能であれば
-            
+           
          rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, (char*)(rxData1),TRANSFER_SIZE );
          if(/*rxData_equal(rxData1, rxData2)==*/1){ //rxData1で読んだ値が以前コピーしたのと完全一致なら0, 違えば1を出す。              
             
              memcpy(rxData2, rxData1, TRANSFER_SIZE);
+             SDFileSystem *sd = new SDFileSystem(PB_15,  PB_14, PB_13, PB_11, "sd", NC, SDFileSystem::SWITCH_NONE, 20000000); //SDカードのやつ mosi, miso, sclk, cs, name, card detect, sw type, freq
+             FILE *fp;    
+             fp = fopen("/sd/log/log(UD-GS01).txt", "a");
+             fputs(rxData2, fp);
+             wait(1);
+             fclose(fp);
+             
              rcv_flg = 1;
             
          }
@@ -143,7 +155,12 @@
 //               for(i=0; i>32; i++){
 //               pc.printf("tx[%d] = %s", 30, txData[30]);
 //               }
-               pc.printf("%d", rxDataCnt);
+               pc.putc('1');
+               wait(1);
+         }else if (snd_flg==2)  {//後半のバッファ         
+               snd_flg=0;
+               my_nrf24l01p.write( NRF24L01P_PIPE_P0, (char*)txData2 , TRANSFER_SIZE  );
+               pc.putc('2');
                wait(1);
          }