David Smart
/
PUB_RA8875_TouchColors
An example program using the RA8875 Display controller with the touch-screen option.
main.cpp@0:2b1669e97586, 2014-12-28 (annotated)
- Committer:
- WiredHome
- Date:
- Sun Dec 28 22:02:36 2014 +0000
- Revision:
- 0:2b1669e97586
- Child:
- 1:47e5fbdb28f1
minor changes to present as an example.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
WiredHome | 0:2b1669e97586 | 1 | |
WiredHome | 0:2b1669e97586 | 2 | #include "mbed.h" // tested with v92 |
WiredHome | 0:2b1669e97586 | 3 | #include "RA8875.h" // tested with v80 |
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 | 0:2b1669e97586 | 24 | int main() |
WiredHome | 0:2b1669e97586 | 25 | { |
WiredHome | 0:2b1669e97586 | 26 | pc.baud(460800); // I like a snappy terminal, so crank it up! |
WiredHome | 0:2b1669e97586 | 27 | pc.printf("\r\nRA8875 Touch Colors - Build " __DATE__ " " __TIME__ "\r\n"); |
WiredHome | 0:2b1669e97586 | 28 | |
WiredHome | 0:2b1669e97586 | 29 | pc.printf("Turning on display\r\n"); |
WiredHome | 0:2b1669e97586 | 30 | lcd.init(); |
WiredHome | 0:2b1669e97586 | 31 | lcd.TouchPanelCalibrate("Calibrate the touch panel"); |
WiredHome | 0:2b1669e97586 | 32 | lcd.cls(); |
WiredHome | 0:2b1669e97586 | 33 | |
WiredHome | 0:2b1669e97586 | 34 | // +----------------------------------------------------+ |
WiredHome | 0:2b1669e97586 | 35 | // | (x,y) (xxx,yyy) rgb (RR,GG,BB) | |
WiredHome | 0:2b1669e97586 | 36 | // | +------------------------------------------------+ | y = 50 |
WiredHome | 0:2b1669e97586 | 37 | // | | Sample Shown Here | | |
WiredHome | 0:2b1669e97586 | 38 | // | +------------------------------------------------+ | y = 89 |
WiredHome | 0:2b1669e97586 | 39 | // | Red 0 to 255 ------------------------------------+ | y = 100 |
WiredHome | 0:2b1669e97586 | 40 | // | | | | |
WiredHome | 0:2b1669e97586 | 41 | // | +------------------------------------------------+ | y = 139 |
WiredHome | 0:2b1669e97586 | 42 | // | Grn 0 to 255 ------------------------------------+ | y = 150 |
WiredHome | 0:2b1669e97586 | 43 | // | | | | |
WiredHome | 0:2b1669e97586 | 44 | // | +------------------------------------------------+ | y = 189 |
WiredHome | 0:2b1669e97586 | 45 | // | Blu 0 to 255 ------------------------------------+ | y = 200 |
WiredHome | 0:2b1669e97586 | 46 | // | | | | |
WiredHome | 0:2b1669e97586 | 47 | // | +------------------------------------------------+ | y = 239 |
WiredHome | 0:2b1669e97586 | 48 | // +----------------------------------------------------+ y = 271 |
WiredHome | 0:2b1669e97586 | 49 | // 10 470 |
WiredHome | 0:2b1669e97586 | 50 | rect_t RGBList[] = { |
WiredHome | 0:2b1669e97586 | 51 | { 10,100, 470,139 }, // R |
WiredHome | 0:2b1669e97586 | 52 | { 10,150, 470,189 }, // G |
WiredHome | 0:2b1669e97586 | 53 | { 10,200, 470,239 }, // B |
WiredHome | 0:2b1669e97586 | 54 | { 10, 50, 470, 89 } // This for the Sample |
WiredHome | 0:2b1669e97586 | 55 | }; |
WiredHome | 0:2b1669e97586 | 56 | lcd.fillrect(RGBList[0], Red); |
WiredHome | 0:2b1669e97586 | 57 | lcd.fillrect(RGBList[1], Green); |
WiredHome | 0:2b1669e97586 | 58 | lcd.fillrect(RGBList[2], Blue); |
WiredHome | 0:2b1669e97586 | 59 | color_t rgb = Black; |
WiredHome | 0:2b1669e97586 | 60 | uint8_t rgbVal[3] = { 0, 0, 0 }; |
WiredHome | 0:2b1669e97586 | 61 | |
WiredHome | 0:2b1669e97586 | 62 | for (;;) { |
WiredHome | 0:2b1669e97586 | 63 | point_t p; |
WiredHome | 0:2b1669e97586 | 64 | |
WiredHome | 0:2b1669e97586 | 65 | if (lcd.TouchPanelReadable(&p)) { |
WiredHome | 0:2b1669e97586 | 66 | lcd.foreground(Blue); |
WiredHome | 0:2b1669e97586 | 67 | lcd.SetTextCursor(10, 15); |
WiredHome | 0:2b1669e97586 | 68 | lcd.printf("(%3d,%3d)", p.x, p.y); |
WiredHome | 0:2b1669e97586 | 69 | |
WiredHome | 0:2b1669e97586 | 70 | for (int i=0; i<3; i++) { |
WiredHome | 0:2b1669e97586 | 71 | if (Intersect(RGBList[i], p)) { |
WiredHome | 0:2b1669e97586 | 72 | uint8_t mag = (255 * (p.x - RGBList[i].p1.x)) / (RGBList[i].p2.x - RGBList[i].p1.x); |
WiredHome | 0:2b1669e97586 | 73 | rgbVal[i] = mag; |
WiredHome | 0:2b1669e97586 | 74 | lcd.SetTextCursor(380, 15); |
WiredHome | 0:2b1669e97586 | 75 | lcd.foreground(Blue); |
WiredHome | 0:2b1669e97586 | 76 | lcd.printf("(%02X,%02X,%02X)", rgbVal[0], rgbVal[1], rgbVal[2]); |
WiredHome | 0:2b1669e97586 | 77 | rgb = RGB(rgbVal[0], rgbVal[1], rgbVal[2]); |
WiredHome | 0:2b1669e97586 | 78 | lcd.fillrect(RGBList[3], rgb); |
WiredHome | 0:2b1669e97586 | 79 | break; |
WiredHome | 0:2b1669e97586 | 80 | } |
WiredHome | 0:2b1669e97586 | 81 | } |
WiredHome | 0:2b1669e97586 | 82 | } |
WiredHome | 0:2b1669e97586 | 83 | } |
WiredHome | 0:2b1669e97586 | 84 | } |