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 でも動くようになりました。
menu.cpp@4:d4c937bcc469, 2017-04-11 (annotated)
- 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?
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 | * menu.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 "TFTMenu.h" |
Rhyme | 0:659a74b77279 | 23 | #include "menu.h" |
Rhyme | 0:659a74b77279 | 24 | #include "main.h" |
Rhyme | 0:659a74b77279 | 25 | |
Rhyme | 0:659a74b77279 | 26 | #define NUM_MAX_DIGIT 8 |
Rhyme | 0:659a74b77279 | 27 | int num_digit = 0 ; |
Rhyme | 0:659a74b77279 | 28 | long prevValue = 0 ; |
Rhyme | 0:659a74b77279 | 29 | long topValue = 0 ; |
Rhyme | 0:659a74b77279 | 30 | int op = opPlus ; |
Rhyme | 0:659a74b77279 | 31 | |
Rhyme | 0:659a74b77279 | 32 | void doDigit(int num) |
Rhyme | 0:659a74b77279 | 33 | { |
Rhyme | 0:659a74b77279 | 34 | if (num_digit < NUM_MAX_DIGIT) { |
Rhyme | 0:659a74b77279 | 35 | topValue = topValue * 10 + num ; |
Rhyme | 0:659a74b77279 | 36 | num_digit++ ; |
Rhyme | 0:659a74b77279 | 37 | display() ; |
Rhyme | 0:659a74b77279 | 38 | } |
Rhyme | 0:659a74b77279 | 39 | } |
Rhyme | 0:659a74b77279 | 40 | |
Rhyme | 0:659a74b77279 | 41 | void do0(void) { doDigit(0) ; } |
Rhyme | 0:659a74b77279 | 42 | void do1(void) { doDigit(1) ; } |
Rhyme | 0:659a74b77279 | 43 | void do2(void) { doDigit(2) ; } |
Rhyme | 0:659a74b77279 | 44 | void do3(void) { doDigit(3) ; } |
Rhyme | 0:659a74b77279 | 45 | void do4(void) { doDigit(4) ; } |
Rhyme | 0:659a74b77279 | 46 | void do5(void) { doDigit(5) ; } |
Rhyme | 0:659a74b77279 | 47 | void do6(void) { doDigit(6) ; } |
Rhyme | 0:659a74b77279 | 48 | void do7(void) { doDigit(7) ; } |
Rhyme | 0:659a74b77279 | 49 | void do8(void) { doDigit(8) ; } |
Rhyme | 0:659a74b77279 | 50 | void do9(void) { doDigit(9) ; } |
Rhyme | 0:659a74b77279 | 51 | |
Rhyme | 0:659a74b77279 | 52 | void doPlus(void) |
Rhyme | 0:659a74b77279 | 53 | { |
Rhyme | 0:659a74b77279 | 54 | doCalc() ; |
Rhyme | 0:659a74b77279 | 55 | prevValue = topValue ; |
Rhyme | 0:659a74b77279 | 56 | topValue = 0 ; |
Rhyme | 0:659a74b77279 | 57 | num_digit = 0 ; |
Rhyme | 0:659a74b77279 | 58 | op = opPlus ; |
Rhyme | 0:659a74b77279 | 59 | display("+") ; |
Rhyme | 0:659a74b77279 | 60 | } |
Rhyme | 0:659a74b77279 | 61 | |
Rhyme | 0:659a74b77279 | 62 | void doMinus(void) |
Rhyme | 0:659a74b77279 | 63 | { |
Rhyme | 0:659a74b77279 | 64 | doCalc() ; |
Rhyme | 0:659a74b77279 | 65 | prevValue = topValue ; |
Rhyme | 0:659a74b77279 | 66 | topValue = 0 ; |
Rhyme | 0:659a74b77279 | 67 | num_digit = 0 ; |
Rhyme | 0:659a74b77279 | 68 | op = opMinus ; |
Rhyme | 0:659a74b77279 | 69 | display("-") ; |
Rhyme | 0:659a74b77279 | 70 | } |
Rhyme | 0:659a74b77279 | 71 | |
Rhyme | 0:659a74b77279 | 72 | void doMul(void) |
Rhyme | 0:659a74b77279 | 73 | { |
Rhyme | 0:659a74b77279 | 74 | doCalc() ; |
Rhyme | 0:659a74b77279 | 75 | prevValue = topValue ; |
Rhyme | 0:659a74b77279 | 76 | topValue = 0 ; |
Rhyme | 0:659a74b77279 | 77 | num_digit = 0 ; |
Rhyme | 0:659a74b77279 | 78 | op = opMul ; |
Rhyme | 0:659a74b77279 | 79 | display("x") ; |
Rhyme | 0:659a74b77279 | 80 | } |
Rhyme | 0:659a74b77279 | 81 | |
Rhyme | 0:659a74b77279 | 82 | void doDiv(void) |
Rhyme | 0:659a74b77279 | 83 | { |
Rhyme | 0:659a74b77279 | 84 | doCalc() ; |
Rhyme | 0:659a74b77279 | 85 | prevValue = topValue ; |
Rhyme | 0:659a74b77279 | 86 | topValue = 0 ; |
Rhyme | 0:659a74b77279 | 87 | num_digit = 0 ; |
Rhyme | 0:659a74b77279 | 88 | op = opDiv ; |
Rhyme | 0:659a74b77279 | 89 | display("/") ; |
Rhyme | 0:659a74b77279 | 90 | } |
Rhyme | 0:659a74b77279 | 91 | |
Rhyme | 0:659a74b77279 | 92 | void doClear(void) |
Rhyme | 0:659a74b77279 | 93 | { |
Rhyme | 0:659a74b77279 | 94 | prevValue = 0 ; |
Rhyme | 0:659a74b77279 | 95 | topValue = 0 ; |
Rhyme | 0:659a74b77279 | 96 | num_digit = 0 ; |
Rhyme | 0:659a74b77279 | 97 | op = opPlus ; |
Rhyme | 0:659a74b77279 | 98 | display() ; |
Rhyme | 0:659a74b77279 | 99 | } |
Rhyme | 0:659a74b77279 | 100 | |
Rhyme | 0:659a74b77279 | 101 | int doCalc(void) |
Rhyme | 0:659a74b77279 | 102 | { |
Rhyme | 0:659a74b77279 | 103 | int error = 0 ; |
Rhyme | 0:659a74b77279 | 104 | switch(op) { |
Rhyme | 0:659a74b77279 | 105 | case opPlus: |
Rhyme | 0:659a74b77279 | 106 | topValue += prevValue ; |
Rhyme | 0:659a74b77279 | 107 | break ; |
Rhyme | 0:659a74b77279 | 108 | case opMinus: |
Rhyme | 0:659a74b77279 | 109 | topValue = prevValue - topValue ; |
Rhyme | 0:659a74b77279 | 110 | break ; |
Rhyme | 0:659a74b77279 | 111 | case opMul: |
Rhyme | 0:659a74b77279 | 112 | topValue = prevValue * topValue ; |
Rhyme | 0:659a74b77279 | 113 | break ; |
Rhyme | 0:659a74b77279 | 114 | case opDiv: |
Rhyme | 0:659a74b77279 | 115 | if (topValue != 0) { |
Rhyme | 0:659a74b77279 | 116 | topValue = prevValue / topValue ; |
Rhyme | 0:659a74b77279 | 117 | } else { |
Rhyme | 0:659a74b77279 | 118 | error = 1 ; |
Rhyme | 0:659a74b77279 | 119 | } |
Rhyme | 0:659a74b77279 | 120 | break ; |
Rhyme | 0:659a74b77279 | 121 | default: |
Rhyme | 0:659a74b77279 | 122 | break ; |
Rhyme | 0:659a74b77279 | 123 | } |
Rhyme | 0:659a74b77279 | 124 | prevValue = 0 ; |
Rhyme | 0:659a74b77279 | 125 | return(error) ; |
Rhyme | 0:659a74b77279 | 126 | } |
Rhyme | 0:659a74b77279 | 127 | |
Rhyme | 0:659a74b77279 | 128 | void doEqu(void) |
Rhyme | 0:659a74b77279 | 129 | { |
Rhyme | 0:659a74b77279 | 130 | int error = 0 ; |
Rhyme | 0:659a74b77279 | 131 | error = doCalc() ; |
Rhyme | 0:659a74b77279 | 132 | if (error) { |
Rhyme | 0:659a74b77279 | 133 | display("Error!") ; |
Rhyme | 0:659a74b77279 | 134 | } else { |
Rhyme | 0:659a74b77279 | 135 | display() ; |
Rhyme | 0:659a74b77279 | 136 | } |
Rhyme | 0:659a74b77279 | 137 | op = opPlus ; |
Rhyme | 0:659a74b77279 | 138 | num_digit = 0 ; |
Rhyme | 0:659a74b77279 | 139 | } |
Rhyme | 0:659a74b77279 | 140 | |
Rhyme | 0:659a74b77279 | 141 | void initMenu(void) |
Rhyme | 0:659a74b77279 | 142 | { |
Rhyme | 0:659a74b77279 | 143 | int f_left = 18 ; |
Rhyme | 0:659a74b77279 | 144 | int f_top = 14 ; |
Rhyme | 0:659a74b77279 | 145 | |
Rhyme | 0:659a74b77279 | 146 | numMenu = 0 ; |
Rhyme | 0:659a74b77279 | 147 | menu[numMenu++] = new TFTMenuItem( 5, 85, 55, 135, do7, "7", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 148 | menu[numMenu++] = new TFTMenuItem( 65, 85, 115, 135, do8, "8", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 149 | menu[numMenu++] = new TFTMenuItem(125, 85, 175, 135, do9, "9", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 150 | menu[numMenu++] = new TFTMenuItem(185, 85, 235, 135, doClear, "C", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 151 | |
Rhyme | 0:659a74b77279 | 152 | menu[numMenu++] = new TFTMenuItem( 5, 145, 55, 195, do4, "4", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 153 | menu[numMenu++] = new TFTMenuItem( 65, 145, 115, 195, do5, "5", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 154 | menu[numMenu++] = new TFTMenuItem(125, 145, 175, 195, do6, "6", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 155 | menu[numMenu++] = new TFTMenuItem(185, 145, 235, 195, doMinus,"-", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 156 | |
Rhyme | 0:659a74b77279 | 157 | menu[numMenu++] = new TFTMenuItem( 5, 205, 55, 255, do1, "1", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 158 | menu[numMenu++] = new TFTMenuItem( 65, 205, 115, 255, do2, "2", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 159 | menu[numMenu++] = new TFTMenuItem(125, 205, 175, 255, do3, "3", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 160 | menu[numMenu++] = new TFTMenuItem(185, 205, 235, 255, doPlus, "+", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 161 | |
Rhyme | 0:659a74b77279 | 162 | menu[numMenu++] = new TFTMenuItem( 5, 265, 55, 315, do0, "0", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 163 | menu[numMenu++] = new TFTMenuItem( 65, 265, 115, 315, doMul ,"x", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 164 | menu[numMenu++] = new TFTMenuItem(125, 265, 175, 315, doDiv, "/", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 165 | menu[numMenu++] = new TFTMenuItem(185, 265, 235, 315, doEqu, "=", Green, Black, f_left, f_top) ; |
Rhyme | 0:659a74b77279 | 166 | } |
Rhyme | 0:659a74b77279 | 167 | |
Rhyme | 0:659a74b77279 | 168 | void drawMenu(void) |
Rhyme | 0:659a74b77279 | 169 | { |
Rhyme | 0:659a74b77279 | 170 | for (int i = 0 ; i < numMenu ; i++ ) { |
Rhyme | 0:659a74b77279 | 171 | menu[i]->draw() ; |
Rhyme | 0:659a74b77279 | 172 | } |
Rhyme | 0:659a74b77279 | 173 | } |
Rhyme | 0:659a74b77279 | 174 | |
Rhyme | 0:659a74b77279 | 175 | bool doMenu(uint16_t x, uint16_t y) |
Rhyme | 0:659a74b77279 | 176 | { |
Rhyme | 0:659a74b77279 | 177 | bool result = false ; |
Rhyme | 0:659a74b77279 | 178 | |
Rhyme | 0:659a74b77279 | 179 | for (int i = 0 ; i < numMenu ; i++ ) { |
Rhyme | 0:659a74b77279 | 180 | if (menu[i]->hit(x, y)) { |
Rhyme | 0:659a74b77279 | 181 | menu[i]->doIt() ; |
Rhyme | 0:659a74b77279 | 182 | menu[i]->draw() ; |
Rhyme | 0:659a74b77279 | 183 | result = true ; |
Rhyme | 0:659a74b77279 | 184 | // printf("%s TopValue = %d, PreValue = %d\n\r", menu[i]->name(), topValue, prevValue) ; |
Rhyme | 0:659a74b77279 | 185 | break ; |
Rhyme | 0:659a74b77279 | 186 | } |
Rhyme | 0:659a74b77279 | 187 | } |
Rhyme | 0:659a74b77279 | 188 | return( result ) ; |
Rhyme | 0:659a74b77279 | 189 | } |