Aliexpressなどで販売されている64x32のフルカラードットマトリクスLED2枚とNucleo F401REを利用して、 E233系の駅停車時、路線名表示ありのLED側面行先表示を再現するプログラムです。 3秒間隔、3段階切替で、路線名、種別、行先、次停車駅を個別に指定することが可能です。
Dependencies: SDFileSystem mbed
Diff: main.cpp
- Revision:
- 17:95bcbc53d96b
- Parent:
- 16:d02248f44c4b
- Child:
- 18:b8563e3319fd
--- a/main.cpp Fri Nov 14 22:51:39 2014 +0000 +++ b/main.cpp Sat Nov 15 15:21:40 2014 +0000 @@ -69,25 +69,22 @@ //BusIn SumSWNum(PA_0,PA_1,PA_4,PB_0); - - - Ticker ChangeTimer; - //Debug bool Debug = 0; -int ChangeCount = 0; - -int LineNumber = 0; -int KindNumber = 0; -int ForNumber = 0; -int NextStaNumber = 0; +int ChangeCount = 0; +int LineNumber = 37; +int KindNumber = 1; +int ForNumber = 1; +int NextStaNumber = 1; +char SerialBuffer[30]; +int count = 0; //SDCardFilePath -char* SDFilePath = "/sd/a.txt"; +char SDFilePath[80]= "/sd/a.txt"; unsigned char gm[32][6]; // Buffer with 32x6 bytes. Graphics memory if you like. unsigned long CT; // Counter for demo code @@ -500,58 +497,116 @@ } } -int main() -{ +void pc_rx(){ + //pc.putc(pc.getc()); + + + if (pc.readable() == 1) { // 受信したデータが存在する + SerialBuffer[count] = pc.getc(); // 受信データを読み込む + if (count > 30 || SerialBuffer[count] == '$') { // 文字数が既定の個数を超えた場合、又は終了文字を受信した場合 + SerialBuffer[count] = '\0'; // 末尾に終端文字を入れる + count = 0; + + if(SerialBuffer[0] == 'L'){ + 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; + pc.printf("%d,",n); + + + } + + }else{ + count++; + } + } +} + +int main(){ Init(); // Set things up //Serial pc.printf("Power ON\r\n"); + //SumSW - SI = HIGH; - SCK = HIGH; + int testData[16] = {0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0}; SI = LOW; - SCK = LOW; - - for(int a = 0; a < 14; a++){ + for(int a = 0; a < 16; a++){ + if(testData[a] == 1){ + SI = HIGH; + pc.printf("1,"); + }else{ + SI = LOW; + pc.printf("0,"); + } SCK = HIGH; - SCK = LOW; + wait_us(15); + SCK = LOW; + wait_us(15); } RCK = HIGH; + wait_us(15); RCK = LOW; + pc.printf("\r\n"); int SumSWNum = 0; - - if(SumSW1){ + if(SumSW1 == 1 ){ SumSWNum = SumSWNum + 1; } - if(SumSW2){ + if(SumSW2 == 1){ SumSWNum = SumSWNum + 2; } - if(SumSW4){ + if(SumSW4 == 1){ SumSWNum = SumSWNum + 4; } - if(SumSW8){ + if(SumSW8 == 1){ SumSWNum = SumSWNum + 8; } - - - - pc.printf("SumSW:%d\r\n",SumSWNum); - //SDCard - SDFilePath = "/sd/E233/Kind/2.bin"; + 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"; + //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"; + + //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"; + + //SDFilePath = "/sd/E233/NextStation/1.bin"; + sprintf(SDFilePath,"/sd/E233/NextStation/%d.bin",NextStaNumber); SDBufferWrite(LEDBuffer,48,16,80,16); @@ -572,10 +627,15 @@ pc.printf("\r\n"); } } - + //Serial + pc.attach(pc_rx, Serial::RxIrq); + //DisplayTimer ChangeTimer.attach(&TimerTick,3); + + + while(1) { CT++; if (ChangeCount == 0){