Aliexpressなどで販売されている64x32のフルカラードットマトリクスLED2枚とNucleo F401REを利用して、 E233系の駅停車時、路線名表示ありのLED側面行先表示を再現するプログラムです。 3秒間隔、3段階切替で、路線名、種別、行先、次停車駅を個別に指定することが可能です。

Dependencies:   SDFileSystem mbed

Revision:
18:b8563e3319fd
Parent:
17:95bcbc53d96b
Child:
19:26e0fae24da6
--- a/main.cpp	Sat Nov 15 15:21:40 2014 +0000
+++ b/main.cpp	Sat Nov 15 16:12:28 2014 +0000
@@ -497,6 +497,89 @@
         }
 }
 
+//路線名表示の使用領域チェック
+//路線名表示時に次停車駅を表示するかどうかの判断に使用
+//路線名が下半分も使用しているなら次停車駅は表示しない
+bool BufferBlankCheck(){
+    bool NotBlankflag = 0;
+    for(int y = 16; y < 32; y++){
+        for(int x = 48; x < 128; x++){
+            if(LEDBuffer[y][x] != 0){
+                NotBlankflag = 1;   
+            } 
+            if(NotBlankflag == 1){
+                break;
+            }
+        }
+        if(NotBlankflag == 1){
+            break;
+        }    
+    }
+    if(NotBlankflag == 0){
+        pc.printf("Blank\r\n"); 
+        return 0;     
+    }else{
+        pc.printf("Not Blank\r\n");  
+        return 1;   
+    }
+}
+
+
+
+void SDFileRead(){
+    //SDCard
+    //種別
+    sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
+    //SDFilePath = "/sd/E233/Kind/2.bin";
+    SDBufferWrite(LEDBuffer,0,0,48,32);
+    
+    sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
+    //SDFilePath = "/sd/E233/Kind/2.bin";
+    SDBufferWrite(LEDBuffer2,0,0,48,32);    
+    
+    //種別(英語)
+    sprintf(SDFilePath,"/sd/E233/KindE/%d.bin",KindNumber);
+    //SDFilePath = "/sd/E233/Kind/2.bin";
+    SDBufferWrite(LEDBuffer3,0,0,48,32);    
+    
+    //路線名
+    //SDFilePath = "/sd/E233/Line/37.bin";
+    sprintf(SDFilePath,"/sd/E233/Line/%d.bin",LineNumber);
+    SDBufferWrite(LEDBuffer,48,0,80,32);
+    
+    //行先
+    //SDFilePath = "/sd/E233/For/1.bin";
+    sprintf(SDFilePath,"/sd/E233/For/%d.bin",ForNumber);
+    SDBufferWrite(LEDBuffer2,48,0,80,16);
+    
+    //行先(英語)
+    //SDFilePath = "/sd/E233/For/1.bin";
+    sprintf(SDFilePath,"/sd/E233/ForE/%d.bin",ForNumber);
+    SDBufferWrite(LEDBuffer3,48,0,80,16);
+    
+    //次停車駅(路線名表示)
+    //路線名表示の次停車駅は路線名表示が上半分に収まるときのみ表示
+    if(BufferBlankCheck() == 0){
+        //SDFilePath = "/sd/E233/NextStation/1.bin";
+        sprintf(SDFilePath,"/sd/E233/NextStation/%d.bin",NextStaNumber);
+        SDBufferWrite(LEDBuffer,48,16,80,16);
+    }
+
+    //次停車駅
+    //SDFilePath = "/sd/E233/NextStation/1.bin";
+    sprintf(SDFilePath,"/sd/E233/NextStation/%d.bin",NextStaNumber);
+    SDBufferWrite(LEDBuffer2,48,16,80,16);
+    
+    //次停車駅(英語)
+    //SDFilePath = "/sd/E233/NextStation/1.bin";
+    sprintf(SDFilePath,"/sd/E233/NextStationE/%d.bin",NextStaNumber);
+    SDBufferWrite(LEDBuffer3,48,16,80,16);   
+    
+    
+}
+
+
+
 void pc_rx(){
     //pc.putc(pc.getc());
     
@@ -521,24 +604,95 @@
                     // error
                 } else {
                     n1 = (int)(Sertemp1 - '0') ;
-                    pc.printf("%d,",n1); 
+                    //pc.printf("%d,",n1); 
+                }      
+                if ( Sertemp2 < '0' || Sertemp2 > '9' ) {
+                    // error
+                } else {
+                    n2 = (int)(Sertemp2 - '0') ;
+                    //pc.printf("%d,",n2); 
+                }         
+                if ( Sertemp3 < '0' || Sertemp3 > '9' ) {
+                    // error
+                } else {
+                    n3 = (int)(Sertemp3 - '0') ;
+                    //pc.printf("%d\r\n",n3); 
+                }
+                n = (n1 * 100) + (n2 * 10) + n3;
+                LineNumber = n;
+                pc.printf("Line:%d,",n);     
+            }
+            
+            if(SerialBuffer[0] == 'K'){
+                unsigned char Sertemp1 = SerialBuffer[1];
+                unsigned char Sertemp2 = SerialBuffer[2];
+                unsigned char Sertemp3 = SerialBuffer[3];
+                int n1 = 0 ;
+                int n2 = 0 ;
+                int n3 = 0 ;
+                int n = 0;
+                
+            
+                if ( Sertemp1 < '0' || Sertemp1 > '9' ) {
+                    // error
+                } else {
+                    n1 = (int)(Sertemp1 - '0') ;
+                    //pc.printf("%d,",n1); 
                 }      
                 if ( Sertemp2 < '0' || Sertemp2 > '9' ) {
                     // error
                 } else {
                     n2 = (int)(Sertemp2 - '0') ;
-                    pc.printf("%d,",n2); 
+                    //pc.printf("%d,",n2); 
                 }         
                 if ( Sertemp3 < '0' || Sertemp3 > '9' ) {
                     // error
                 } else {
                     n3 = (int)(Sertemp3 - '0') ;
-                    pc.printf("%d,",n3); 
+                    //pc.printf("%d,",n3); 
                 }
                 n = (n1 * 100) + (n2 * 10) + n3;
-                pc.printf("%d,",n); 
+                KindNumber = n;
+                pc.printf("Kind:%d\r\n",n);     
+            }
+            
+            if(SerialBuffer[0] == 'F'){
+                unsigned char Sertemp1 = SerialBuffer[1];
+                unsigned char Sertemp2 = SerialBuffer[2];
+                unsigned char Sertemp3 = SerialBuffer[3];
+                int n1 = 0 ;
+                int n2 = 0 ;
+                int n3 = 0 ;
+                int n = 0;
                 
-                     
+            
+                if ( Sertemp1 < '0' || Sertemp1 > '9' ) {
+                    // error
+                } else {
+                    n1 = (int)(Sertemp1 - '0') ;
+                    //pc.printf("%d,",n1); 
+                }      
+                if ( Sertemp2 < '0' || Sertemp2 > '9' ) {
+                    // error
+                } else {
+                    n2 = (int)(Sertemp2 - '0') ;
+                    //pc.printf("%d,",n2); 
+                }         
+                if ( Sertemp3 < '0' || Sertemp3 > '9' ) {
+                    // error
+                } else {
+                    n3 = (int)(Sertemp3 - '0') ;
+                    //pc.printf("%d,",n3); 
+                }
+                n = (n1 * 100) + (n2 * 10) + n3;
+                ForNumber = n;
+                pc.printf("For:%d\r\n",n);     
+            }
+            
+            
+            if(SerialBuffer[0] == 'S' && SerialBuffer[1] == 'e' && SerialBuffer[2] == 't'){
+                pc.printf("Set\r\n"); 
+                SDFileRead();
             }
         
     }else{
@@ -590,26 +744,9 @@
     }    
     pc.printf("SumSW:%d\r\n",SumSWNum);
     
-    //SDCard
-    sprintf(SDFilePath,"/sd/E233/Kind/%d.bin",KindNumber);
-    //SDFilePath = "/sd/E233/Kind/2.bin";
-    SDBufferWrite(LEDBuffer,0,0,48,32);
-    
-    //SDFilePath = "/sd/E233/For/1.bin";
-    sprintf(SDFilePath,"/sd/E233/For/%d.bin",ForNumber);
-    SDBufferWrite(LEDBuffer,48,0,80,16);
+
     
-    //SDFilePath = "/sd/E233/Line/37.bin";
-    sprintf(SDFilePath,"/sd/E233/Line/%d.bin",LineNumber);
-    //pc.printf("%s\r\n",SDFilePath);
-    SDBufferWrite(LEDBuffer,48,0,80,32);
-    
-    
-    //SDFilePath = "/sd/E233/NextStation/1.bin";
-    sprintf(SDFilePath,"/sd/E233/NextStation/%d.bin",NextStaNumber);
-    SDBufferWrite(LEDBuffer,48,16,80,16);    
-    
-    
+    SDFileRead();
     
     //Debug
     if(Debug == 1){