![](/media/cache/group/EIC.png.50x50_q85.png)
scroll string on MARMEX-OB
Dependencies: MARMEX_OB_oled_J mbed
Diff: main.cpp
- Revision:
- 0:39b78248fd07
diff -r 000000000000 -r 39b78248fd07 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue May 20 15:39:36 2014 +0000 @@ -0,0 +1,80 @@ +#include "mbed.h" +#include "MARMEX_OB_oled.h" +#include "lcharmap.h" + +//"LCHAR_HEIGHT", "LCHAR_WIDTH" -> "lcharmap.h" +DigitalOut myled(LED1); +MARMEX_OB_oled oled1( p5, p7, p8, p30, p11 ); // mosi, sclk, cs, rst, power_control + +void strscroll(char *str, int len); +void arraycopy(char array1[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN],char array2[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN]); +void arraycopy2(char array1[][LCHAR_HEIGHT][LCHAR_WIDTH],char array2[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN], int n); + +int main() +{ + oled1.background( 0x000000 ); + oled1.cls(); + char str[]={"ABC abc"};//input massage + strscroll(str,strlen(str)); + +} + +void strscroll(char *str, int len) +{ + char left[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN], + center[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN], + right[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN]; + arraycopy2(map_mark,left,0); + arraycopy2(map_mark,center,0); + + for(int i=0; i<len+2; i++) { + if(i>=len)arraycopy2(map_mark,right,0); + else if('A'<=str[i]&&str[i]<='Z')arraycopy2(map_large,right,str[i]-'A'); + else if('a'<=str[i]&&str[i]<='z')arraycopy2(map_small,right,str[i]-'a'); + else if('0'<=str[i]&&str[i]<='9')arraycopy2(map_number,right,str[i]-'0'); + else if(str[i]==32)arraycopy2(map_mark,right,0); + else if(str[i]==',')arraycopy2(map_mark,right,1); + else if(str[i]=='.')arraycopy2(map_mark,right,2); + else oled1.cls(),myled=1,strscroll("ERROR", strlen("ERROR")),exit(EXIT_FAILURE); + + for(int x=15; x>=15-(LCHAR_WIDTH+MARGIN); x--) { + for(int k=0; k<(LCHAR_WIDTH+MARGIN); k++) { + for(int y=0; y<LCHAR_HEIGHT; y++) { + int color; + + //left + if(left[y][k]==1)color=0xFFFFFF; + else color=0x000000; + if(0<=x+k-(LCHAR_WIDTH+MARGIN)*2&&x+k-(LCHAR_WIDTH+MARGIN)*2<=15)oled1.fill((x+k-(LCHAR_WIDTH+MARGIN)*2)*8,y*8,8,8,color); + + //center + if(center[y][k]==1)color=0xFFFFFF; + else color=0x000000; + if(0<=x+k-(LCHAR_WIDTH+MARGIN)&&x+k-(LCHAR_WIDTH+MARGIN)<=15)oled1.fill((x+k-(LCHAR_WIDTH+MARGIN))*8,y*8,8,8,color); + + //right + if(right[y][k]==1)color=0xFFFFFF; + else color=0x000000; + if(0<=x+k&&x+k<=15)oled1.fill((x+k)*8,y*8,8,8,color); + } + + } + if(x!=15-(LCHAR_WIDTH+MARGIN))wait(0.1); + } + arraycopy(center,left); + arraycopy(right,center); + } + + +} + +void arraycopy(char array1[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN],char array2[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN]){ + for(int i=0; i<LCHAR_HEIGHT; i++)for(int j=0; j<LCHAR_WIDTH; j++)array2[i][j]=array1[i][j]; +} + +void arraycopy2(char array1[][LCHAR_HEIGHT][LCHAR_WIDTH],char array2[LCHAR_HEIGHT][LCHAR_WIDTH+MARGIN], int n){ + for(int i=0; i<LCHAR_HEIGHT; i++)for(int j=0; j<LCHAR_WIDTH+MARGIN; j++){ + if(j>=LCHAR_WIDTH)array2[i][j]=0; + else array2[i][j]=array1[n][i][j]; + } +} \ No newline at end of file