p4 ken / Mbed 2 deprecated LED_Matrix_Japanese_Scroll

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "patterns.cpp"
00003 
00004 DigitalOut RCK(D10);// 74595
00005 DigitalOut G(D9);   // 74595
00006 DigitalOut SER(D8); // 74164
00007 DigitalOut CLK(D7); // 74164
00008 DigitalIn BUTTON(USER_BUTTON); // 点灯・消灯ボタン
00009 //Serial pc(USBTX, USBRX); // USBシリアル通信
00010 Timer timer; // 経過時間のカウンター
00011 const unsigned char HI = 0;
00012 const unsigned char LO = 1;
00013 const unsigned char MODE = 2; //SPI
00014 
00015 char scan = 16; // 点灯中の行
00016 //int round = 0; // スキャンを何周したか
00017 //int scroll = 0; // 左スクロールした量
00018 char speed = 30-29; // スクロール進段ミリ秒
00019 int t = 0; // 経過時間
00020 
00021 void receive() { // シリアル受信割り込み
00022 //    if(pc.getc() == 0b00000001) pc.printf("received!\r\n");
00023 //    pc.putc(pc.getc() + 1); // echo
00024 }
00025 
00026 //unsigned char getPattern(char const *p, char x, char y, bool s) {
00027 //    unsigned char r;
00028 //    r = (unsigned char)p[x][4*11-1-y%(4*11)];
00029 //    return r;
00030 //}
00031 
00032 int main() {
00033     SPI spi(D11, D12, D13); // SPIピン mosi, miso, sclk
00034     spi.format(8, MODE); // 74595へ~ビットずつ送る //立ち下りクロック
00035     spi.frequency(1*1000*1000); // 74595へのクロック周波数 最高96 初期1
00036 //    pc.attach(receive, Serial::RxIrq); // シリアル受信割り込み
00037 //    pc.baud(9600); // シリアル通信のクロックレート デフォルト9600
00038     timer.start(); // 経過時間のカウントを開始
00039     timer.reset(); // 経過時間0秒
00040 
00041     spi.write(pattern2[0][0]
00042         + pattern5[0][0]
00043         + pattern_bus1[0][0]
00044         + pattern_bus2[0][0]
00045         + pattern_bus3[0][0]
00046         + pattern_bus4[0][0]
00047         + pattern_bus5[0][0]
00048         + pattern_bus6[0][0]
00049         + pattern_8k_kaisoku_sho[0][0]
00050         + pattern_8k_yayoi_tsugi[0][0]
00051         + pattern_8k_yayoi_next[0][0]
00052         + pattern_8k_izu_tsugi[0][0]
00053         + pattern_8k_izu_next[0][0]
00054         + pattern_8k_izuchi_tsugi[0][0]
00055         + pattern_8k_izuchi_next[0][0]
00056         + pattern_8k_yume_tsugi[0][0]
00057         + pattern_8k_yume_next[0][0]
00058         + pattern_8k_sho_tsugi[0][0]
00059         + pattern_8k_sho_next[0][0]
00060         + pattern_8k_shin_ya[0][0]
00061         + pattern_8k_green_pocket[0][0]
00062         + pattern_8k_yayoi_mamonaku[0][0]
00063         + pattern_8k_izu_mamonaku[0][0]
00064         + pattern_8k_izuchi_mamonaku[0][0]
00065         + pattern_8k_yume_mamonaku[0][0]
00066         + pattern_8k_sho_mamonaku[0][0]
00067         + pattern_8k_door_this[0][0]
00068         + pattern_8k_door_another[0][0]
00069         + pattern_8k_door_both[0][0]
00070         + pattern_8k_yayoi_jp[0][0]
00071         + pattern_8k_yayoi_en[0][0]
00072         + pattern_8k_izu_jp[0][0]
00073         + pattern_8k_izu_en[0][0]
00074         + pattern_8k_izuchi_jp[0][0]
00075         + pattern_8k_izuchi_en[0][0]
00076         );
00077     
00078     while(1) {
00079         // 行選択
00080         scan++; // 一行進む
00081         if(scan == 17+0) { // 16行目の次
00082             SER = LO; // 点灯
00083             scan = 1; // 1行目に戻る
00084 //            round++; // スキャンが1周した
00085 //            t = timer.read_ms();
00086             t += 1;
00087         } else if(scan == 2) { // 2行目
00088             SER = HI; // 消灯
00089         }
00090         
00091         // 表示パターン送り込み
00092 //        int t = scroll;
00093         for(int i=0; i<4*11; i++){ // iは最大で~*11文字
00094         if(true) {
00095             if(t/8/speed*2 < 4*(166+11)) {
00096                 unsigned char p;
00097                 char y = scan-1;
00098                 char x = 4*11-1-i%(4*11);
00099                 if(t/8/speed*2 <= i) {
00100                     p  = (unsigned char)~0b00000000                     >> (  (t/speed)%8);
00101                 } else if(t/8/speed*2 <= 4*166+i) {
00102                     p  = (unsigned char)~pattern_8k_green_pocket[y][x+(t/8/speed*2-4*11)]   >> (  (t/speed)%8);
00103                 } else {
00104                     p  = (unsigned char)~0b00000000                     >> (  (t/speed)%8);
00105                 }
00106                 if(t/8/speed*2 <= i-4) {
00107                     p += (unsigned char)~0b00000000                     << (8-(t/speed)%8);
00108                 } else if(t/8/speed*2 <= 4*166+i-4) {
00109                     p += (unsigned char)~pattern_8k_green_pocket[y][x+(t/8/speed*2)+2-4*11] << (8-(t/speed)%8);
00110                 } else {
00111                     p += (unsigned char)~0b00000000                     << (8-(t/speed)%8);
00112                 }
00113                 spi.write(p);
00114             } else {
00115                 spi.write((unsigned char)~pattern5[scan-1][4*11-1-i%(4*11)]);
00116 //                spi.write((unsigned char)~0b00000000); //消灯
00117             }
00118         }
00119 //            spi.write((unsigned char)~pattern2[scan-1][4*11-1-i%(4*11)]);
00120 //spi.write(0);
00121 //spi.write(0b10101010);
00122 //spi.write(0b11111111);
00123         }
00124         
00125         // スクロール
00126 //        if(round > speed) { // スクロール速度
00127 //            scroll++; // 1ドットスクロールする
00128 //            round = 0; // スキャン周回カウントリセット
00129 //        }
00130 //        if(scroll > 200) { // スクロール幅
00131 //            scroll = 0; // スクロール数リセット
00132 //        }
00133 
00134         wait_us(10);
00135         RCK = LO;
00136         CLK = LO;
00137 //        G = HI; // 消灯
00138         wait_us(10);
00139         RCK = HI;
00140         CLK = HI;
00141         
00142         // ここまでの処理時間が長いほど明るくなる
00143 //        while(timer.read_us()<0) { // 数字のぶんだけ暗くする
00144 //            wait_us(10);
00145 //        }
00146 
00147         if(!BUTTON) G = LO; // ボタン押せば点灯
00148         
00149         // ダイナミック点灯のパルス幅を決める
00150 //        while(timer.read_us()<100) { // 100*2500でゆっくり
00151 //            wait_us(10);
00152 //        }
00153 //        pc.printf("%d\r\n", timer.read_us());
00154 //        pc.printf("%d\r\n", round/100);
00155     }
00156 }