An example program using the RA8875 Display controller with the touch-screen option.

Dependencies:   RA8875

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?

UserRevisionLine numberNew 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 }