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

main.cpp
- Committer:
- Rhyme
- Date:
- 2015-12-05
- Revision:
- 2:ddf8d8fffb4f
- Parent:
- 0:659a74b77279
- Child:
- 3:998ba6618f38
File content as of revision 2:ddf8d8fffb4f:
/** mbed oscilloscope my implementation of a oscillo scope
* Copyright (c) 2014, 2015 Motoo Tanaka @ Design Methodology Lab
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "mbed.h"
#include <string.h>
#include <ILI9341.h>
//#include "Arial12x12.h"
//#include "Arial24x23.h"
#include "Arial28x28.h"
//#include "Arial43x48_numb.h"
#include "SPI_STMPE610.h"
#include "vt100.h"
#include "TFTMenu.h"
#include "menu.h"
#include "main.h"
vt100 tty ;
DigitalOut tsc_cs(PIN_CS_TSC, 1) ;
DigitalOut backlight(PIN_BL_TFT, 0) ;
ILI9341 TFT(SPI_8, 10000000,
PIN_MOSI, PIN_MISO, PIN_SCLK,
PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
TFTMenuItem *menu[NUM_MAX_MENU] ;
int numMenu = 0 ;
void initTFT(void)
{
//Configure the display driver
TFT.BusEnable(true) ;
TFT.FastWindow(true) ;
TFT.background(Black);
TFT.foreground(White);
wait(0.01) ;
TFT.cls();
TFT.set_orientation(0) ;
wait(0.1) ;
TFT.BusEnable(false) ;
}
void hello()
{
printf("=== simple calculator ===\n\r") ;
printf("built: %s\n\r",__DATE__) ;
}
void display(char *label)
{
char str[16] ;
int dummy ;
int x = 200 ;
int y = 30 ;
int font_width = 16 ;
dummy = topValue ;
TFT.BusEnable(true) ;
TFT.fillrect(0, 0, 239, 80, Black) ;
wait(0.1) ;
TFT.foreground(White) ;
TFT.background(Black) ;
wait(0.01) ;
TFT.set_font((unsigned char *)Arial28x28) ;
wait(0.1) ;
if ((label != 0)&&(*label != 0)) {
strcpy(str, label) ;
} else {
sprintf(str, "%d", dummy) ;
}
x = 228 - (strlen(str) * font_width) ;
TFT.locate(x, y) ;
TFT.printf(str) ;
TFT.BusEnable(false) ;
}
int main()
{
int touched ;
uint16_t x, y ;
bool result ;
tsc_cs = 1 ;
backlight = 0 ;
initTFT() ;
initMenu() ;
drawMenu() ;
backlight = 1 ;
hello() ;
display() ;
while(1) {
// tsc_cs = 0 ;
touched = TSC.getPoint(&x, &y) ;
// tsc_cs = 1 ;
// if (touched && ((x != 0)||(y != 0))) { // TSC sometimes returns (0,0)
if ((x != 0)||(y !=0)) { // FRDM-KL46Z fails to return touched somehow
result = doMenu(x, y) ;
}
wait(0.01) ;
}
}