Using mbed USB-UART+alpha for Y-con P020(serialIF Electric Paper Display)

Dependencies:   SDFileSystem USBDevice YconP020 mbed

mbedを使って電子ペーパーの Y-con P020をUSBでPCと接続します。 単に USB-UART変換器で繋いだものと違って、mbedに接続した SDカードなどに置いた BMPファイルを表示することが出来ます。

mbed LPC1768、トラ技ARMライタで動作することを確認しました。
mbed LPC1768では localfilesystem(MBEDドライブ)を SDカード同様に使えます。

詳しくはこちらをご覧ください。

Committer:
jk1lot
Date:
Sun Jul 03 10:43:26 2016 +0000
Revision:
13:7137c60fcb06
Parent:
12:1ad828c0ec83
separated YconP020 library; added internal buffer and text out

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jk1lot 0:d60e4792417b 1 #include "mbed.h"
jk1lot 1:ab8ad6731800 2 #include "SDFileSystem.h"
jk1lot 4:751971435f46 3 #include "YconP020.h"
jk1lot 0:d60e4792417b 4 #include <string>
jk1lot 1:ab8ad6731800 5 #include <vector>
jk1lot 1:ab8ad6731800 6 #include <queue>
jk1lot 1:ab8ad6731800 7
jk1lot 13:7137c60fcb06 8 //このプログラムは YconP020ライブラリの使い方の例も含んでいます。
jk1lot 13:7137c60fcb06 9 //使用例を取り除いて純粋に「USB-UART変換器+コマンド拡張」として
jk1lot 13:7137c60fcb06 10 //使う場合は以下の #define を 0 に設定してください。
jk1lot 13:7137c60fcb06 11 #define SAMPLECODE 1
jk1lot 13:7137c60fcb06 12
jk1lot 8:92bc3b1b6191 13 #ifdef TARGET_LPC11U35_501
jk1lot 13:7137c60fcb06 14 //トラ技ARMライタではPCとの通信にUSBシリアルを使うにはUSBDeviceライブラリが必要
jk1lot 8:92bc3b1b6191 15 #include "USBSerial.h"
jk1lot 8:92bc3b1b6191 16 USBSerial pc;
jk1lot 8:92bc3b1b6191 17 #define USE_USBSerial
jk1lot 8:92bc3b1b6191 18 #else
jk1lot 8:92bc3b1b6191 19 Serial pc(USBTX,USBRX);
jk1lot 8:92bc3b1b6191 20 #endif
jk1lot 1:ab8ad6731800 21
jk1lot 8:92bc3b1b6191 22 #if DEVICE_LOCALFILESYSTEM == 1
jk1lot 8:92bc3b1b6191 23 LocalFileSystem localFS("MBED");
jk1lot 8:92bc3b1b6191 24 #endif
jk1lot 8:92bc3b1b6191 25 SDFileSystem sdcard(p5, p6, p7, p8, "sd");
jk1lot 1:ab8ad6731800 26
jk1lot 2:099655fa556d 27 YconP020 epd(p9, p10);
jk1lot 0:d60e4792417b 28
jk1lot 8:92bc3b1b6191 29 DigitalOut ledcommode(LED1);
jk1lot 0:d60e4792417b 30
jk1lot 1:ab8ad6731800 31 queue<char> pcrecbuf;
jk1lot 0:d60e4792417b 32 void pcint() {
jk1lot 8:92bc3b1b6191 33 //mbed1768 だとここは if で良いのだけど
jk1lot 8:92bc3b1b6191 34 //トラ技ARMライタでは whileにしないとうまく行かない
jk1lot 8:92bc3b1b6191 35 //USBSerialだと1文字毎には割り込みは入らないのかな?
jk1lot 8:92bc3b1b6191 36 //mbed1768なら whileでもうまく行くので whileを使った
jk1lot 8:92bc3b1b6191 37 while(pc.readable()) pcrecbuf.push(pc.getc());
jk1lot 0:d60e4792417b 38 }
jk1lot 0:d60e4792417b 39
jk1lot 7:cfffd4bd6357 40 void epdtopc() {
jk1lot 7:cfffd4bd6357 41 while(epd.readable()) pc.putc(epd.getc());
jk1lot 7:cfffd4bd6357 42 }
jk1lot 6:ed33e6b54207 43
jk1lot 0:d60e4792417b 44 int main() {
jk1lot 8:92bc3b1b6191 45 #ifndef USE_USBSerial
jk1lot 0:d60e4792417b 46 pc.baud(115200);
jk1lot 8:92bc3b1b6191 47 #endif
jk1lot 0:d60e4792417b 48 pc.attach(pcint);
jk1lot 13:7137c60fcb06 49 pc.puts("\r\nY-Con P020 Extend mode by mbed\r\n");
jk1lot 13:7137c60fcb06 50 #if SAMPLECODE == 1
jk1lot 8:92bc3b1b6191 51 //こんな使い方も出来ますよという例
jk1lot 13:7137c60fcb06 52 //例1 epd.printf()でコマンドを実行する
jk1lot 13:7137c60fcb06 53 epd.command_mode();
jk1lot 13:7137c60fcb06 54 epd.printf("d %d\r", 3);
jk1lot 13:7137c60fcb06 55 epdtopc();
jk1lot 13:7137c60fcb06 56 epd.wait_command_ready();
jk1lot 13:7137c60fcb06 57 wait(2);
jk1lot 13:7137c60fcb06 58 //例2 メンバ関数でコマンドを実行する
jk1lot 12:1ad828c0ec83 59 pc.printf("%s", epd.yslab_info().c_str());
jk1lot 13:7137c60fcb06 60 //例3 epd.text() を使って文字を表示する
jk1lot 13:7137c60fcb06 61 epd.text()->cls();
jk1lot 13:7137c60fcb06 62 epd.setfontscale(2,3);
jk1lot 13:7137c60fcb06 63 epd.text()->puts("Hello World\n");
jk1lot 13:7137c60fcb06 64 epd.setfontscale(1,2);
jk1lot 13:7137c60fcb06 65 epd.text()->puts("YconP020 ");
jk1lot 13:7137c60fcb06 66 epd.setfontscale(1,3);
jk1lot 13:7137c60fcb06 67 epd.text()->printf("LED: %d ", epd.command_led());
jk1lot 13:7137c60fcb06 68 epd.command_led(false);
jk1lot 13:7137c60fcb06 69 epd.text()->printf("%d ", epd.command_led());
jk1lot 13:7137c60fcb06 70 epd.command_led(!epd.command_led());
jk1lot 13:7137c60fcb06 71 epd.text()->printf("%d\n", epd.command_led());
jk1lot 13:7137c60fcb06 72 epd.command_interval(2560);
jk1lot 13:7137c60fcb06 73 epd.text()->printf("Interval=%d\n",epd.command_interval());
jk1lot 13:7137c60fcb06 74 epd.command_interval(3000);
jk1lot 11:ecb9de1c64c5 75 epd.display_internalbuf();
jk1lot 11:ecb9de1c64c5 76 wait(3);
jk1lot 13:7137c60fcb06 77 //例4 epd.pset() でグラフィック表示
jk1lot 13:7137c60fcb06 78 epd.clear_internalbuf();
jk1lot 13:7137c60fcb06 79 for(int x=0; x<epd.width(); x++) {
jk1lot 13:7137c60fcb06 80 epd.pset(x,(sin(2*3.14/200*x)+1)*epd.height()/2);
jk1lot 13:7137c60fcb06 81 epd.pset(x,epd.height()/2);
jk1lot 10:0e4b8601977b 82 }
jk1lot 10:0e4b8601977b 83 epd.display_internalbuf();
jk1lot 13:7137c60fcb06 84 wait(1);
jk1lot 13:7137c60fcb06 85 //例5 グラフィックをクリアせずに重ねて文字表示
jk1lot 13:7137c60fcb06 86 epd.text()->puts("Display Graphics\nand Text at\nthe same time\n");
jk1lot 13:7137c60fcb06 87 epd.display_internalbuf();
jk1lot 13:7137c60fcb06 88 #endif //SAMPLECODE==1
jk1lot 0:d60e4792417b 89 while(1) {
jk1lot 13:7137c60fcb06 90 ledcommode = epd.command_ready();
jk1lot 7:cfffd4bd6357 91 __disable_irq();
jk1lot 7:cfffd4bd6357 92 while(!pcrecbuf.empty() && !pc.readable()) {
jk1lot 7:cfffd4bd6357 93 char c=pcrecbuf.front();
jk1lot 7:cfffd4bd6357 94 pcrecbuf.pop();
jk1lot 7:cfffd4bd6357 95 __enable_irq();
jk1lot 7:cfffd4bd6357 96 epd.putc(c);
jk1lot 7:cfffd4bd6357 97 __disable_irq();
jk1lot 0:d60e4792417b 98 }
jk1lot 7:cfffd4bd6357 99 __enable_irq();
jk1lot 7:cfffd4bd6357 100 if(epd.readable()) {
jk1lot 7:cfffd4bd6357 101 pc.putc(epd.getc());
jk1lot 0:d60e4792417b 102 }
jk1lot 0:d60e4792417b 103 }
jk1lot 0:d60e4792417b 104 }