LEDMatrixDisplay Program 文字ごとに色を変更できるように修正

Dependencies:   mbed

Fork of LEDMatrix_Master by en 129

Revision:
10:e261964e4989
Parent:
8:b24bd32cd2ed
--- a/main.cpp	Sat Nov 16 06:27:26 2013 +0000
+++ b/main.cpp	Fri Mar 28 15:33:29 2014 +0000
@@ -15,7 +15,37 @@
 unsigned int ImageBuf[3][DISPLAY_XSIZE];//16*6
 unsigned int ColerMap[3][DISPLAY_XSIZE];
 
-unsigned int CountChar(char *str)
+unsigned int CountChar_full_W(char *str )
+{
+    unsigned char   f_SJISChar = 0;
+    unsigned char   c = 0;
+    unsigned int    CountChar = 0;
+
+    c = *str;
+    while(c != '\0')
+    {
+        //2バイト文字の判定
+        if( ((0x81 <= c && c <= 0x9f) || (0xe0 <= c && c <= 0xfc)) && f_SJISChar != 1 )
+        {
+            f_SJISChar = 1;
+        }
+        else if(f_SJISChar == 1)
+        {
+            CountChar++;
+            f_SJISChar = 0;
+        }
+        else
+        {
+            f_SJISChar = 0;
+        }
+
+        str++;
+        c = *str;
+    }
+    return CountChar;
+}
+
+unsigned int CountChar_half_W(char *str)
 {
     unsigned char   f_SJISChar = 0;
     unsigned char   c = 0;
@@ -31,15 +61,20 @@
         }
         else
         {
-            f_SJISChar = 0;
-            CountChar++;
+            if( f_SJISChar == 1)
+            {
+                f_SJISChar = 0;
+            }
+            else
+            {
+                CountChar++;
+            }
         }
         str++;
         c = *str;
     }
     return CountChar;
 }
-
 void SPILineOut(unsigned char setLine)
 {
     unsigned int data[3]={0};
@@ -193,18 +228,10 @@
 int main()
 {
     unsigned int i = 0;
-    char tmpstr[100];
+    unsigned int s_Strs = 0;
 
-    /*=====================*/
-    /*ここを書き換えてください*/
-    /*=====================*/
-    //ET2013 ARMブース mbedコーナーにようこそ!
-
-    char strs[100]={0x82,0x64,0x82,0x73,0x82,0x51,0x82,0x4f,0x82,0x50,0x82,0x52,0x81,0x40,0x82,0x60,
-        0x82,0x71,0x82,0x6c,0x83,0x75,0x81,0x5b,0x83,0x58,0x81,0x40,0x82,0x8d,0x82,0x82,
-        0x82,0x85,0x82,0x84,0x83,0x52,0x81,0x5b,0x83,0x69,0x81,0x5b,0x82,0xc9,0x82,0xe6,
-        0x82,0xa4,0x82,0xb1,0x82,0xbb,0x81,0x49,0x00};
-    
+    char strs[100]={};
+    memset(strs,' ',sizeof(strs));
     // Read text file for display message, if exist.
     FILE *fp;
     fp = fopen("/local/message.txt", "r"); 
@@ -215,11 +242,9 @@
         free(fp);
 #endif
     }
-    
     spi.format(16,1);
     spi.frequency(1000000);
 
-    memset(tmpstr,0,sizeof(tmpstr));
     memset(ImageBuf,0,sizeof(ImageBuf));
 
     i=0;
@@ -230,11 +255,16 @@
     while(1)
     {
         memset(ImageBuf,0,sizeof(ImageBuf));
-
-        for(i=0; i<DISPLAY_XSIZE+(16*CountChar(strs)-1); i++)
+        s_Strs = CountChar_half_W(strs)*8;
+        s_Strs += CountChar_full_W(strs)*16;
+        for(i=0; i<DISPLAY_XSIZE+(s_Strs)-16; i++)
         {
+#if 1
             drawStr15x16(strs ,i, COLOR_W);
             ApplyColerMap();
+#else
+            drawStr15x16_AutoColer(strs ,i);
+#endif
             outBordData();
             wait(0.05);
         }