20210420_monitor

Dependencies:   mbed SB1602E TextLCD MSCFILESytem FatFileSystemCpp

Revision:
3:d10c0110f1f0
Parent:
2:14b832fdd69f
Child:
4:b9669a9feabd
--- a/main.cpp	Thu Sep 03 02:55:39 2020 +0000
+++ b/main.cpp	Mon Jun 07 08:19:14 2021 +0000
@@ -48,6 +48,8 @@
 char cary[30] = {};
 bool usbCheck = 0;  //USBメモリが接続されているかいないか判定する変数 
 bool USBcheck = 0;
+int MPPTerror;
+int MPPTerror_2;
 
 void MSC_init(){    //USBメモリの初期設定関数
     pc.printf("\n\r" );
@@ -75,7 +77,7 @@
         pc.printf( "FileNumber==> %s\n\r", nunu ); //
         fprintf( fp,"%d\n", fileNumber );       //変えた番号をfileNumber.txtに書き込み
         fclose(fp);
-        std::string str_1 = "/usb/Monitor";     //char* c_str = filename.c_str();
+        std::string str_1 = "/usb/MonitorMPPTtest";     //char* c_str = filename.c_str();
         str_1 += nunu[0]; str_1 += nunu[1]; str_1 += nunu[2]; str_1 += nunu[3]; str_1 += nunu[4];
         str_1 += ".csv";
         str_1.copy( cary, 30 );
@@ -96,8 +98,10 @@
             dutylatio = (signed char)msgCAN.data[6];                            //アクセル開度は0~100表示のため,そのまま
         }
         else if( msgCAN.id == 0x20 ){    //送られてきたデータのIDが0x20であればデータ処理する    MPPTID: 0x20
-            Vsolar = ( (float)( (msgCAN.data[0]*100) + msgCAN.data[1]) ) / 10; 
+            Vsolar = ( (float)( (msgCAN.data[0]*100) + msgCAN.data[1]) ) / 10;            
             Csolar = ( (float)( (signed int)((signed char)msgCAN.data[2]*100) + (signed char)msgCAN.data[3] ) ) / 100;   
+            MPPTerror = msgCAN.data[4];
+            MPPTerror_2 = msgCAN.data[5];
             Psolar = Vsolar * Csolar;
         }
         else if( msgCAN.id == 0x30 ){    //送られてきたデータのIDが0x10であればデータ処理する   BMSID: 0x30
@@ -119,9 +123,23 @@
     lcd1.locate(0, 1);  //4*20LCDの2行目に表示
     lcd1.printf("B:%5.1fv%5.1fA%5.0fw", Vbatt, Cbatt, Pbatt);     //-10.0Aとかでも表示の桁が変わらないように%5.1fにしている
     lcd1.locate(0, 2);  //4*20LCDの3行目に表示
-    lcd1.printf("M:%5.1fv%5.1fA", Vmotor, Cmotor);
-    lcd1.locate(0, 3);  //4*20LCDの4行目に表示
-    lcd1.printf("S:%5.1fv%5.1fA", Vsolar, Csolar);
+    lcd1.printf("M:%5.1fv%5.1fA", Vmotor, Cmotor);    
+    if(MPPTerror == 0){
+        lcd1.locate(0, 3);  //4*20LCDの4行目に表示
+        lcd1.printf("S:%5.1fv%5.1fA", Vsolar, Csolar);
+    }
+    if(MPPTerror_2 == 0){
+        lcd1.locate(0, 3);  //4*20LCDの4行目に表示
+        lcd1.printf("S:%5.1fv%5.1fA", Vsolar, Csolar);
+    }
+    if (MPPTerror == 1){
+        lcd1.locate(0, 3);  //4*20LCDの4行目に表示
+        lcd1.printf("S:X%3.1fv%5.1fA", Vsolar, Csolar);
+    }
+     if (MPPTerror_2 == 1){
+        lcd1.locate(0, 3);  //4*20LCDの4行目に表示
+        lcd1.printf("S:XX%3.1fv%5.1fA", Vsolar, Csolar);
+    }
     //デカ文字LCDへの表示
     lcd2.printf( 0, "%5.1fkm/h %5.1fv\r", speed, Vmotor );    //  速度、IPM入力電圧(システム電圧)の表示
     lcd2.printf( 1, "%5.0fw %4.0fw %3d\r", Pmotor, Psolar, dutylatio );  //消費電力、発電電力、バッテリ電圧の表示
@@ -137,7 +155,7 @@
     xbee.printf("XBee => OK");
     can1.attach(&Handler_can1Recieve, CAN::RxIrq);   //CAN受信割り込みの設定
     can1.attach(&Handler_can1Error, CAN::BeIrq );   //バスエラー時の割り込み設定
-    MSC_init(); //USBメモリ初期化
+    MSC_init(); //USBメモリ初期化 //usb
     pc.printf("  SPEED(km/h)  Duty  Vmotor(V)  Cmotor(A)  Pmotor(W)  Vsolar(V)  Csolar(A)  Psolar(W)" );
     pc.printf("  Vbat(V)  Cbatt(A)  Pbatt(W)  Vbatt_max(V)  Vbatt_avg(V)  Vbatt_min(V)\n\r" );    
     xbee.printf("  SPEED(km/h)  Duty  Vmotor(V)  Cmotor(A)  Pmotor(W)  Vsolar(V)  Csolar(A)  Psolar(W)" );
@@ -148,6 +166,8 @@
         //PCへのシリアル通信処理(teratermなどへ表示)
         if( timer1.read_ms() >= 50 && !printf_flag ){  //0.1秒ごとにprintf処理をする
             //xbee.printf("  timer1: %d", timer1.read_ms() );
+            
+            //usb =>
             //USBが刺さっているかいないか確認し、データを書き込む処理
             if( usbCheck ){ //初期設定時(プログラムスタート時)、USBが刺さっていればusbCheck==1(true)
                 fp1 = fopen( cary, "a");    //ファイルを開く, aは上書きの命令(ファイルが存在しなければ新規作成する)
@@ -161,10 +181,13 @@
                     fclose(fp1);         //ファイルを閉じる  
                 }
             }
+            //=>usb
+            
             //xbee.printf("  timer1: %d\n\r", timer1.read_ms() );
             //リセット           
             printf_flag = 1;
         }
+            
         if( timer1.read_ms() >= 200 && printf_flag ){  //0.2秒ごとにprintf処理をする
             timer1.reset();
             //xbee.printf("timer1: %d", timer1.read_ms() );