Example of аnalog clock for K64F with 4.3" display, FT800 or FT801
Example of аnalog clock for K64F with 4.3" display based FT800 or FT801
HARDWARE:
- Board FRDM-K64F
- Display TFT 4.3" 480 x 272 (RVT43ULFNWC03)
- Break Out Board 20
- Cable FFC, 0.5mm pitch, 20 pin, 150 mm
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
-----------------------------------
main.cpp@0:4d6ee7be56aa, 2020-12-10 (annotated)
- Committer:
- nz
- Date:
- Thu Dec 10 16:32:55 2020 +0000
- Revision:
- 0:4d6ee7be56aa
- Child:
- 1:eb2a62ab9e2f
Demo-Clock
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:4d6ee7be56aa | 23 | */ |
nz | 0:4d6ee7be56aa | 24 | |
nz | 0:4d6ee7be56aa | 25 | #include "mbed.h" |
nz | 0:4d6ee7be56aa | 26 | #include "FT800.h" |
nz | 0:4d6ee7be56aa | 27 | |
nz | 0:4d6ee7be56aa | 28 | /* |
nz | 0:4d6ee7be56aa | 29 | FT800 TFT(MOSI,MISO, SCK, CS, INT, PD); */ |
nz | 0:4d6ee7be56aa | 30 | FT800 TFT( D11, D12, D13, D10, D9, D8); // FRDM-K64F |
nz | 0:4d6ee7be56aa | 31 | |
nz | 0:4d6ee7be56aa | 32 | int16_t ox = 240, oy = 135; // center and size of clock |
nz | 0:4d6ee7be56aa | 33 | int16_t i, x, y; |
nz | 0:4d6ee7be56aa | 34 | uint16_t hurs, mins, secs; |
nz | 0:4d6ee7be56aa | 35 | float rads; |
nz | 0:4d6ee7be56aa | 36 | const float pi = 3.141592; |
nz | 0:4d6ee7be56aa | 37 | char textbuff[32]; |
nz | 0:4d6ee7be56aa | 38 | char timebuff[32]; |
nz | 0:4d6ee7be56aa | 39 | |
nz | 0:4d6ee7be56aa | 40 | int main() |
nz | 0:4d6ee7be56aa | 41 | { |
nz | 0:4d6ee7be56aa | 42 | //printf("Mbed OS %d.%d.%d.\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION); |
nz | 0:4d6ee7be56aa | 43 | |
nz | 0:4d6ee7be56aa | 44 | TFT.Init(); |
nz | 0:4d6ee7be56aa | 45 | |
nz | 0:4d6ee7be56aa | 46 | set_time(1577869200); // Set RTC time to 9:00:00, date to 01.01.2020 |
nz | 0:4d6ee7be56aa | 47 | |
nz | 0:4d6ee7be56aa | 48 | while(1) |
nz | 0:4d6ee7be56aa | 49 | { |
nz | 0:4d6ee7be56aa | 50 | time_t seconds = time(NULL); |
nz | 0:4d6ee7be56aa | 51 | |
nz | 0:4d6ee7be56aa | 52 | strftime(timebuff, 3,"%H", localtime(&seconds)); |
nz | 0:4d6ee7be56aa | 53 | hurs = atoi(timebuff); |
nz | 0:4d6ee7be56aa | 54 | strftime(timebuff, 3,"%M", localtime(&seconds)); |
nz | 0:4d6ee7be56aa | 55 | mins = atoi(timebuff); |
nz | 0:4d6ee7be56aa | 56 | strftime(timebuff, 3,"%S", localtime(&seconds)); |
nz | 0:4d6ee7be56aa | 57 | secs = atoi(timebuff); |
nz | 0:4d6ee7be56aa | 58 | |
nz | 0:4d6ee7be56aa | 59 | TFT.DLstart(WHITE,100); // Start Display List |
nz | 0:4d6ee7be56aa | 60 | |
nz | 0:4d6ee7be56aa | 61 | // Draw the Minute ticks, angle difference is 6 degree |
nz | 0:4d6ee7be56aa | 62 | for (i = 0; i < 60; i++) |
nz | 0:4d6ee7be56aa | 63 | { |
nz | 0:4d6ee7be56aa | 64 | rads = (pi * i*6) / 180; // radians |
nz | 0:4d6ee7be56aa | 65 | x = (int16_t)(ox + (129 * cos(rads))); |
nz | 0:4d6ee7be56aa | 66 | y = (int16_t)(oy + (129 * sin(rads))); |
nz | 0:4d6ee7be56aa | 67 | TFT.drawLine(ox, oy, x, y, BLACK, 1); |
nz | 0:4d6ee7be56aa | 68 | } |
nz | 0:4d6ee7be56aa | 69 | TFT.drawPoint(ox, oy, WHITE, 124); |
nz | 0:4d6ee7be56aa | 70 | |
nz | 0:4d6ee7be56aa | 71 | // Draw the 5 min ticks, 5*6=30 degree |
nz | 0:4d6ee7be56aa | 72 | for (i = 0; i < 12; i++) |
nz | 0:4d6ee7be56aa | 73 | { |
nz | 0:4d6ee7be56aa | 74 | rads = (pi * i*30) / 180; // radians |
nz | 0:4d6ee7be56aa | 75 | x = (int16_t)(ox + (131 * cos(rads))); |
nz | 0:4d6ee7be56aa | 76 | y = (int16_t)(oy + (131 * sin(rads))); |
nz | 0:4d6ee7be56aa | 77 | TFT.drawLine(ox, oy, x, y, BLACK, 2); |
nz | 0:4d6ee7be56aa | 78 | } |
nz | 0:4d6ee7be56aa | 79 | TFT.drawPoint(ox, oy, WHITE, 121); |
nz | 0:4d6ee7be56aa | 80 | |
nz | 0:4d6ee7be56aa | 81 | TFT.drawNumber(ox + 103, oy, 31, BLACK, OPT_CENTER, 3); |
nz | 0:4d6ee7be56aa | 82 | TFT.drawNumber(ox - 103, oy, 31, BLACK, OPT_CENTER, 9); |
nz | 0:4d6ee7be56aa | 83 | TFT.drawNumber(ox, oy + 100, 31, BLACK, OPT_CENTER, 6); |
nz | 0:4d6ee7be56aa | 84 | TFT.drawNumber(ox, oy - 100, 31, BLACK, OPT_CENTER, 12); |
nz | 0:4d6ee7be56aa | 85 | |
nz | 0:4d6ee7be56aa | 86 | // Draw hour hand // часовая стрелка |
nz | 0:4d6ee7be56aa | 87 | rads = (pi * (hurs*(-30) - mins*0.5)) / 180; |
nz | 0:4d6ee7be56aa | 88 | x = (int16_t)(ox + (84 * sin(rads) * (-1))); |
nz | 0:4d6ee7be56aa | 89 | y = (int16_t)(oy + (84 * cos(rads) * (-1))); |
nz | 0:4d6ee7be56aa | 90 | TFT.drawLine(ox, oy, x, y, BLACK, 3); |
nz | 0:4d6ee7be56aa | 91 | x = (int16_t)(ox + (20 * sin(rads))); |
nz | 0:4d6ee7be56aa | 92 | y = (int16_t)(oy + (20 * cos(rads))); |
nz | 0:4d6ee7be56aa | 93 | TFT.drawLine(ox, oy, x, y, BLACK, 3); |
nz | 0:4d6ee7be56aa | 94 | |
nz | 0:4d6ee7be56aa | 95 | // Draw minute hand // минутная стрелка |
nz | 0:4d6ee7be56aa | 96 | rads = (pi * mins*(-6)) / 180; |
nz | 0:4d6ee7be56aa | 97 | x = (int16_t)(ox + (114 * sin(rads) * (-1))); |
nz | 0:4d6ee7be56aa | 98 | y = (int16_t)(oy + (115 * cos(rads) * (-1))); |
nz | 0:4d6ee7be56aa | 99 | TFT.drawLine(ox, oy, x, y, BLACK, 3); |
nz | 0:4d6ee7be56aa | 100 | x = (int16_t)(ox + (20 * sin(rads))); |
nz | 0:4d6ee7be56aa | 101 | y = (int16_t)(oy + (20 * cos(rads))); |
nz | 0:4d6ee7be56aa | 102 | TFT.drawLine(ox, oy, x, y, BLACK, 3); |
nz | 0:4d6ee7be56aa | 103 | |
nz | 0:4d6ee7be56aa | 104 | // Draw second hand // секундная стрелка |
nz | 0:4d6ee7be56aa | 105 | rads = (pi * secs*(-6)) / 180; |
nz | 0:4d6ee7be56aa | 106 | x = (int16_t)(ox + (110 * sin(rads) * (-1))); |
nz | 0:4d6ee7be56aa | 107 | y = (int16_t)(oy + (110 * cos(rads) * (-1))); |
nz | 0:4d6ee7be56aa | 108 | TFT.drawLine(ox, oy, x, y, RED, 1); |
nz | 0:4d6ee7be56aa | 109 | x = (int16_t)(ox + (20 * sin(rads))); |
nz | 0:4d6ee7be56aa | 110 | y = (int16_t)(oy + (20 * cos(rads))); |
nz | 0:4d6ee7be56aa | 111 | TFT.drawLine(ox, oy, x, y, RED, 1); |
nz | 0:4d6ee7be56aa | 112 | TFT.drawPoint(ox, oy, BLACK, 6); |
nz | 0:4d6ee7be56aa | 113 | TFT.drawPoint(ox, oy, WHITE, 4); |
nz | 0:4d6ee7be56aa | 114 | |
nz | 0:4d6ee7be56aa | 115 | // Draw Time & Date // Время и дата |
nz | 0:4d6ee7be56aa | 116 | strftime(timebuff, 32, "%X", localtime(&seconds)); // Time |
nz | 0:4d6ee7be56aa | 117 | TFT.drawText(240,170, 29, DARKBLUE, OPT_CENTERX, timebuff); |
nz | 0:4d6ee7be56aa | 118 | |
nz | 0:4d6ee7be56aa | 119 | strftime(timebuff, 32, "%A", localtime(&seconds)); // Weekday |
nz | 0:4d6ee7be56aa | 120 | TFT.drawText(420,25, 27, BLACK, OPT_CENTERX, timebuff); |
nz | 0:4d6ee7be56aa | 121 | |
nz | 0:4d6ee7be56aa | 122 | strftime(timebuff, 32, "%d.%m.%Y", localtime(&seconds));// Date |
nz | 0:4d6ee7be56aa | 123 | TFT.drawText(420,50, 27, BLACK, OPT_CENTERX, timebuff); |
nz | 0:4d6ee7be56aa | 124 | |
nz | 0:4d6ee7be56aa | 125 | sprintf(textbuff, "Mbed OS %d.%d.%d.", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION); |
nz | 0:4d6ee7be56aa | 126 | TFT.drawText(10, 25, 27, BLACK, OPT_FLAT, textbuff); // Mbed Version |
nz | 0:4d6ee7be56aa | 127 | |
nz | 0:4d6ee7be56aa | 128 | TFT.DLend(); |
nz | 0:4d6ee7be56aa | 129 | |
nz | 0:4d6ee7be56aa | 130 | thread_sleep_for(1000); // 1000 ms |
nz | 0:4d6ee7be56aa | 131 | } |
nz | 0:4d6ee7be56aa | 132 | } |