Example of аnalog clock for K64F with 4.3" display, FT800 or FT801

Dependencies:   FT800-480x272

Example of аnalog clock for K64F with 4.3" display based FT800 or FT801

HARDWARE:

WIRING: FRDM-K64F Break Out Board ----------------------------------- +3.3V --- Pin 1 VDD, Pin 17 BLVDD GND --- Pin 2 GND D13 (PTD1) SCLK --- Pin 3 SPI SCLK D12 (PTD3) MISO --- Pin 4 MISO D11 (PTD2) MOSI --- PIN 5 MOSI D10 (PTD0) --- Pin 6 CS D9 (PTC4) --- Pin 7 INT D8 (PTC12) --- Pin 8 PD -----------------------------------

https://os.mbed.com/media/uploads/nz/demo-clock.jpg

Committer:
nz
Date:
Fri Dec 11 13:54:24 2020 +0000
Revision:
2:61827b316d78
Parent:
1:eb2a62ab9e2f
sprintf to top

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nz 0:4d6ee7be56aa 1 /*
nz 0:4d6ee7be56aa 2 * Author: Nikolai Zimfer, 2020
nz 0:4d6ee7be56aa 3 *
nz 0:4d6ee7be56aa 4 * HARDWARE:
nz 0:4d6ee7be56aa 5 * Board FRDM-K64F - https://os.mbed.com/platforms/FRDM-K64F/
nz 0:4d6ee7be56aa 6 * Display 4.3" 480 x 272 (RVT43ULFNWC03) - https://riverdi.com/product/rvt43ulfnwc0x/
nz 0:4d6ee7be56aa 7 * Break Out Board 20 - https://riverdi.com/product/break-out-board-20/
nz 0:4d6ee7be56aa 8 * Cable FFC, 0.5mm pitch, 20 pin, 150 mm - https://riverdi.com/product/ffc0520150/
nz 0:4d6ee7be56aa 9 *
nz 0:4d6ee7be56aa 10 * WIRING:
nz 0:4d6ee7be56aa 11 * -----------------------------------
nz 0:4d6ee7be56aa 12 * FRDM-K64F Break Out Board
nz 0:4d6ee7be56aa 13 * -----------------------------------
nz 0:4d6ee7be56aa 14 * +3.3V --- Pin 1 VDD, Pin 17 BLVDD
nz 0:4d6ee7be56aa 15 * GND --- Pin 2 GND
nz 0:4d6ee7be56aa 16 * D13 (PTD1) SCLK --- Pin 3 SPI SCLK
nz 0:4d6ee7be56aa 17 * D12 (PTD3) MISO --- Pin 4 MISO
nz 0:4d6ee7be56aa 18 * D11 (PTD2) MOSI --- PIN 5 MOSI
nz 0:4d6ee7be56aa 19 * D10 (PTD0) --- Pin 6 CS
nz 0:4d6ee7be56aa 20 * D9 (PTC4) --- Pin 7 INT
nz 0:4d6ee7be56aa 21 * D8 (PTC12) --- Pin 8 PD
nz 0:4d6ee7be56aa 22 * -----------------------------------
nz 1:eb2a62ab9e2f 23 *
nz 1:eb2a62ab9e2f 24 * IMAGE:
nz 1:eb2a62ab9e2f 25 * https://os.mbed.com/media/uploads/nz/demo-clock.jpg
nz 0:4d6ee7be56aa 26 */
nz 0:4d6ee7be56aa 27
nz 0:4d6ee7be56aa 28 #include "mbed.h"
nz 0:4d6ee7be56aa 29 #include "FT800.h"
nz 0:4d6ee7be56aa 30
nz 0:4d6ee7be56aa 31 /*
nz 0:4d6ee7be56aa 32 FT800 TFT(MOSI,MISO, SCK, CS, INT, PD); */
nz 0:4d6ee7be56aa 33 FT800 TFT( D11, D12, D13, D10, D9, D8); // FRDM-K64F
nz 0:4d6ee7be56aa 34
nz 0:4d6ee7be56aa 35 int16_t ox = 240, oy = 135; // center and size of clock
nz 0:4d6ee7be56aa 36 int16_t i, x, y;
nz 0:4d6ee7be56aa 37 uint16_t hurs, mins, secs;
nz 0:4d6ee7be56aa 38 float rads;
nz 0:4d6ee7be56aa 39 const float pi = 3.141592;
nz 0:4d6ee7be56aa 40 char textbuff[32];
nz 0:4d6ee7be56aa 41 char timebuff[32];
nz 0:4d6ee7be56aa 42
nz 0:4d6ee7be56aa 43 int main()
nz 0:4d6ee7be56aa 44 {
nz 0:4d6ee7be56aa 45 //printf("Mbed OS %d.%d.%d.\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
nz 2:61827b316d78 46 sprintf(textbuff, "Mbed OS %d.%d.%d.", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
nz 2:61827b316d78 47
nz 0:4d6ee7be56aa 48 TFT.Init();
nz 0:4d6ee7be56aa 49
nz 0:4d6ee7be56aa 50 set_time(1577869200); // Set RTC time to 9:00:00, date to 01.01.2020
nz 0:4d6ee7be56aa 51
nz 0:4d6ee7be56aa 52 while(1)
nz 0:4d6ee7be56aa 53 {
nz 0:4d6ee7be56aa 54 time_t seconds = time(NULL);
nz 0:4d6ee7be56aa 55
nz 0:4d6ee7be56aa 56 strftime(timebuff, 3,"%H", localtime(&seconds));
nz 0:4d6ee7be56aa 57 hurs = atoi(timebuff);
nz 0:4d6ee7be56aa 58 strftime(timebuff, 3,"%M", localtime(&seconds));
nz 0:4d6ee7be56aa 59 mins = atoi(timebuff);
nz 0:4d6ee7be56aa 60 strftime(timebuff, 3,"%S", localtime(&seconds));
nz 0:4d6ee7be56aa 61 secs = atoi(timebuff);
nz 0:4d6ee7be56aa 62
nz 0:4d6ee7be56aa 63 TFT.DLstart(WHITE,100); // Start Display List
nz 0:4d6ee7be56aa 64
nz 0:4d6ee7be56aa 65 // Draw the Minute ticks, angle difference is 6 degree
nz 0:4d6ee7be56aa 66 for (i = 0; i < 60; i++)
nz 0:4d6ee7be56aa 67 {
nz 0:4d6ee7be56aa 68 rads = (pi * i*6) / 180; // radians
nz 0:4d6ee7be56aa 69 x = (int16_t)(ox + (129 * cos(rads)));
nz 0:4d6ee7be56aa 70 y = (int16_t)(oy + (129 * sin(rads)));
nz 0:4d6ee7be56aa 71 TFT.drawLine(ox, oy, x, y, BLACK, 1);
nz 0:4d6ee7be56aa 72 }
nz 0:4d6ee7be56aa 73 TFT.drawPoint(ox, oy, WHITE, 124);
nz 0:4d6ee7be56aa 74
nz 0:4d6ee7be56aa 75 // Draw the 5 min ticks, 5*6=30 degree
nz 0:4d6ee7be56aa 76 for (i = 0; i < 12; i++)
nz 0:4d6ee7be56aa 77 {
nz 0:4d6ee7be56aa 78 rads = (pi * i*30) / 180; // radians
nz 0:4d6ee7be56aa 79 x = (int16_t)(ox + (131 * cos(rads)));
nz 0:4d6ee7be56aa 80 y = (int16_t)(oy + (131 * sin(rads)));
nz 0:4d6ee7be56aa 81 TFT.drawLine(ox, oy, x, y, BLACK, 2);
nz 0:4d6ee7be56aa 82 }
nz 0:4d6ee7be56aa 83 TFT.drawPoint(ox, oy, WHITE, 121);
nz 0:4d6ee7be56aa 84
nz 0:4d6ee7be56aa 85 TFT.drawNumber(ox + 103, oy, 31, BLACK, OPT_CENTER, 3);
nz 0:4d6ee7be56aa 86 TFT.drawNumber(ox - 103, oy, 31, BLACK, OPT_CENTER, 9);
nz 0:4d6ee7be56aa 87 TFT.drawNumber(ox, oy + 100, 31, BLACK, OPT_CENTER, 6);
nz 0:4d6ee7be56aa 88 TFT.drawNumber(ox, oy - 100, 31, BLACK, OPT_CENTER, 12);
nz 0:4d6ee7be56aa 89
nz 0:4d6ee7be56aa 90 // Draw hour hand // часовая стрелка
nz 0:4d6ee7be56aa 91 rads = (pi * (hurs*(-30) - mins*0.5)) / 180;
nz 0:4d6ee7be56aa 92 x = (int16_t)(ox + (84 * sin(rads) * (-1)));
nz 0:4d6ee7be56aa 93 y = (int16_t)(oy + (84 * cos(rads) * (-1)));
nz 0:4d6ee7be56aa 94 TFT.drawLine(ox, oy, x, y, BLACK, 3);
nz 0:4d6ee7be56aa 95 x = (int16_t)(ox + (20 * sin(rads)));
nz 0:4d6ee7be56aa 96 y = (int16_t)(oy + (20 * cos(rads)));
nz 0:4d6ee7be56aa 97 TFT.drawLine(ox, oy, x, y, BLACK, 3);
nz 0:4d6ee7be56aa 98
nz 0:4d6ee7be56aa 99 // Draw minute hand // минутная стрелка
nz 0:4d6ee7be56aa 100 rads = (pi * mins*(-6)) / 180;
nz 0:4d6ee7be56aa 101 x = (int16_t)(ox + (114 * sin(rads) * (-1)));
nz 0:4d6ee7be56aa 102 y = (int16_t)(oy + (115 * cos(rads) * (-1)));
nz 0:4d6ee7be56aa 103 TFT.drawLine(ox, oy, x, y, BLACK, 3);
nz 0:4d6ee7be56aa 104 x = (int16_t)(ox + (20 * sin(rads)));
nz 0:4d6ee7be56aa 105 y = (int16_t)(oy + (20 * cos(rads)));
nz 0:4d6ee7be56aa 106 TFT.drawLine(ox, oy, x, y, BLACK, 3);
nz 0:4d6ee7be56aa 107
nz 0:4d6ee7be56aa 108 // Draw second hand // секундная стрелка
nz 0:4d6ee7be56aa 109 rads = (pi * secs*(-6)) / 180;
nz 0:4d6ee7be56aa 110 x = (int16_t)(ox + (110 * sin(rads) * (-1)));
nz 0:4d6ee7be56aa 111 y = (int16_t)(oy + (110 * cos(rads) * (-1)));
nz 0:4d6ee7be56aa 112 TFT.drawLine(ox, oy, x, y, RED, 1);
nz 0:4d6ee7be56aa 113 x = (int16_t)(ox + (20 * sin(rads)));
nz 0:4d6ee7be56aa 114 y = (int16_t)(oy + (20 * cos(rads)));
nz 0:4d6ee7be56aa 115 TFT.drawLine(ox, oy, x, y, RED, 1);
nz 0:4d6ee7be56aa 116 TFT.drawPoint(ox, oy, BLACK, 6);
nz 0:4d6ee7be56aa 117 TFT.drawPoint(ox, oy, WHITE, 4);
nz 0:4d6ee7be56aa 118
nz 0:4d6ee7be56aa 119 // Draw Time & Date // Время и дата
nz 0:4d6ee7be56aa 120 strftime(timebuff, 32, "%X", localtime(&seconds)); // Time
nz 0:4d6ee7be56aa 121 TFT.drawText(240,170, 29, DARKBLUE, OPT_CENTERX, timebuff);
nz 0:4d6ee7be56aa 122
nz 0:4d6ee7be56aa 123 strftime(timebuff, 32, "%A", localtime(&seconds)); // Weekday
nz 0:4d6ee7be56aa 124 TFT.drawText(420,25, 27, BLACK, OPT_CENTERX, timebuff);
nz 0:4d6ee7be56aa 125
nz 0:4d6ee7be56aa 126 strftime(timebuff, 32, "%d.%m.%Y", localtime(&seconds));// Date
nz 0:4d6ee7be56aa 127 TFT.drawText(420,50, 27, BLACK, OPT_CENTERX, timebuff);
nz 0:4d6ee7be56aa 128
nz 0:4d6ee7be56aa 129 TFT.drawText(10, 25, 27, BLACK, OPT_FLAT, textbuff); // Mbed Version
nz 0:4d6ee7be56aa 130
nz 0:4d6ee7be56aa 131 TFT.DLend();
nz 0:4d6ee7be56aa 132
nz 0:4d6ee7be56aa 133 thread_sleep_for(1000); // 1000 ms
nz 0:4d6ee7be56aa 134 }
nz 0:4d6ee7be56aa 135 }