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カード同様に使えます。
詳しくはこちらをご覧ください。
main.cpp@13:7137c60fcb06, 2016-07-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |