v1

Dependencies:   mbed IM920

Revision:
0:f4fb5a0f6981
Child:
1:69472741bd36
diff -r 000000000000 -r f4fb5a0f6981 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jul 29 17:03:31 2021 +0000
@@ -0,0 +1,215 @@
+#include "mbed.h"
+#include "IM920.h"
+
+// ***************************************************
+// コンストラクタ
+// ***************************************************
+Serial pc(USBTX, USBRX, 115200);
+Serial im920_serial(D1, D0, 115200);
+
+IM920 im920(im920_serial, pc, 115200);
+
+// ***************************************************
+// 関数の宣言
+// ***************************************************
+void ReadPC();
+void ReadSensorSetup();
+void ReadData();
+void Read0xA5();
+void Help();
+
+// ***************************************************
+// 変数の宣言
+// ***************************************************
+bool header_set = false;
+char im_buf[16];//16なのって意味ある?
+int im_buf_n = 0;
+
+float lat, lon, height;
+float press, temp, altitude;
+
+float imu[6], mag[3];
+float mag_geo[3];
+
+float voltage_main, voltage_sep;
+float current_main, current_sep;
+
+// ***************************************************
+// 無線のヘッダまとめ
+// ***************************************************
+const char HEADER_SETUP = 0x01;
+// 0xA1
+
+const char HEADER_DATA = 0xA2;
+// 0xA2
+//
+
+const char HEADER_ECHO = 0xA5;
+// 0xA5,コマンド
+//   1     1
+
+// ***************************************************
+// メイン関数
+// ***************************************************
+int main() {
+    wait(0.5f);
+    pc.printf("Hello Ground!\r\n");
+    pc.attach(&ReadPC, Serial::RxIrq);
+    im920.attach(&Read0xA5, HEADER_ECHO);
+    im920.attach(&ReadSensorSetup, HEADER_SETUP);
+    im920.attach(&ReadData, HEADER_DATA);
+}
+
+void ReadPC(){
+    char c = pc.getc();
+    if(!header_set){
+        im920.header((char)0xF0);
+        header_set = true;
+    }
+    
+    switch(c){
+        case '0':
+        im920.write((char)0x00);
+        im_buf[im_buf_n] = '0';
+        im_buf_n ++;
+        pc.printf("INPUT : 0\r\n");
+        break;
+        
+        case '1':
+        im920.write((char)0x01);
+        im_buf[im_buf_n] = '1';
+        im_buf_n ++;
+        pc.printf("INPUT : 1\r\n");
+        break;
+        
+        case '?':
+        Help();
+        break;
+        
+        case '\n':
+        if(header_set){
+            im920.send();
+            pc.printf("Send : %s\r\n", im_buf);
+            header_set = false;
+            for(int i = 0; i < im_buf_n; i ++){
+                im_buf[i] = '\0';
+            }
+            im_buf_n = 0;
+        }
+        break;
+    }
+}
+
+void ReadSensorSetup(){
+    pc.printf("\r\n");
+    pc.printf("****Sensor Setup****\r\n");
+    
+    if(im920.data[1] == 1){
+        pc.printf("GPS         : OK\r\n");   
+    }else{
+        pc.printf("GPS         : NG\r\n");
+    }
+    if(im920.data[2] == 1){
+        pc.printf("LPS22HB     : OK\r\n");
+    }else{
+        pc.printf("LPS22HB     : NG\r\n");  
+    }
+    if(im920.data[3] == 1){
+        pc.printf("MPU9250     : OK\r\n");
+    }else{
+        pc.printf("MPU9250     : NG\r\n");
+    }
+    if(im920.data[4] == 1){
+        pc.printf("MPU9250_MAG : OK\r\n");
+    }else{
+        pc.printf("MPU9250_MAG : NG\r\n");
+    }
+    if(im920.data[5] == 1){
+        pc.printf("INA226_MAIN : OK\r\n");
+    }else{
+        pc.printf("INA226_MAIN : NG\r\n");
+    }
+    if(im920.data[6] == 1){
+        pc.printf("INA226_SEP  : OK\r\n");
+    }else{
+        pc.printf("INA226_SEP  : NG\r\n");
+    }
+    
+    for(int i = 0; i < 20; i++){
+     pc.printf("*");   
+    }
+    pc.printf("\r\n");
+}
+
+void ReadData(){
+    pc.printf("***Acquired Data****\r\n");
+    int bit = 1;
+    lat = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.7f\r\n",lat);
+    lon = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.7f\r\n",lon);
+    altitude = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.7f\r\n",height);
+    
+    press = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.4f[hPa]\r\n", press);
+    temp = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.2f[℃]\r\n", temp);
+    altitude = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.2f[m]\r\n", altitude);
+    
+    voltage_main = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.2f\r\n",voltage_main);
+    current_main = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.2f\r\n",current_main);
+    voltage_sep = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.2f\r\n",voltage_sep);
+    current_sep = (float)im920.toFloat(bit);
+    bit += 4;
+    pc.printf("%.2f\r\n",current_sep);
+    
+    for(int i = 0; i < 20; i++){
+        pc.printf("*");
+    }
+    pc.printf("\r\n\r\n");
+}
+
+void Read0xA5(){
+    for(int i = 0; i < 20; i++){
+        pc.printf("*");
+    }
+    pc.printf("\r\nIM920 ECHO : ");
+    
+    switch(im920.data[1]){
+        case 0x01:
+        pc.printf("SEPARATE\r\n");
+        break;
+        
+        case 0x00:
+        pc.printf("STOP SEPARATE\r\n");
+        break;
+    }
+    
+    for(int i = 0; i < 20; i++){
+        pc.printf("*");
+    }
+    pc.printf("\r\n");
+}
+
+void Help(){
+    pc.printf("\r\n");
+    pc.printf("**I can help you!***\r\n");
+    pc.printf("0 : Stop Separate\r\n");
+    pc.printf("1 : Separate\r\n");
+    pc.printf("? : Help\r\n");
+    pc.printf("********************\r\n\r\n");    
+}
\ No newline at end of file