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