A simple meter using Adafruit 2.8 TFT with touch v2

Dependencies:   SPI_STMPE610 UniGraphic mbed vt100

/media/uploads/Rhyme/tester_s.jpg

A dumb simple voltage tester using ADC.
With FRDM-KL25Z, you can measure about 0V to 3.28V.
Nothing to drop your jaw nor holding your breath
but I wanted one, so I wrote one ;-)

とても単純はADCを使用した電圧テスターです。
FRDM-KL25Z を使用した場合、0V ~ 3.28V くらいが測定範囲です。
特に目新しいことも、驚くこともありませんが、
自分が欲しいので書いてみました (^ - ^)

On 18-May-2018 
I changed the number display from 0.00 to 0.000
so that I can measure the change of a small loadcell.

2018年5月18日 
ロードセル (重量センサ)の出力値の変化を見たかったので
有効数字を小数点以下2桁から3桁に変更しました。

Revision:
3:bf8761c8eb17
Parent:
2:204e60dbd73d
Child:
4:0607a2a46238
--- a/meter.cpp	Fri Jul 21 01:24:53 2017 +0000
+++ b/meter.cpp	Fri Jul 21 02:01:05 2017 +0000
@@ -2,25 +2,18 @@
 #include <math.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 "meter.h"
-#include "vt100.h"
 #include "main.h"
 
 #ifndef M_PI
 #define M_PI 3.141593
 #endif
 
-extern vt100        *tty ;
 extern ILI9341      *tft ;
-extern SPI_STMPE610 *tsc ;
 extern meter        *tacho ;
-double SIN[451] ;
-double COS[451] ;
+double SIN[451] ; /* sin table for 45 to 90 degrees in 0.1 deg step */
+double COS[451] ; /* cos table for 45 to 90 degrees in 0.1 deg step */
 
 static void fillTriTable(void)
 {
@@ -39,7 +32,6 @@
     _y = y ;
     _w = width ;
     _h = height ;
-    _value = min ;
     _min = min ;
     _max = max ;
     _center_x = _x + _w / 2 ;
@@ -97,11 +89,11 @@
     if (theta < 0.0) { theta = 0.0 ; }
     if (theta > 90.0) { theta = 90.0 ; }
     if (theta > 45.0) {
-        i = (10.0 * (90.0 - theta + 45.0) + 0.5) - 450  ; 
-        x1 = _center_x -(radius * COS[i] + 0.5) ;
-        x2 = _center_x -((radius + append) * COS[i] + 0.5) ;
+        i = (10.0 * (90.0 - theta) + 0.5) ; 
+        x1 = _center_x - (radius * COS[i] + 0.5) ;
+        x2 = _center_x - ((radius + append) * COS[i] + 0.5) ;
     } else {
-        i = (10.0 * (theta + 45.0) + 0.5) - 450 ;
+        i = (10.0 * theta + 0.5) ;
         x1 = _center_x + (radius * COS[i] + 0.5) ;
         x2 = _center_x + ((radius + append) * COS[i] + 0.5) ;
     }
@@ -109,8 +101,8 @@
     y1 = _center_y - (radius * SIN[i] + 0.5) ;
     y2 = _center_y - ((radius + append) * SIN[i] + 0.5) ;
     tft->BusEnable(true) ;
-    tft->line(prev_x1, prev_y1, prev_x2, prev_y2, White) ;
-    tft->line(x1, y1, x2, y2, Black) ;
+    tft->line(prev_x1, prev_y1, prev_x2, prev_y2, White) ; /* erase prev */
+    tft->line(x1, y1, x2, y2, Black) ;                     /* draw current */
     tft->BusEnable(false) ;
     prev_x1 = x1 ;
     prev_x2 = x2 ;
@@ -118,14 +110,13 @@
     prev_y2 = y2 ;
 }
 
-void meter::draw(void) 
-{
-}
-
 void meter::draw(float value) 
 {
     tft->BusEnable(true) ;
-    drawHand(_value) ;
+    drawFrame() ;
+    drawScale() ;
+    drawHand(value) ;
+    drawValue(value) ;
     tft->BusEnable(false) ;
 }
 
@@ -145,4 +136,8 @@
 
 void meter::update(float value) 
 {
+    tft->BusEnable(true) ;
+    drawHand(value) ;
+    drawValue(value) ;
+    tft->BusEnable(false) ;
 }
\ No newline at end of file