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 でも動くようになりました。

/media/uploads/Rhyme/img_1194.jpg

Committer:
Rhyme
Date:
Tue Apr 11 06:06:25 2017 +0000
Revision:
4:d4c937bcc469
Parent:
0:659a74b77279
Support of MAX32600 added

Who changed what in which revision?

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