Simple integer calculator using FRDM-KL25Z and Adafruit 2.8" TFT with touch \\ "Dentaku" means "Desktop Calculator" in Japanese \\ On 5-Dec-2015, Support for FRDM-K64F, FRDM-K22F, NUCLEO-F411RE added.
Dependencies: SPI_STMPE610 UniGraphic mbed vt100
Yet another simple desktop calculator program, only for integer.
As usual I used FRDM-KL25Z, Adafruit 2.8" TFT with touch and UniGraphic library.
Now works with FRDM-K64F, FRDM-K22F, and NUCLEO-F411RE.
整数計算のみの簡単な電卓プログラムです。
例によって、FRDM-KL25Z, Adafruit 2.8" TFT with touch, そして UniGraphic を使用しています。
FRDM-K64F, FRDM-K22F, NUCLEO-F411RE でも動くようになりました。
TFTMenu.cpp@0:659a74b77279, 2015-08-02 (annotated)
- Committer:
- Rhyme
- Date:
- Sun Aug 02 14:00:59 2015 +0000
- Revision:
- 0:659a74b77279
commit before publish;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Rhyme | 0:659a74b77279 | 1 | /** mbed oscilloscope my implementation of a oscillo scope |
Rhyme | 0:659a74b77279 | 2 | * Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab |
Rhyme | 0:659a74b77279 | 3 | * |
Rhyme | 0:659a74b77279 | 4 | * TFTMenu.cpp |
Rhyme | 0:659a74b77279 | 5 | * |
Rhyme | 0:659a74b77279 | 6 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
Rhyme | 0:659a74b77279 | 7 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
Rhyme | 0:659a74b77279 | 8 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
Rhyme | 0:659a74b77279 | 9 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
Rhyme | 0:659a74b77279 | 10 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
Rhyme | 0:659a74b77279 | 11 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
Rhyme | 0:659a74b77279 | 12 | * THE SOFTWARE. |
Rhyme | 0:659a74b77279 | 13 | */ |
Rhyme | 0:659a74b77279 | 14 | #include "mbed.h" |
Rhyme | 0:659a74b77279 | 15 | #include <ILI9341.h> |
Rhyme | 0:659a74b77279 | 16 | #include "SPI_STMPE610.h" |
Rhyme | 0:659a74b77279 | 17 | #include "Arial12x12.h" |
Rhyme | 0:659a74b77279 | 18 | //#include "Arial24x23.h" |
Rhyme | 0:659a74b77279 | 19 | #include "Arial28x28.h" |
Rhyme | 0:659a74b77279 | 20 | //#include "Arial43x48_numb.h" |
Rhyme | 0:659a74b77279 | 21 | #include "vt100.h" |
Rhyme | 0:659a74b77279 | 22 | #include <string.h> |
Rhyme | 0:659a74b77279 | 23 | |
Rhyme | 0:659a74b77279 | 24 | #include "TFTMenu.h" |
Rhyme | 0:659a74b77279 | 25 | |
Rhyme | 0:659a74b77279 | 26 | extern ILI9341 TFT ; |
Rhyme | 0:659a74b77279 | 27 | extern SPI_STMPE610 TSC ; |
Rhyme | 0:659a74b77279 | 28 | extern vt100 *tty ; |
Rhyme | 0:659a74b77279 | 29 | |
Rhyme | 0:659a74b77279 | 30 | |
Rhyme | 0:659a74b77279 | 31 | TFTMenuItem::TFTMenuItem(int x1, int y1, int x2, int y2, FuncPtr fnc, |
Rhyme | 0:659a74b77279 | 32 | char *name, uint16_t mcolor, uint16_t fcolor, int l_margin, int t_margin ) |
Rhyme | 0:659a74b77279 | 33 | { |
Rhyme | 0:659a74b77279 | 34 | left = x1 ; |
Rhyme | 0:659a74b77279 | 35 | right = x2 ; |
Rhyme | 0:659a74b77279 | 36 | top = y1 ; |
Rhyme | 0:659a74b77279 | 37 | bottom = y2 ; |
Rhyme | 0:659a74b77279 | 38 | if (name) { |
Rhyme | 0:659a74b77279 | 39 | label = new char[strlen(name)+1] ; |
Rhyme | 0:659a74b77279 | 40 | strcpy(label, name) ; |
Rhyme | 0:659a74b77279 | 41 | font_color = fcolor ; |
Rhyme | 0:659a74b77279 | 42 | } |
Rhyme | 0:659a74b77279 | 43 | menu_color = mcolor ; |
Rhyme | 0:659a74b77279 | 44 | |
Rhyme | 0:659a74b77279 | 45 | left_margin = l_margin ; // 7 ; |
Rhyme | 0:659a74b77279 | 46 | top_margin = t_margin ; // 10 ; |
Rhyme | 0:659a74b77279 | 47 | func = fnc ; |
Rhyme | 0:659a74b77279 | 48 | } |
Rhyme | 0:659a74b77279 | 49 | |
Rhyme | 0:659a74b77279 | 50 | TFTMenuItem::~TFTMenuItem() |
Rhyme | 0:659a74b77279 | 51 | { |
Rhyme | 0:659a74b77279 | 52 | left = 0 ; |
Rhyme | 0:659a74b77279 | 53 | right = 0 ; |
Rhyme | 0:659a74b77279 | 54 | top = 0 ; |
Rhyme | 0:659a74b77279 | 55 | bottom = 0 ; |
Rhyme | 0:659a74b77279 | 56 | if (label) { |
Rhyme | 0:659a74b77279 | 57 | free(label) ; |
Rhyme | 0:659a74b77279 | 58 | } |
Rhyme | 0:659a74b77279 | 59 | } |
Rhyme | 0:659a74b77279 | 60 | |
Rhyme | 0:659a74b77279 | 61 | TFTRadioButton::TFTRadioButton(int x1, int y1, int x2, int y2, FuncPtr fnc, |
Rhyme | 0:659a74b77279 | 62 | char *name, uint16_t mcolor, uint16_t fcolor, |
Rhyme | 0:659a74b77279 | 63 | char *altname, uint16_t altmcolor, uint16_t altfcolor, |
Rhyme | 0:659a74b77279 | 64 | bool sel) : TFTMenuItem(x1,y1,x2,y2,fnc,name,mcolor,fcolor) |
Rhyme | 0:659a74b77279 | 65 | { |
Rhyme | 0:659a74b77279 | 66 | if (altname) { |
Rhyme | 0:659a74b77279 | 67 | alt_label = new char[strlen(altname) + 1] ; |
Rhyme | 0:659a74b77279 | 68 | strcpy(alt_label, altname) ; |
Rhyme | 0:659a74b77279 | 69 | } else { |
Rhyme | 0:659a74b77279 | 70 | alt_label = 0 ; |
Rhyme | 0:659a74b77279 | 71 | } |
Rhyme | 0:659a74b77279 | 72 | alt_font_color = altfcolor ; |
Rhyme | 0:659a74b77279 | 73 | alt_menu_color = altmcolor ; |
Rhyme | 0:659a74b77279 | 74 | selected = sel ; |
Rhyme | 0:659a74b77279 | 75 | } |
Rhyme | 0:659a74b77279 | 76 | |
Rhyme | 0:659a74b77279 | 77 | TFTRadioButton::~TFTRadioButton() |
Rhyme | 0:659a74b77279 | 78 | { |
Rhyme | 0:659a74b77279 | 79 | left = 0 ; |
Rhyme | 0:659a74b77279 | 80 | right = 0 ; |
Rhyme | 0:659a74b77279 | 81 | top = 0 ; |
Rhyme | 0:659a74b77279 | 82 | bottom = 0 ; |
Rhyme | 0:659a74b77279 | 83 | if (label) { |
Rhyme | 0:659a74b77279 | 84 | delete label ; |
Rhyme | 0:659a74b77279 | 85 | } |
Rhyme | 0:659a74b77279 | 86 | if (alt_label) { |
Rhyme | 0:659a74b77279 | 87 | delete alt_label ; |
Rhyme | 0:659a74b77279 | 88 | } |
Rhyme | 0:659a74b77279 | 89 | } |
Rhyme | 0:659a74b77279 | 90 | |
Rhyme | 0:659a74b77279 | 91 | bool TFTRadioButton::hit(int x, int y) |
Rhyme | 0:659a74b77279 | 92 | { |
Rhyme | 0:659a74b77279 | 93 | bool result = false ; |
Rhyme | 0:659a74b77279 | 94 | if ((left <= x)&&(x <= right)&&(top <= y)&&(y <= bottom)) { |
Rhyme | 0:659a74b77279 | 95 | result = true ; |
Rhyme | 0:659a74b77279 | 96 | if (selected) { |
Rhyme | 0:659a74b77279 | 97 | selected = false ; |
Rhyme | 0:659a74b77279 | 98 | } else { |
Rhyme | 0:659a74b77279 | 99 | selected = true ; |
Rhyme | 0:659a74b77279 | 100 | } |
Rhyme | 0:659a74b77279 | 101 | draw() ; |
Rhyme | 0:659a74b77279 | 102 | } |
Rhyme | 0:659a74b77279 | 103 | return( result ) ; |
Rhyme | 0:659a74b77279 | 104 | } |
Rhyme | 0:659a74b77279 | 105 | |
Rhyme | 0:659a74b77279 | 106 | void TFTRadioButton::select(bool value) |
Rhyme | 0:659a74b77279 | 107 | { |
Rhyme | 0:659a74b77279 | 108 | selected = value ; |
Rhyme | 0:659a74b77279 | 109 | } |
Rhyme | 0:659a74b77279 | 110 | |
Rhyme | 0:659a74b77279 | 111 | uint16_t TFTMenuItem::getColor(void) |
Rhyme | 0:659a74b77279 | 112 | { |
Rhyme | 0:659a74b77279 | 113 | return(menu_color) ; |
Rhyme | 0:659a74b77279 | 114 | } |
Rhyme | 0:659a74b77279 | 115 | |
Rhyme | 0:659a74b77279 | 116 | bool TFTMenuItem::hit(int x, int y) |
Rhyme | 0:659a74b77279 | 117 | { |
Rhyme | 0:659a74b77279 | 118 | bool result = false ; |
Rhyme | 0:659a74b77279 | 119 | if ((left <= x)&&(x <= right)&&(top <= y)&&(y <= bottom)) { |
Rhyme | 0:659a74b77279 | 120 | result = true ; |
Rhyme | 0:659a74b77279 | 121 | draw() ; |
Rhyme | 0:659a74b77279 | 122 | } |
Rhyme | 0:659a74b77279 | 123 | // draw() ; |
Rhyme | 0:659a74b77279 | 124 | return( result ) ; |
Rhyme | 0:659a74b77279 | 125 | } |
Rhyme | 0:659a74b77279 | 126 | |
Rhyme | 0:659a74b77279 | 127 | void TFTMenuItem::doIt(void) |
Rhyme | 0:659a74b77279 | 128 | { |
Rhyme | 0:659a74b77279 | 129 | if (func) { |
Rhyme | 0:659a74b77279 | 130 | func() ; |
Rhyme | 0:659a74b77279 | 131 | } |
Rhyme | 0:659a74b77279 | 132 | } |
Rhyme | 0:659a74b77279 | 133 | |
Rhyme | 0:659a74b77279 | 134 | void TFTMenuItem::font_margin(int x, int y) |
Rhyme | 0:659a74b77279 | 135 | { |
Rhyme | 0:659a74b77279 | 136 | top_margin = y ; |
Rhyme | 0:659a74b77279 | 137 | left_margin = x ; |
Rhyme | 0:659a74b77279 | 138 | } |
Rhyme | 0:659a74b77279 | 139 | |
Rhyme | 0:659a74b77279 | 140 | void TFTMenuItem::draw(int offset_x, int offset_y) |
Rhyme | 0:659a74b77279 | 141 | { |
Rhyme | 0:659a74b77279 | 142 | TFT.BusEnable(true) ; |
Rhyme | 0:659a74b77279 | 143 | TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, Black) ; |
Rhyme | 0:659a74b77279 | 144 | TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, menu_color) ; |
Rhyme | 0:659a74b77279 | 145 | wait(0.1) ; |
Rhyme | 0:659a74b77279 | 146 | TFT.locate(left+offset_x+left_margin, top+offset_y+top_margin) ; |
Rhyme | 0:659a74b77279 | 147 | TFT.foreground(font_color) ; |
Rhyme | 0:659a74b77279 | 148 | TFT.background(menu_color) ; |
Rhyme | 0:659a74b77279 | 149 | TFT.set_font((unsigned char *)Arial28x28) ; |
Rhyme | 0:659a74b77279 | 150 | wait(0.1) ; |
Rhyme | 0:659a74b77279 | 151 | TFT.printf(label) ; |
Rhyme | 0:659a74b77279 | 152 | TFT.BusEnable(false) ; |
Rhyme | 0:659a74b77279 | 153 | } |
Rhyme | 0:659a74b77279 | 154 | |
Rhyme | 0:659a74b77279 | 155 | void TFTRadioButton::draw(int offset_x, int offset_y) |
Rhyme | 0:659a74b77279 | 156 | { |
Rhyme | 0:659a74b77279 | 157 | TFT.BusEnable(true) ; |
Rhyme | 0:659a74b77279 | 158 | if (selected) { |
Rhyme | 0:659a74b77279 | 159 | TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, Black) ; |
Rhyme | 0:659a74b77279 | 160 | TFT.fillrect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, alt_menu_color) ; |
Rhyme | 0:659a74b77279 | 161 | wait(0.1) ; |
Rhyme | 0:659a74b77279 | 162 | TFT.locate(left+offset_x+left_margin, top+offset_y+top_margin) ; |
Rhyme | 0:659a74b77279 | 163 | TFT.foreground(alt_font_color) ; |
Rhyme | 0:659a74b77279 | 164 | TFT.background(alt_menu_color) ; |
Rhyme | 0:659a74b77279 | 165 | TFT.set_font((unsigned char *)Arial12x12) ; |
Rhyme | 0:659a74b77279 | 166 | wait(0.1) ; |
Rhyme | 0:659a74b77279 | 167 | TFT.printf(alt_label) ; |
Rhyme | 0:659a74b77279 | 168 | } else { |
Rhyme | 0:659a74b77279 | 169 | TFTMenuItem::draw(offset_x, offset_y) ; |
Rhyme | 0:659a74b77279 | 170 | } |
Rhyme | 0:659a74b77279 | 171 | TFT.BusEnable(false) ; |
Rhyme | 0:659a74b77279 | 172 | } |
Rhyme | 0:659a74b77279 | 173 | |
Rhyme | 0:659a74b77279 | 174 | |
Rhyme | 0:659a74b77279 | 175 | void TFTMenuItem::highlight(int offset_x, int offset_y) |
Rhyme | 0:659a74b77279 | 176 | { |
Rhyme | 0:659a74b77279 | 177 | TFT.BusEnable(true) ; |
Rhyme | 0:659a74b77279 | 178 | TFT.rect(left+offset_x, top+offset_y, right+offset_x, bottom+offset_y, font_color) ; |
Rhyme | 0:659a74b77279 | 179 | TFT.BusEnable(false) ; |
Rhyme | 0:659a74b77279 | 180 | } |