David Smart
/
PUB_RA8875_TouchColors
An example program using the RA8875 Display controller with the touch-screen option.
main.cpp@3:45ef2ebfeebc, 2016-01-23 (annotated)
- Committer:
- WiredHome
- Date:
- Sat Jan 23 17:54:15 2016 +0000
- Revision:
- 3:45ef2ebfeebc
- Parent:
- 1:47e5fbdb28f1
- Child:
- 4:daf56708ae86
update libs
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 0:2b1669e97586 | 1 | |
WiredHome | 3:45ef2ebfeebc | 2 | #include "mbed.h" // tested with v112 |
WiredHome | 3:45ef2ebfeebc | 3 | #include "RA8875.h" // tested with v102 |
WiredHome | 0:2b1669e97586 | 4 | |
WiredHome | 0:2b1669e97586 | 5 | LocalFileSystem local("local"); |
WiredHome | 0:2b1669e97586 | 6 | RA8875 lcd(p5, p6, p7, p12, NC, "tft"); // MOSI, MISO, SCK, /ChipSelect, /reset, name |
WiredHome | 0:2b1669e97586 | 7 | Serial pc(USBTX, USBRX); |
WiredHome | 0:2b1669e97586 | 8 | |
WiredHome | 0:2b1669e97586 | 9 | extern "C" void mbed_reset(); |
WiredHome | 0:2b1669e97586 | 10 | |
WiredHome | 0:2b1669e97586 | 11 | |
WiredHome | 0:2b1669e97586 | 12 | #define min(a,b) ((a<b)?a:b) |
WiredHome | 0:2b1669e97586 | 13 | #define max(a,b) ((a>b)?a:b) |
WiredHome | 0:2b1669e97586 | 14 | |
WiredHome | 0:2b1669e97586 | 15 | bool Intersect(rect_t rect, point_t p) |
WiredHome | 0:2b1669e97586 | 16 | { |
WiredHome | 0:2b1669e97586 | 17 | if (p.x >= min(rect.p1.x, rect.p2.x) && p.x <= max(rect.p1.x, rect.p2.x) |
WiredHome | 0:2b1669e97586 | 18 | && p.y >= min(rect.p1.y, rect.p2.y) && p.y <= max(rect.p1.y, rect.p2.y)) |
WiredHome | 0:2b1669e97586 | 19 | return true; |
WiredHome | 0:2b1669e97586 | 20 | else |
WiredHome | 0:2b1669e97586 | 21 | return false; |
WiredHome | 0:2b1669e97586 | 22 | } |
WiredHome | 0:2b1669e97586 | 23 | |
WiredHome | 1:47e5fbdb28f1 | 24 | int GetScreenCapture(void) |
WiredHome | 1:47e5fbdb28f1 | 25 | { |
WiredHome | 1:47e5fbdb28f1 | 26 | char fqfn[50]; |
WiredHome | 1:47e5fbdb28f1 | 27 | int i = 0; |
WiredHome | 1:47e5fbdb28f1 | 28 | |
WiredHome | 1:47e5fbdb28f1 | 29 | pc.printf("Screen Capture... "); |
WiredHome | 1:47e5fbdb28f1 | 30 | for (i=1; i< 100; i++) { |
WiredHome | 1:47e5fbdb28f1 | 31 | snprintf(fqfn, sizeof(fqfn), "/local/Screen%02d.bmp", i); |
WiredHome | 1:47e5fbdb28f1 | 32 | FILE * fh = fopen(fqfn, "rb"); |
WiredHome | 1:47e5fbdb28f1 | 33 | if (!fh) { |
WiredHome | 1:47e5fbdb28f1 | 34 | lcd.PrintScreen(0,0,480,272,fqfn); |
WiredHome | 1:47e5fbdb28f1 | 35 | pc.printf(" as /local/Screen%02d.bmp\r\n", i); |
WiredHome | 1:47e5fbdb28f1 | 36 | return i; |
WiredHome | 1:47e5fbdb28f1 | 37 | } else { |
WiredHome | 1:47e5fbdb28f1 | 38 | fclose(fh); // close this and try the next |
WiredHome | 1:47e5fbdb28f1 | 39 | } |
WiredHome | 1:47e5fbdb28f1 | 40 | } |
WiredHome | 1:47e5fbdb28f1 | 41 | return 0; |
WiredHome | 1:47e5fbdb28f1 | 42 | } |
WiredHome | 1:47e5fbdb28f1 | 43 | |
WiredHome | 0:2b1669e97586 | 44 | int main() |
WiredHome | 0:2b1669e97586 | 45 | { |
WiredHome | 0:2b1669e97586 | 46 | pc.baud(460800); // I like a snappy terminal, so crank it up! |
WiredHome | 0:2b1669e97586 | 47 | pc.printf("\r\nRA8875 Touch Colors - Build " __DATE__ " " __TIME__ "\r\n"); |
WiredHome | 0:2b1669e97586 | 48 | |
WiredHome | 0:2b1669e97586 | 49 | pc.printf("Turning on display\r\n"); |
WiredHome | 0:2b1669e97586 | 50 | lcd.init(); |
WiredHome | 0:2b1669e97586 | 51 | lcd.TouchPanelCalibrate("Calibrate the touch panel"); |
WiredHome | 0:2b1669e97586 | 52 | lcd.cls(); |
WiredHome | 0:2b1669e97586 | 53 | |
WiredHome | 0:2b1669e97586 | 54 | // +----------------------------------------------------+ |
WiredHome | 1:47e5fbdb28f1 | 55 | // | (x,y) (xxx,yyy) [Capture] rgb (RR,GG,BB) | |
WiredHome | 0:2b1669e97586 | 56 | // | +------------------------------------------------+ | y = 50 |
WiredHome | 0:2b1669e97586 | 57 | // | | Sample Shown Here | | |
WiredHome | 0:2b1669e97586 | 58 | // | +------------------------------------------------+ | y = 89 |
WiredHome | 0:2b1669e97586 | 59 | // | Red 0 to 255 ------------------------------------+ | y = 100 |
WiredHome | 0:2b1669e97586 | 60 | // | | | | |
WiredHome | 0:2b1669e97586 | 61 | // | +------------------------------------------------+ | y = 139 |
WiredHome | 0:2b1669e97586 | 62 | // | Grn 0 to 255 ------------------------------------+ | y = 150 |
WiredHome | 0:2b1669e97586 | 63 | // | | | | |
WiredHome | 0:2b1669e97586 | 64 | // | +------------------------------------------------+ | y = 189 |
WiredHome | 0:2b1669e97586 | 65 | // | Blu 0 to 255 ------------------------------------+ | y = 200 |
WiredHome | 0:2b1669e97586 | 66 | // | | | | |
WiredHome | 0:2b1669e97586 | 67 | // | +------------------------------------------------+ | y = 239 |
WiredHome | 0:2b1669e97586 | 68 | // +----------------------------------------------------+ y = 271 |
WiredHome | 0:2b1669e97586 | 69 | // 10 470 |
WiredHome | 0:2b1669e97586 | 70 | rect_t RGBList[] = { |
WiredHome | 0:2b1669e97586 | 71 | { 10,100, 470,139 }, // R |
WiredHome | 0:2b1669e97586 | 72 | { 10,150, 470,189 }, // G |
WiredHome | 0:2b1669e97586 | 73 | { 10,200, 470,239 }, // B |
WiredHome | 0:2b1669e97586 | 74 | { 10, 50, 470, 89 } // This for the Sample |
WiredHome | 0:2b1669e97586 | 75 | }; |
WiredHome | 1:47e5fbdb28f1 | 76 | rect_t PrintScreenRect = { 235-30, 5, 235+30, 40}; |
WiredHome | 0:2b1669e97586 | 77 | lcd.fillrect(RGBList[0], Red); |
WiredHome | 0:2b1669e97586 | 78 | lcd.fillrect(RGBList[1], Green); |
WiredHome | 0:2b1669e97586 | 79 | lcd.fillrect(RGBList[2], Blue); |
WiredHome | 1:47e5fbdb28f1 | 80 | lcd.fillrect(PrintScreenRect, Gray); |
WiredHome | 1:47e5fbdb28f1 | 81 | lcd.foreground(Blue); |
WiredHome | 1:47e5fbdb28f1 | 82 | lcd.background(Gray); |
WiredHome | 1:47e5fbdb28f1 | 83 | lcd.puts(235-28, 15, "Capture"); |
WiredHome | 1:47e5fbdb28f1 | 84 | lcd.background(Black); |
WiredHome | 0:2b1669e97586 | 85 | color_t rgb = Black; |
WiredHome | 0:2b1669e97586 | 86 | uint8_t rgbVal[3] = { 0, 0, 0 }; |
WiredHome | 0:2b1669e97586 | 87 | |
WiredHome | 0:2b1669e97586 | 88 | for (;;) { |
WiredHome | 0:2b1669e97586 | 89 | point_t p; |
WiredHome | 0:2b1669e97586 | 90 | |
WiredHome | 0:2b1669e97586 | 91 | if (lcd.TouchPanelReadable(&p)) { |
WiredHome | 0:2b1669e97586 | 92 | lcd.foreground(Blue); |
WiredHome | 0:2b1669e97586 | 93 | lcd.SetTextCursor(10, 15); |
WiredHome | 0:2b1669e97586 | 94 | lcd.printf("(%3d,%3d)", p.x, p.y); |
WiredHome | 0:2b1669e97586 | 95 | |
WiredHome | 1:47e5fbdb28f1 | 96 | if (Intersect(PrintScreenRect, p)) { |
WiredHome | 1:47e5fbdb28f1 | 97 | GetScreenCapture(); |
WiredHome | 1:47e5fbdb28f1 | 98 | } |
WiredHome | 0:2b1669e97586 | 99 | for (int i=0; i<3; i++) { |
WiredHome | 0:2b1669e97586 | 100 | if (Intersect(RGBList[i], p)) { |
WiredHome | 0:2b1669e97586 | 101 | uint8_t mag = (255 * (p.x - RGBList[i].p1.x)) / (RGBList[i].p2.x - RGBList[i].p1.x); |
WiredHome | 0:2b1669e97586 | 102 | rgbVal[i] = mag; |
WiredHome | 0:2b1669e97586 | 103 | lcd.SetTextCursor(380, 15); |
WiredHome | 0:2b1669e97586 | 104 | lcd.foreground(Blue); |
WiredHome | 0:2b1669e97586 | 105 | lcd.printf("(%02X,%02X,%02X)", rgbVal[0], rgbVal[1], rgbVal[2]); |
WiredHome | 0:2b1669e97586 | 106 | rgb = RGB(rgbVal[0], rgbVal[1], rgbVal[2]); |
WiredHome | 0:2b1669e97586 | 107 | lcd.fillrect(RGBList[3], rgb); |
WiredHome | 0:2b1669e97586 | 108 | break; |
WiredHome | 0:2b1669e97586 | 109 | } |
WiredHome | 0:2b1669e97586 | 110 | } |
WiredHome | 0:2b1669e97586 | 111 | } |
WiredHome | 0:2b1669e97586 | 112 | } |
WiredHome | 0:2b1669e97586 | 113 | } |