Frequency Counter. User interface are used DISCO-F746NG GUI with touch panel.
Dependencies: BSP_DISCO_F746NG F746_GUI LCD_DISCO_F746NG RingBuffer TS_DISCO_F746NG fc_GPS1PPS_f746_f4xx mbed
Please refer following.
/users/kenjiArai/notebook/frequency-counters/
main.cpp@0:52c5dc2b2b68, 2016-11-19 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Nov 19 05:32:06 2016 +0000
- Revision:
- 0:52c5dc2b2b68
Frequency Counter. User interface are used DISCO-F746NG GUI with touch panel.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:52c5dc2b2b68 | 1 | /* |
kenjiArai | 0:52c5dc2b2b68 | 2 | * mbed Application program / Frequency Counter using GPS 1PPS gate puls |
kenjiArai | 0:52c5dc2b2b68 | 3 | * Only for ST DISCO-F746NG |
kenjiArai | 0:52c5dc2b2b68 | 4 | * Worked on a dedicated Grafic LCD Module |
kenjiArai | 0:52c5dc2b2b68 | 5 | * |
kenjiArai | 0:52c5dc2b2b68 | 6 | * Copyright (c) 2014,'15,'16 Kenji Arai / JH1PJL |
kenjiArai | 0:52c5dc2b2b68 | 7 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:52c5dc2b2b68 | 8 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:52c5dc2b2b68 | 9 | * Created: October 18th, 2014 |
kenjiArai | 0:52c5dc2b2b68 | 10 | * Revised: January 2nd, 2015 |
kenjiArai | 0:52c5dc2b2b68 | 11 | * Re-started: June 25th, 2016 ported from F411 to F746 |
kenjiArai | 0:52c5dc2b2b68 | 12 | * Re-started: Nobember 13th, 2016 Only for DISCO-F746NG LCD |
kenjiArai | 0:52c5dc2b2b68 | 13 | * Revised: Nobember 19th, 2016 |
kenjiArai | 0:52c5dc2b2b68 | 14 | * |
kenjiArai | 0:52c5dc2b2b68 | 15 | * Base program: FreqCntr_GPS1PPS_F746F4xx_w_recipro |
kenjiArai | 0:52c5dc2b2b68 | 16 | * https://developer.mbed.org/users/kenjiArai |
kenjiArai | 0:52c5dc2b2b68 | 17 | * /code/FreqCntr_GPS1PPS_F746F4xx_w_recipro/ |
kenjiArai | 0:52c5dc2b2b68 | 18 | * |
kenjiArai | 0:52c5dc2b2b68 | 19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
kenjiArai | 0:52c5dc2b2b68 | 20 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
kenjiArai | 0:52c5dc2b2b68 | 21 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
kenjiArai | 0:52c5dc2b2b68 | 22 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 0:52c5dc2b2b68 | 23 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
kenjiArai | 0:52c5dc2b2b68 | 24 | * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR |
kenjiArai | 0:52c5dc2b2b68 | 25 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 0:52c5dc2b2b68 | 26 | */ |
kenjiArai | 0:52c5dc2b2b68 | 27 | |
kenjiArai | 0:52c5dc2b2b68 | 28 | /* |
kenjiArai | 0:52c5dc2b2b68 | 29 | REFRENCE: see the source code in this file bottom area |
kenjiArai | 0:52c5dc2b2b68 | 30 | 2016/11/12, Copyright (c) 2016 MIKAMI, Naoki |
kenjiArai | 0:52c5dc2b2b68 | 31 | https://developer.mbed.org/users/MikamiUitOpen/code/F746_GUI_Demo/ |
kenjiArai | 0:52c5dc2b2b68 | 32 | Thanks Mikammi-san! |
kenjiArai | 0:52c5dc2b2b68 | 33 | */ |
kenjiArai | 0:52c5dc2b2b68 | 34 | |
kenjiArai | 0:52c5dc2b2b68 | 35 | #define USE_COM // use Communication with PC(UART) |
kenjiArai | 0:52c5dc2b2b68 | 36 | |
kenjiArai | 0:52c5dc2b2b68 | 37 | // Include -------------------------------------------------------------------- |
kenjiArai | 0:52c5dc2b2b68 | 38 | #include "mbed.h" |
kenjiArai | 0:52c5dc2b2b68 | 39 | #include "F746_GUI.hpp" |
kenjiArai | 0:52c5dc2b2b68 | 40 | #include "GPSrcvr.h" |
kenjiArai | 0:52c5dc2b2b68 | 41 | #include "fc_GPS1PPS.h" |
kenjiArai | 0:52c5dc2b2b68 | 42 | |
kenjiArai | 0:52c5dc2b2b68 | 43 | // Definition ----------------------------------------------------------------- |
kenjiArai | 0:52c5dc2b2b68 | 44 | #ifdef USE_COM |
kenjiArai | 0:52c5dc2b2b68 | 45 | #define BAUD(x) pc.baud(x) |
kenjiArai | 0:52c5dc2b2b68 | 46 | #define GETC(x) pc.getc(x) |
kenjiArai | 0:52c5dc2b2b68 | 47 | #define PUTC(x) pc.putc(x) |
kenjiArai | 0:52c5dc2b2b68 | 48 | #define PRINTF(...) pc.printf(__VA_ARGS__) |
kenjiArai | 0:52c5dc2b2b68 | 49 | #define READABLE(x) pc.readable(x) |
kenjiArai | 0:52c5dc2b2b68 | 50 | #else |
kenjiArai | 0:52c5dc2b2b68 | 51 | #define BAUD(x) {;} |
kenjiArai | 0:52c5dc2b2b68 | 52 | #define GETC(x) {;} |
kenjiArai | 0:52c5dc2b2b68 | 53 | #define PUTC(x) {;} |
kenjiArai | 0:52c5dc2b2b68 | 54 | #define PRINTF(...) {;} |
kenjiArai | 0:52c5dc2b2b68 | 55 | #define READABLE(x) {;} |
kenjiArai | 0:52c5dc2b2b68 | 56 | #endif |
kenjiArai | 0:52c5dc2b2b68 | 57 | |
kenjiArai | 0:52c5dc2b2b68 | 58 | enum input_select { |
kenjiArai | 0:52c5dc2b2b68 | 59 | BNC_NORMAL = 1, |
kenjiArai | 0:52c5dc2b2b68 | 60 | RECIPRO_AC, |
kenjiArai | 0:52c5dc2b2b68 | 61 | RECIPRO_DC, |
kenjiArai | 0:52c5dc2b2b68 | 62 | SMA_10, |
kenjiArai | 0:52c5dc2b2b68 | 63 | SMA_20 |
kenjiArai | 0:52c5dc2b2b68 | 64 | }; |
kenjiArai | 0:52c5dc2b2b68 | 65 | |
kenjiArai | 0:52c5dc2b2b68 | 66 | using namespace Frequency_counter; |
kenjiArai | 0:52c5dc2b2b68 | 67 | |
kenjiArai | 0:52c5dc2b2b68 | 68 | // Object --------------------------------------------------------------------- |
kenjiArai | 0:52c5dc2b2b68 | 69 | DigitalOut input_frq_select(PF_9); |
kenjiArai | 0:52c5dc2b2b68 | 70 | DigitalInOut prescaler10or20(PB_15); |
kenjiArai | 0:52c5dc2b2b68 | 71 | DigitalOut recipro_select(PA_8); |
kenjiArai | 0:52c5dc2b2b68 | 72 | DigitalOut led1(LED1); |
kenjiArai | 0:52c5dc2b2b68 | 73 | Serial pc(USBTX, USBRX); |
kenjiArai | 0:52c5dc2b2b68 | 74 | Timer tmr; |
kenjiArai | 0:52c5dc2b2b68 | 75 | |
kenjiArai | 0:52c5dc2b2b68 | 76 | //**** Req. Counter |
kenjiArai | 0:52c5dc2b2b68 | 77 | FRQ_CUNTR fc; |
kenjiArai | 0:52c5dc2b2b68 | 78 | //**** GUI |
kenjiArai | 0:52c5dc2b2b68 | 79 | LCD_DISCO_F746NG lcd_; |
kenjiArai | 0:52c5dc2b2b68 | 80 | |
kenjiArai | 0:52c5dc2b2b68 | 81 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 0:52c5dc2b2b68 | 82 | // Freq. |
kenjiArai | 0:52c5dc2b2b68 | 83 | double new_frequency; |
kenjiArai | 0:52c5dc2b2b68 | 84 | double f_10sec; |
kenjiArai | 0:52c5dc2b2b68 | 85 | double f_100sec; |
kenjiArai | 0:52c5dc2b2b68 | 86 | double f_1000sec; |
kenjiArai | 0:52c5dc2b2b68 | 87 | double freq_recipro; |
kenjiArai | 0:52c5dc2b2b68 | 88 | // Operation mode |
kenjiArai | 0:52c5dc2b2b68 | 89 | uint8_t input_mode; |
kenjiArai | 0:52c5dc2b2b68 | 90 | |
kenjiArai | 0:52c5dc2b2b68 | 91 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 0:52c5dc2b2b68 | 92 | // 12345678901234567890 |
kenjiArai | 0:52c5dc2b2b68 | 93 | static char *const msg_msg0 = "Frequency Counter by JH1PJL K.Arai"; |
kenjiArai | 0:52c5dc2b2b68 | 94 | static char *const msg_msg1 = "on DISCO-F746NG System"; |
kenjiArai | 0:52c5dc2b2b68 | 95 | static char *const msg_msg2 = " "__DATE__" "; |
kenjiArai | 0:52c5dc2b2b68 | 96 | static char *const msg_mode1 = " BNC none-prescaler "; |
kenjiArai | 0:52c5dc2b2b68 | 97 | static char *const msg_mode2 = " BNC recipro(BNC none-prescaler) "; |
kenjiArai | 0:52c5dc2b2b68 | 98 | static char *const msg_mode3 = " BNC recipro(dedicated BNC input)"; |
kenjiArai | 0:52c5dc2b2b68 | 99 | static char *const msg_mode4 = " SMA prescaler 1/10 "; |
kenjiArai | 0:52c5dc2b2b68 | 100 | static char *const msg_mode5 = " SMA prescaler 1/20 "; |
kenjiArai | 0:52c5dc2b2b68 | 101 | |
kenjiArai | 0:52c5dc2b2b68 | 102 | char *const open_msg[] = { |
kenjiArai | 0:52c5dc2b2b68 | 103 | "(1) BNC(AC) div = 1/1 10Hz to 100MHz", |
kenjiArai | 0:52c5dc2b2b68 | 104 | "(2) BNC(AC)(same as above) Reciprocal mode less than 5KHz", |
kenjiArai | 0:52c5dc2b2b68 | 105 | "(3) BNC(DC) (another BNC) Reciprocal mode less than 5KHz", |
kenjiArai | 0:52c5dc2b2b68 | 106 | "(4) SMA div = 1/10 up to 1GHz", |
kenjiArai | 0:52c5dc2b2b68 | 107 | "(5) SMA(same as above) div = 1/20 up to 1.5GHz" |
kenjiArai | 0:52c5dc2b2b68 | 108 | }; |
kenjiArai | 0:52c5dc2b2b68 | 109 | |
kenjiArai | 0:52c5dc2b2b68 | 110 | char *const select_msg[] = { |
kenjiArai | 0:52c5dc2b2b68 | 111 | "(1) BNC(AC) div = 1/1 ", |
kenjiArai | 0:52c5dc2b2b68 | 112 | "(2) BNC(AC) Reciprocal", |
kenjiArai | 0:52c5dc2b2b68 | 113 | "(3) BNC(DC) Reciprocal", |
kenjiArai | 0:52c5dc2b2b68 | 114 | "(4) SMA div = 1/10", |
kenjiArai | 0:52c5dc2b2b68 | 115 | "(5) SMA div = 1/20" |
kenjiArai | 0:52c5dc2b2b68 | 116 | }; |
kenjiArai | 0:52c5dc2b2b68 | 117 | |
kenjiArai | 0:52c5dc2b2b68 | 118 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 0:52c5dc2b2b68 | 119 | void gps_data_rcv(void); |
kenjiArai | 0:52c5dc2b2b68 | 120 | void freq_measurement(uint8_t mode); |
kenjiArai | 0:52c5dc2b2b68 | 121 | void recipro(uint8_t mode); |
kenjiArai | 0:52c5dc2b2b68 | 122 | void opening(void); |
kenjiArai | 0:52c5dc2b2b68 | 123 | void show_time(void); |
kenjiArai | 0:52c5dc2b2b68 | 124 | uint8_t mode_slect(void); |
kenjiArai | 0:52c5dc2b2b68 | 125 | |
kenjiArai | 0:52c5dc2b2b68 | 126 | //------------------------------------------------------------------------------ |
kenjiArai | 0:52c5dc2b2b68 | 127 | // Control Program |
kenjiArai | 0:52c5dc2b2b68 | 128 | //------------------------------------------------------------------------------ |
kenjiArai | 0:52c5dc2b2b68 | 129 | void freq_measurement(uint8_t mode) |
kenjiArai | 0:52c5dc2b2b68 | 130 | { |
kenjiArai | 0:52c5dc2b2b68 | 131 | uint16_t n = 0; |
kenjiArai | 0:52c5dc2b2b68 | 132 | char buf[48]; |
kenjiArai | 0:52c5dc2b2b68 | 133 | double scale; |
kenjiArai | 0:52c5dc2b2b68 | 134 | |
kenjiArai | 0:52c5dc2b2b68 | 135 | Button button(400, 3, 70, 40, "MODE", Font16); |
kenjiArai | 0:52c5dc2b2b68 | 136 | Label obj20(180, 5, "Frequency Counter", |
kenjiArai | 0:52c5dc2b2b68 | 137 | Label::CENTER, Font24, LCD_COLOR_GREEN, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 138 | if (mode == SMA_20){ |
kenjiArai | 0:52c5dc2b2b68 | 139 | Label obj21(200, 30, "Input=SMA, Division=1/20", |
kenjiArai | 0:52c5dc2b2b68 | 140 | Label::CENTER, Font16, LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 141 | scale = 20.0f; |
kenjiArai | 0:52c5dc2b2b68 | 142 | } else if(mode == SMA_10){ |
kenjiArai | 0:52c5dc2b2b68 | 143 | Label obj21(200, 30, "Input=SMA, Division=1/10", |
kenjiArai | 0:52c5dc2b2b68 | 144 | Label::CENTER, Font16, LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 145 | scale = 10.0f; |
kenjiArai | 0:52c5dc2b2b68 | 146 | } else { |
kenjiArai | 0:52c5dc2b2b68 | 147 | Label obj21(200, 30, "Input=BNC(AC), Division=1/1", |
kenjiArai | 0:52c5dc2b2b68 | 148 | Label::CENTER, Font16, LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 149 | scale = 1.0f; |
kenjiArai | 0:52c5dc2b2b68 | 150 | } |
kenjiArai | 0:52c5dc2b2b68 | 151 | while(true){ |
kenjiArai | 0:52c5dc2b2b68 | 152 | tmr.reset(); |
kenjiArai | 0:52c5dc2b2b68 | 153 | tmr.start(); |
kenjiArai | 0:52c5dc2b2b68 | 154 | if (fc.status_freq_update() != 0) { |
kenjiArai | 0:52c5dc2b2b68 | 155 | new_frequency = fc.read_freq_data() * scale; |
kenjiArai | 0:52c5dc2b2b68 | 156 | f_10sec = fc.read_freq_w_gate_time(10) * scale; |
kenjiArai | 0:52c5dc2b2b68 | 157 | f_100sec = fc.read_freq_w_gate_time(100) * scale; |
kenjiArai | 0:52c5dc2b2b68 | 158 | f_1000sec = fc.read_freq_w_gate_time(1000) * scale; |
kenjiArai | 0:52c5dc2b2b68 | 159 | PRINTF("%8d, Freq: %9.0f,", ++n, new_frequency); |
kenjiArai | 0:52c5dc2b2b68 | 160 | PRINTF(" F10s: %10.1f, F100s: %11.2f,", f_10sec, f_100sec); |
kenjiArai | 0:52c5dc2b2b68 | 161 | PRINTF(" F1000s: %12.3f,", f_1000sec); |
kenjiArai | 0:52c5dc2b2b68 | 162 | sprintf(buf, "Freq: %11.0f [Hz]", new_frequency); |
kenjiArai | 0:52c5dc2b2b68 | 163 | Label obj22(40, 60, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 164 | LCD_COLOR_GREEN, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 165 | sprintf(buf, "F10S: %12.1f [Hz]", f_10sec); |
kenjiArai | 0:52c5dc2b2b68 | 166 | Label obj23(40, 90, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 167 | LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 168 | sprintf(buf, "F100: %13.2f [Hz]", f_100sec); |
kenjiArai | 0:52c5dc2b2b68 | 169 | Label obj24(40, 120, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 170 | LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 171 | } else { |
kenjiArai | 0:52c5dc2b2b68 | 172 | PRINTF("%8d, No data,,,,", ++n); |
kenjiArai | 0:52c5dc2b2b68 | 173 | Label obj25(40, 60, "Data is NOT available!", Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 174 | LCD_COLOR_GREEN, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 175 | sprintf(buf, " "); |
kenjiArai | 0:52c5dc2b2b68 | 176 | Label obj26(40, 80, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 177 | LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 178 | Label obj27(40, 100, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 179 | LCD_COLOR_MAGENTA, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 180 | } |
kenjiArai | 0:52c5dc2b2b68 | 181 | if (mode == SMA_20){ |
kenjiArai | 0:52c5dc2b2b68 | 182 | PRINTF(" Div: 1/20,"); |
kenjiArai | 0:52c5dc2b2b68 | 183 | } else if(mode == SMA_10){ |
kenjiArai | 0:52c5dc2b2b68 | 184 | PRINTF(" Div: 1/10,"); |
kenjiArai | 0:52c5dc2b2b68 | 185 | } else { |
kenjiArai | 0:52c5dc2b2b68 | 186 | PRINTF(" Div: 1/1 ,"); |
kenjiArai | 0:52c5dc2b2b68 | 187 | } |
kenjiArai | 0:52c5dc2b2b68 | 188 | show_time(); |
kenjiArai | 0:52c5dc2b2b68 | 189 | while (1000 > tmr.read_ms()){ // 1 second interval |
kenjiArai | 0:52c5dc2b2b68 | 190 | if (button.Touched()){ // if user touched "MODE" panel then return |
kenjiArai | 0:52c5dc2b2b68 | 191 | return; |
kenjiArai | 0:52c5dc2b2b68 | 192 | } |
kenjiArai | 0:52c5dc2b2b68 | 193 | wait_ms(1); |
kenjiArai | 0:52c5dc2b2b68 | 194 | } |
kenjiArai | 0:52c5dc2b2b68 | 195 | } |
kenjiArai | 0:52c5dc2b2b68 | 196 | } |
kenjiArai | 0:52c5dc2b2b68 | 197 | |
kenjiArai | 0:52c5dc2b2b68 | 198 | void recipro(uint8_t mode) |
kenjiArai | 0:52c5dc2b2b68 | 199 | { |
kenjiArai | 0:52c5dc2b2b68 | 200 | uint16_t n = 0; |
kenjiArai | 0:52c5dc2b2b68 | 201 | char buf[48]; |
kenjiArai | 0:52c5dc2b2b68 | 202 | double freq_recipro; |
kenjiArai | 0:52c5dc2b2b68 | 203 | uint32_t interval_recipro; |
kenjiArai | 0:52c5dc2b2b68 | 204 | uint32_t base_clk; |
kenjiArai | 0:52c5dc2b2b68 | 205 | int32_t run2stop; |
kenjiArai | 0:52c5dc2b2b68 | 206 | |
kenjiArai | 0:52c5dc2b2b68 | 207 | Button button(400, 3, 70, 40, "MODE", Font16); |
kenjiArai | 0:52c5dc2b2b68 | 208 | Label obj30(180, 5, "Frequency Counter", |
kenjiArai | 0:52c5dc2b2b68 | 209 | Label::CENTER, Font24, LCD_COLOR_GREEN, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 210 | if (mode == RECIPRO_AC){ |
kenjiArai | 0:52c5dc2b2b68 | 211 | Label obj31(200, 30, "Input=BNC(AC) Reciprocal Mode", |
kenjiArai | 0:52c5dc2b2b68 | 212 | Label::CENTER, Font16, LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 213 | } else if (mode == RECIPRO_DC){ |
kenjiArai | 0:52c5dc2b2b68 | 214 | Label obj31(200, 30, "Input=BNC(DC) Reciprocal Mode", |
kenjiArai | 0:52c5dc2b2b68 | 215 | Label::CENTER, Font16, LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 216 | } |
kenjiArai | 0:52c5dc2b2b68 | 217 | while(true){ |
kenjiArai | 0:52c5dc2b2b68 | 218 | tmr.reset(); |
kenjiArai | 0:52c5dc2b2b68 | 219 | tmr.start(); |
kenjiArai | 0:52c5dc2b2b68 | 220 | fc.recipro_start_measure(); |
kenjiArai | 0:52c5dc2b2b68 | 221 | PRINTF("Start measurement\r"); |
kenjiArai | 0:52c5dc2b2b68 | 222 | while (fc.recipro_check_trigger() == 0){ |
kenjiArai | 0:52c5dc2b2b68 | 223 | run2stop = tmr.read_ms(); |
kenjiArai | 0:52c5dc2b2b68 | 224 | if (run2stop >= 100000){ // 100sec 0.001Hz |
kenjiArai | 0:52c5dc2b2b68 | 225 | break; |
kenjiArai | 0:52c5dc2b2b68 | 226 | } |
kenjiArai | 0:52c5dc2b2b68 | 227 | if (button.Touched()){ // if user touched "MODE" panel then return |
kenjiArai | 0:52c5dc2b2b68 | 228 | return; |
kenjiArai | 0:52c5dc2b2b68 | 229 | } |
kenjiArai | 0:52c5dc2b2b68 | 230 | } |
kenjiArai | 0:52c5dc2b2b68 | 231 | if (button.Touched()){ // if user touched "MODE" panel then return |
kenjiArai | 0:52c5dc2b2b68 | 232 | return; |
kenjiArai | 0:52c5dc2b2b68 | 233 | } |
kenjiArai | 0:52c5dc2b2b68 | 234 | if (run2stop >= 1000000){ // 100sec 0.001Hz |
kenjiArai | 0:52c5dc2b2b68 | 235 | //freq_recipro = 0; |
kenjiArai | 0:52c5dc2b2b68 | 236 | } else { |
kenjiArai | 0:52c5dc2b2b68 | 237 | interval_recipro = fc.recipro_read_data(); |
kenjiArai | 0:52c5dc2b2b68 | 238 | base_clk = fc.recipro_base_clk_data(1); |
kenjiArai | 0:52c5dc2b2b68 | 239 | if (interval_recipro >= 9000){// Measure less than 10KHz frequency |
kenjiArai | 0:52c5dc2b2b68 | 240 | freq_recipro = (double)base_clk / (double)interval_recipro; |
kenjiArai | 0:52c5dc2b2b68 | 241 | } else { |
kenjiArai | 0:52c5dc2b2b68 | 242 | //freq_recipro = 0; |
kenjiArai | 0:52c5dc2b2b68 | 243 | } |
kenjiArai | 0:52c5dc2b2b68 | 244 | } |
kenjiArai | 0:52c5dc2b2b68 | 245 | PRINTF("%8d, Freq: %11.5f [Hz] , ", n++, freq_recipro); |
kenjiArai | 0:52c5dc2b2b68 | 246 | PRINTF("Raw: %11u [cnt] , ", interval_recipro); |
kenjiArai | 0:52c5dc2b2b68 | 247 | PRINTF("Base: %11u [Hz], ", base_clk); |
kenjiArai | 0:52c5dc2b2b68 | 248 | sprintf(buf, "Freq:%11.5f [Hz]", freq_recipro); |
kenjiArai | 0:52c5dc2b2b68 | 249 | Label obj32(40, 60, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 250 | LCD_COLOR_GREEN, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 251 | sprintf(buf, "Raw: %11u [Counts]", interval_recipro); |
kenjiArai | 0:52c5dc2b2b68 | 252 | Label obj33(40, 90, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 253 | LCD_COLOR_WHITE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 254 | sprintf(buf, "Base:%11u (Sys Clk)", base_clk); |
kenjiArai | 0:52c5dc2b2b68 | 255 | Label obj34(40, 120, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 256 | LCD_COLOR_MAGENTA, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 257 | show_time(); |
kenjiArai | 0:52c5dc2b2b68 | 258 | run2stop = tmr.read_ms(); |
kenjiArai | 0:52c5dc2b2b68 | 259 | if (run2stop < 1000){ |
kenjiArai | 0:52c5dc2b2b68 | 260 | while (tmr.read_ms() < 1000){ // 1 second interval |
kenjiArai | 0:52c5dc2b2b68 | 261 | if (button.Touched()){ |
kenjiArai | 0:52c5dc2b2b68 | 262 | return; |
kenjiArai | 0:52c5dc2b2b68 | 263 | } |
kenjiArai | 0:52c5dc2b2b68 | 264 | wait_ms(1); |
kenjiArai | 0:52c5dc2b2b68 | 265 | } |
kenjiArai | 0:52c5dc2b2b68 | 266 | } |
kenjiArai | 0:52c5dc2b2b68 | 267 | } |
kenjiArai | 0:52c5dc2b2b68 | 268 | } |
kenjiArai | 0:52c5dc2b2b68 | 269 | |
kenjiArai | 0:52c5dc2b2b68 | 270 | void show_time(void) |
kenjiArai | 0:52c5dc2b2b68 | 271 | { |
kenjiArai | 0:52c5dc2b2b68 | 272 | char buf[48]; |
kenjiArai | 0:52c5dc2b2b68 | 273 | time_t seconds; |
kenjiArai | 0:52c5dc2b2b68 | 274 | |
kenjiArai | 0:52c5dc2b2b68 | 275 | seconds = time(NULL) + 32400; // Adjust UTC to JST |
kenjiArai | 0:52c5dc2b2b68 | 276 | strftime(buf, 40, |
kenjiArai | 0:52c5dc2b2b68 | 277 | " %I:%M:%S %p JST %y/%m/%d", localtime(&seconds)); |
kenjiArai | 0:52c5dc2b2b68 | 278 | PRINTF("%s\r\n", buf); |
kenjiArai | 0:52c5dc2b2b68 | 279 | Label obj0(40, 240, buf, Label::LEFT, Font24, |
kenjiArai | 0:52c5dc2b2b68 | 280 | LCD_COLOR_ORANGE, LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 281 | } |
kenjiArai | 0:52c5dc2b2b68 | 282 | |
kenjiArai | 0:52c5dc2b2b68 | 283 | int main() |
kenjiArai | 0:52c5dc2b2b68 | 284 | { |
kenjiArai | 0:52c5dc2b2b68 | 285 | // Initial input mode |
kenjiArai | 0:52c5dc2b2b68 | 286 | input_mode = BNC_NORMAL; |
kenjiArai | 0:52c5dc2b2b68 | 287 | input_frq_select = 1; |
kenjiArai | 0:52c5dc2b2b68 | 288 | prescaler10or20.output(); |
kenjiArai | 0:52c5dc2b2b68 | 289 | prescaler10or20 = 0; |
kenjiArai | 0:52c5dc2b2b68 | 290 | recipro_select = 0; |
kenjiArai | 0:52c5dc2b2b68 | 291 | while(true){ |
kenjiArai | 0:52c5dc2b2b68 | 292 | lcd_.Clear(LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 293 | // openning message |
kenjiArai | 0:52c5dc2b2b68 | 294 | opening(); |
kenjiArai | 0:52c5dc2b2b68 | 295 | PRINTF("\r\n%s%s\r\n", msg_msg0, msg_msg2); |
kenjiArai | 0:52c5dc2b2b68 | 296 | PRINTF("%s\r\n", msg_msg1); |
kenjiArai | 0:52c5dc2b2b68 | 297 | PRINTF("Wait GPS 1PPS signal\r\n"); |
kenjiArai | 0:52c5dc2b2b68 | 298 | // GPS (not return until 3D condition) |
kenjiArai | 0:52c5dc2b2b68 | 299 | gps_data_rcv(); |
kenjiArai | 0:52c5dc2b2b68 | 300 | lcd_.Clear(LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 301 | input_mode = mode_slect(); |
kenjiArai | 0:52c5dc2b2b68 | 302 | lcd_.Clear(LCD_COLOR_BLACK); |
kenjiArai | 0:52c5dc2b2b68 | 303 | PRINTF("\r\nInput mode # is %u\r\n", input_mode); |
kenjiArai | 0:52c5dc2b2b68 | 304 | PRINTF("If you want to change the input signal,"); |
kenjiArai | 0:52c5dc2b2b68 | 305 | PRINTF(" please restart the system (Enter Alt+B from your PC)\r\n"); |
kenjiArai | 0:52c5dc2b2b68 | 306 | PRINTF("\r\nStart measuring\r\nMeasureing mode = "); |
kenjiArai | 0:52c5dc2b2b68 | 307 | switch(input_mode){ |
kenjiArai | 0:52c5dc2b2b68 | 308 | case RECIPRO_AC: |
kenjiArai | 0:52c5dc2b2b68 | 309 | PRINTF("%s\r\n", msg_mode2); |
kenjiArai | 0:52c5dc2b2b68 | 310 | input_frq_select = 1; |
kenjiArai | 0:52c5dc2b2b68 | 311 | prescaler10or20.output(); |
kenjiArai | 0:52c5dc2b2b68 | 312 | prescaler10or20 = 0; |
kenjiArai | 0:52c5dc2b2b68 | 313 | recipro_select = 0; |
kenjiArai | 0:52c5dc2b2b68 | 314 | recipro(input_mode); |
kenjiArai | 0:52c5dc2b2b68 | 315 | break; |
kenjiArai | 0:52c5dc2b2b68 | 316 | case RECIPRO_DC: |
kenjiArai | 0:52c5dc2b2b68 | 317 | PRINTF("%s\r\n", msg_mode3); |
kenjiArai | 0:52c5dc2b2b68 | 318 | input_frq_select = 1; |
kenjiArai | 0:52c5dc2b2b68 | 319 | prescaler10or20.output(); |
kenjiArai | 0:52c5dc2b2b68 | 320 | prescaler10or20 = 0; |
kenjiArai | 0:52c5dc2b2b68 | 321 | recipro_select = 1; |
kenjiArai | 0:52c5dc2b2b68 | 322 | recipro(input_mode); |
kenjiArai | 0:52c5dc2b2b68 | 323 | break; |
kenjiArai | 0:52c5dc2b2b68 | 324 | case SMA_10: |
kenjiArai | 0:52c5dc2b2b68 | 325 | PRINTF("%s\r\n", msg_mode4); |
kenjiArai | 0:52c5dc2b2b68 | 326 | input_frq_select = 0; |
kenjiArai | 0:52c5dc2b2b68 | 327 | prescaler10or20.output(); |
kenjiArai | 0:52c5dc2b2b68 | 328 | prescaler10or20 = 0; |
kenjiArai | 0:52c5dc2b2b68 | 329 | recipro_select = 0; |
kenjiArai | 0:52c5dc2b2b68 | 330 | freq_measurement(input_mode); |
kenjiArai | 0:52c5dc2b2b68 | 331 | break; |
kenjiArai | 0:52c5dc2b2b68 | 332 | case SMA_20: |
kenjiArai | 0:52c5dc2b2b68 | 333 | PRINTF("%s\r\n", msg_mode5); |
kenjiArai | 0:52c5dc2b2b68 | 334 | input_frq_select = 0; |
kenjiArai | 0:52c5dc2b2b68 | 335 | prescaler10or20.input(); |
kenjiArai | 0:52c5dc2b2b68 | 336 | recipro_select = 0; |
kenjiArai | 0:52c5dc2b2b68 | 337 | freq_measurement(input_mode); |
kenjiArai | 0:52c5dc2b2b68 | 338 | break; |
kenjiArai | 0:52c5dc2b2b68 | 339 | case BNC_NORMAL: |
kenjiArai | 0:52c5dc2b2b68 | 340 | default: |
kenjiArai | 0:52c5dc2b2b68 | 341 | input_mode = BNC_NORMAL; |
kenjiArai | 0:52c5dc2b2b68 | 342 | PRINTF("%s\r\n", msg_mode1); |
kenjiArai | 0:52c5dc2b2b68 | 343 | input_frq_select = 1; |
kenjiArai | 0:52c5dc2b2b68 | 344 | prescaler10or20.output(); |
kenjiArai | 0:52c5dc2b2b68 | 345 | prescaler10or20 = 0; |
kenjiArai | 0:52c5dc2b2b68 | 346 | recipro_select = 0; |
kenjiArai | 0:52c5dc2b2b68 | 347 | freq_measurement(input_mode); |
kenjiArai | 0:52c5dc2b2b68 | 348 | break; |
kenjiArai | 0:52c5dc2b2b68 | 349 | } |
kenjiArai | 0:52c5dc2b2b68 | 350 | } |
kenjiArai | 0:52c5dc2b2b68 | 351 | } |
kenjiArai | 0:52c5dc2b2b68 | 352 | |
kenjiArai | 0:52c5dc2b2b68 | 353 | void opening() |
kenjiArai | 0:52c5dc2b2b68 | 354 | { |
kenjiArai | 0:52c5dc2b2b68 | 355 | Label obj10(240, 2, "Frequency Counter using GPS 1PPS", |
kenjiArai | 0:52c5dc2b2b68 | 356 | Label::CENTER, Font16); |
kenjiArai | 0:52c5dc2b2b68 | 357 | Label obj11(240, 20, " created on Nov. 2016 by JH1PJL/Kenji Arai", |
kenjiArai | 0:52c5dc2b2b68 | 358 | Label::CENTER); |
kenjiArai | 0:52c5dc2b2b68 | 359 | Label obj12(240, 100, " Please wait to receive", |
kenjiArai | 0:52c5dc2b2b68 | 360 | Label::CENTER, Font24, LCD_COLOR_LIGHTYELLOW); |
kenjiArai | 0:52c5dc2b2b68 | 361 | Label obj13(240, 120, " GPS signal!! ", |
kenjiArai | 0:52c5dc2b2b68 | 362 | Label::CENTER, Font24, LCD_COLOR_LIGHTYELLOW); |
kenjiArai | 0:52c5dc2b2b68 | 363 | } |
kenjiArai | 0:52c5dc2b2b68 | 364 | |
kenjiArai | 0:52c5dc2b2b68 | 365 | uint8_t mode_slect() |
kenjiArai | 0:52c5dc2b2b68 | 366 | { |
kenjiArai | 0:52c5dc2b2b68 | 367 | Label obj10(240, 2, "Set ""Operationg Mode""", |
kenjiArai | 0:52c5dc2b2b68 | 368 | Label::CENTER, Font24, LCD_COLOR_LIGHTGREEN); |
kenjiArai | 0:52c5dc2b2b68 | 369 | Label obj11(40, 30, open_msg[0], Label::LEFT); |
kenjiArai | 0:52c5dc2b2b68 | 370 | Label obj12(40, 42, open_msg[1], Label::LEFT); |
kenjiArai | 0:52c5dc2b2b68 | 371 | Label obj13(40, 54, open_msg[2], Label::LEFT); |
kenjiArai | 0:52c5dc2b2b68 | 372 | Label obj14(40, 66, open_msg[3], Label::LEFT); |
kenjiArai | 0:52c5dc2b2b68 | 373 | Label obj15(40, 78, open_msg[4], Label::LEFT); |
kenjiArai | 0:52c5dc2b2b68 | 374 | const int NUMBER_BUTTONS = 5; |
kenjiArai | 0:52c5dc2b2b68 | 375 | const string STR1[NUMBER_BUTTONS] = |
kenjiArai | 0:52c5dc2b2b68 | 376 | {"1) Nor(AC)", "2) Rec(AC)", "3) Rec(DC)", "4) 1/10","5) 1/20"}; |
kenjiArai | 0:52c5dc2b2b68 | 377 | ButtonGroup bGroup1(18, 120, 85, 40, NUMBER_BUTTONS, STR1, 5, 5, 5, 5, |
kenjiArai | 0:52c5dc2b2b68 | 378 | Font12, LCD_COLOR_WHITE, 0xFF003538, 0xFFB70068, 0xFFFF7FFF); |
kenjiArai | 0:52c5dc2b2b68 | 379 | NumericLabel<int> bTouch(50, 240, "", |
kenjiArai | 0:52c5dc2b2b68 | 380 | Label::LEFT, Font24, LCD_COLOR_ORANGE); |
kenjiArai | 0:52c5dc2b2b68 | 381 | Button button1(300, 170, 100, 50, "ENTER", Font16); |
kenjiArai | 0:52c5dc2b2b68 | 382 | while (true) |
kenjiArai | 0:52c5dc2b2b68 | 383 | { |
kenjiArai | 0:52c5dc2b2b68 | 384 | int num; |
kenjiArai | 0:52c5dc2b2b68 | 385 | if (bGroup1.GetTouchedNumber(num)){ |
kenjiArai | 0:52c5dc2b2b68 | 386 | char buf[32]; |
kenjiArai | 0:52c5dc2b2b68 | 387 | strcpy(buf, select_msg[num]); |
kenjiArai | 0:52c5dc2b2b68 | 388 | bTouch.Draw(buf, num); |
kenjiArai | 0:52c5dc2b2b68 | 389 | } |
kenjiArai | 0:52c5dc2b2b68 | 390 | if (button1.Touched()){ |
kenjiArai | 0:52c5dc2b2b68 | 391 | return (uint8_t)(num + 1); |
kenjiArai | 0:52c5dc2b2b68 | 392 | } |
kenjiArai | 0:52c5dc2b2b68 | 393 | wait(0.02f); |
kenjiArai | 0:52c5dc2b2b68 | 394 | } |
kenjiArai | 0:52c5dc2b2b68 | 395 | } |
kenjiArai | 0:52c5dc2b2b68 | 396 | |
kenjiArai | 0:52c5dc2b2b68 | 397 | |
kenjiArai | 0:52c5dc2b2b68 | 398 | //------------------------------------------------------------------------------ |
kenjiArai | 0:52c5dc2b2b68 | 399 | // ORIGINAL PROGRAM FOR F746_GUI_DEMO |
kenjiArai | 0:52c5dc2b2b68 | 400 | // by MIKAMI, Naoki |
kenjiArai | 0:52c5dc2b2b68 | 401 | // 2016/11/12, Copyright (c) 2016 MIKAMI, Naoki |
kenjiArai | 0:52c5dc2b2b68 | 402 | //------------------------------------------------------------------------------ |
kenjiArai | 0:52c5dc2b2b68 | 403 | #if 0 |
kenjiArai | 0:52c5dc2b2b68 | 404 | //----------------------------------------------------------------------- |
kenjiArai | 0:52c5dc2b2b68 | 405 | // GuiBase とその派生クラスのデモプログラム |
kenjiArai | 0:52c5dc2b2b68 | 406 | // Demo program for GuiBase class and its derivertive classes |
kenjiArai | 0:52c5dc2b2b68 | 407 | // |
kenjiArai | 0:52c5dc2b2b68 | 408 | // GuiBase, Button, ButtonGroup, Label, NumericLabel, BlinkLabel, |
kenjiArai | 0:52c5dc2b2b68 | 409 | // SeekBar, SeekbarGroup |
kenjiArai | 0:52c5dc2b2b68 | 410 | // |
kenjiArai | 0:52c5dc2b2b68 | 411 | // 2016/11/12, Copyright (c) 2016 MIKAMI, Naoki |
kenjiArai | 0:52c5dc2b2b68 | 412 | //----------------------------------------------------------------------- |
kenjiArai | 0:52c5dc2b2b68 | 413 | |
kenjiArai | 0:52c5dc2b2b68 | 414 | #include "F746_GUI.hpp" |
kenjiArai | 0:52c5dc2b2b68 | 415 | |
kenjiArai | 0:52c5dc2b2b68 | 416 | int main() |
kenjiArai | 0:52c5dc2b2b68 | 417 | { |
kenjiArai | 0:52c5dc2b2b68 | 418 | Label obj10(240, 2, "Dome: GUI parts, 2016/07/30, 19:43", Label::CENTER, Font16); |
kenjiArai | 0:52c5dc2b2b68 | 419 | Label obj11(240, 20, "Button, ButtonGroup, Label, NumericLabel, BlinkLabel,", |
kenjiArai | 0:52c5dc2b2b68 | 420 | Label::CENTER); |
kenjiArai | 0:52c5dc2b2b68 | 421 | Label obj12(240, 32, "SeekBar, SeekbarGroup", |
kenjiArai | 0:52c5dc2b2b68 | 422 | Label::CENTER); |
kenjiArai | 0:52c5dc2b2b68 | 423 | |
kenjiArai | 0:52c5dc2b2b68 | 424 | Button button1(10, 54, 50, 40, "1"); |
kenjiArai | 0:52c5dc2b2b68 | 425 | Button button2(62, 54, 50, 40, "2"); |
kenjiArai | 0:52c5dc2b2b68 | 426 | |
kenjiArai | 0:52c5dc2b2b68 | 427 | const int NUMBER_BUTTONS = 4; |
kenjiArai | 0:52c5dc2b2b68 | 428 | const string STR1[NUMBER_BUTTONS] = {"Button1", "Button2", "Button3", "Activate"}; |
kenjiArai | 0:52c5dc2b2b68 | 429 | ButtonGroup bGroup1(160, 54, 66, 40, NUMBER_BUTTONS, STR1, 5, 5, 3, 1, |
kenjiArai | 0:52c5dc2b2b68 | 430 | Font12, LCD_COLOR_WHITE, 0xFF003538, 0xFFB70068, 0xFFFF7FFF); |
kenjiArai | 0:52c5dc2b2b68 | 431 | NumericLabel<int> bTouch(240, 112, "", Label::LEFT, Font12, LCD_COLOR_MAGENTA); |
kenjiArai | 0:52c5dc2b2b68 | 432 | |
kenjiArai | 0:52c5dc2b2b68 | 433 | // Control status of bGroup1 |
kenjiArai | 0:52c5dc2b2b68 | 434 | ButtonGroup bGroup2(160, 150, 66, 40, 3, (string[]){"0", "1", "2"}, 5, 5, 3); |
kenjiArai | 0:52c5dc2b2b68 | 435 | bGroup2.InactivateAll(); |
kenjiArai | 0:52c5dc2b2b68 | 436 | |
kenjiArai | 0:52c5dc2b2b68 | 437 | // Switching buttons to control barH active or inactive |
kenjiArai | 0:52c5dc2b2b68 | 438 | ButtonGroup bGroup3(10, 150, 66, 40, 2, (string[]){"ON", "OFF"}, 0, 0, 2); |
kenjiArai | 0:52c5dc2b2b68 | 439 | bGroup3.TouchedColor(0); |
kenjiArai | 0:52c5dc2b2b68 | 440 | |
kenjiArai | 0:52c5dc2b2b68 | 441 | Button doNotTouch(250, 220, 120, 40, "Don't Touch", Font12, |
kenjiArai | 0:52c5dc2b2b68 | 442 | GuiBase::ENUM_TEXT, GuiBase::ENUM_BACK, |
kenjiArai | 0:52c5dc2b2b68 | 443 | LCD_COLOR_DARKGREEN, LCD_COLOR_RED); |
kenjiArai | 0:52c5dc2b2b68 | 444 | |
kenjiArai | 0:52c5dc2b2b68 | 445 | // Using default value for argument (Horizontal) |
kenjiArai | 0:52c5dc2b2b68 | 446 | SeekBar barH(20, 250, 200, -5, 5, 0, "-5", "", "5"); |
kenjiArai | 0:52c5dc2b2b68 | 447 | NumericLabel<float> numLabel1(80, 205, "%5.1f", barH.GetValue()); |
kenjiArai | 0:52c5dc2b2b68 | 448 | NumericLabel<int> numLabel2(130, 205, "%3d", (int)barH.GetValue()); |
kenjiArai | 0:52c5dc2b2b68 | 449 | NumericLabel<int> numLabel3(160, 205, "%3d"); |
kenjiArai | 0:52c5dc2b2b68 | 450 | |
kenjiArai | 0:52c5dc2b2b68 | 451 | // SeekbarGroup (vertical) |
kenjiArai | 0:52c5dc2b2b68 | 452 | SeekbarGroup barV(410, 130, 121, 2, 45, -6, 6, 2, |
kenjiArai | 0:52c5dc2b2b68 | 453 | SeekBar::Vertical, 0xFFA0FFC0); |
kenjiArai | 0:52c5dc2b2b68 | 454 | NumericLabel<float> **numLabel4; |
kenjiArai | 0:52c5dc2b2b68 | 455 | numLabel4 = new NumericLabel<float> *[2]; |
kenjiArai | 0:52c5dc2b2b68 | 456 | for (int n=0; n<2; n++) numLabel4[n] = |
kenjiArai | 0:52c5dc2b2b68 | 457 | new NumericLabel<float>(410+n*45, 104, "%4.1f", barV.GetValue(n), Label::CENTER); |
kenjiArai | 0:52c5dc2b2b68 | 458 | NumericLabel<int> numLabel5(455, 92, "%1d", barV.GetIntValue(0), Label::CENTER); |
kenjiArai | 0:52c5dc2b2b68 | 459 | |
kenjiArai | 0:52c5dc2b2b68 | 460 | // Test of left-, cenrer-, and right-justified |
kenjiArai | 0:52c5dc2b2b68 | 461 | Label leftJustified(420, 54, "ABC", Label::LEFT); |
kenjiArai | 0:52c5dc2b2b68 | 462 | Label centerJustified(420, 64, "ABC", Label::CENTER); |
kenjiArai | 0:52c5dc2b2b68 | 463 | Label rightJustified1(420, 74, "ABC", Label::RIGHT); |
kenjiArai | 0:52c5dc2b2b68 | 464 | |
kenjiArai | 0:52c5dc2b2b68 | 465 | while (true) |
kenjiArai | 0:52c5dc2b2b68 | 466 | { |
kenjiArai | 0:52c5dc2b2b68 | 467 | if (button1.Touched()) button2.Draw(); |
kenjiArai | 0:52c5dc2b2b68 | 468 | if (button2.Touched()) button1.Draw(); |
kenjiArai | 0:52c5dc2b2b68 | 469 | |
kenjiArai | 0:52c5dc2b2b68 | 470 | int num; |
kenjiArai | 0:52c5dc2b2b68 | 471 | if (bGroup1.GetTouchedNumber(num)) |
kenjiArai | 0:52c5dc2b2b68 | 472 | bTouch.Draw("Button%d touched", num+1); |
kenjiArai | 0:52c5dc2b2b68 | 473 | if (num == 3) |
kenjiArai | 0:52c5dc2b2b68 | 474 | bGroup2.ActivateAll(); |
kenjiArai | 0:52c5dc2b2b68 | 475 | |
kenjiArai | 0:52c5dc2b2b68 | 476 | if (bGroup2.GetTouchedNumber(num)) |
kenjiArai | 0:52c5dc2b2b68 | 477 | switch (num) |
kenjiArai | 0:52c5dc2b2b68 | 478 | { |
kenjiArai | 0:52c5dc2b2b68 | 479 | case 0: button1.Activate(); |
kenjiArai | 0:52c5dc2b2b68 | 480 | bGroup1.Activate(1); |
kenjiArai | 0:52c5dc2b2b68 | 481 | bGroup1.DrawAll(); |
kenjiArai | 0:52c5dc2b2b68 | 482 | break; |
kenjiArai | 0:52c5dc2b2b68 | 483 | case 1: button1.Inactivate(); |
kenjiArai | 0:52c5dc2b2b68 | 484 | bGroup1.Inactivate(1); |
kenjiArai | 0:52c5dc2b2b68 | 485 | break; |
kenjiArai | 0:52c5dc2b2b68 | 486 | case 2: bGroup1.EraseAll();//for (int n=0; n<4; n++) bGroup1.Erase(n); |
kenjiArai | 0:52c5dc2b2b68 | 487 | for (int n=0; n<2; n++) |
kenjiArai | 0:52c5dc2b2b68 | 488 | { |
kenjiArai | 0:52c5dc2b2b68 | 489 | barV.Draw(n, 0); // reset seekbar |
kenjiArai | 0:52c5dc2b2b68 | 490 | numLabel4[n]->Draw("%4.1f", barV.GetValue(n)); |
kenjiArai | 0:52c5dc2b2b68 | 491 | } |
kenjiArai | 0:52c5dc2b2b68 | 492 | break; |
kenjiArai | 0:52c5dc2b2b68 | 493 | } |
kenjiArai | 0:52c5dc2b2b68 | 494 | |
kenjiArai | 0:52c5dc2b2b68 | 495 | if (barH.Slide()) |
kenjiArai | 0:52c5dc2b2b68 | 496 | { |
kenjiArai | 0:52c5dc2b2b68 | 497 | numLabel1.Draw("%5.1f", barH.GetValue()); |
kenjiArai | 0:52c5dc2b2b68 | 498 | int8_t x = (int8_t)barH.GetValue(); |
kenjiArai | 0:52c5dc2b2b68 | 499 | numLabel2.Draw("%3d", x); |
kenjiArai | 0:52c5dc2b2b68 | 500 | |
kenjiArai | 0:52c5dc2b2b68 | 501 | numLabel3.Draw(barH.GetIntValue()); |
kenjiArai | 0:52c5dc2b2b68 | 502 | } |
kenjiArai | 0:52c5dc2b2b68 | 503 | |
kenjiArai | 0:52c5dc2b2b68 | 504 | int sbNum; |
kenjiArai | 0:52c5dc2b2b68 | 505 | if (barV.GetSlidedNumber(sbNum)) |
kenjiArai | 0:52c5dc2b2b68 | 506 | { |
kenjiArai | 0:52c5dc2b2b68 | 507 | if (sbNum == 0) numLabel4[sbNum]->Draw("%4.1f", barV.GetValue(sbNum)); |
kenjiArai | 0:52c5dc2b2b68 | 508 | else numLabel4[sbNum]->Draw("%4.1f", barV.GetValue(sbNum)); |
kenjiArai | 0:52c5dc2b2b68 | 509 | if (sbNum == 1) numLabel5.Draw("%1d", barV.GetIntValue(sbNum)); |
kenjiArai | 0:52c5dc2b2b68 | 510 | } |
kenjiArai | 0:52c5dc2b2b68 | 511 | // If "doNotTouch" button touched, trapped into endless loop |
kenjiArai | 0:52c5dc2b2b68 | 512 | if (doNotTouch.Touched()) |
kenjiArai | 0:52c5dc2b2b68 | 513 | BlinkLabel warning(250, 200, "You must reset", Label::LEFT, Font16); |
kenjiArai | 0:52c5dc2b2b68 | 514 | |
kenjiArai | 0:52c5dc2b2b68 | 515 | // SeekBar active inactive switching |
kenjiArai | 0:52c5dc2b2b68 | 516 | if (bGroup3.Touched(0)) |
kenjiArai | 0:52c5dc2b2b68 | 517 | { |
kenjiArai | 0:52c5dc2b2b68 | 518 | barH.Activate(); |
kenjiArai | 0:52c5dc2b2b68 | 519 | barV.ActivateAll(); |
kenjiArai | 0:52c5dc2b2b68 | 520 | } |
kenjiArai | 0:52c5dc2b2b68 | 521 | if (bGroup3.Touched(1)) |
kenjiArai | 0:52c5dc2b2b68 | 522 | { |
kenjiArai | 0:52c5dc2b2b68 | 523 | barH.Inactivate(); |
kenjiArai | 0:52c5dc2b2b68 | 524 | barV.InactivateAll(); |
kenjiArai | 0:52c5dc2b2b68 | 525 | } |
kenjiArai | 0:52c5dc2b2b68 | 526 | |
kenjiArai | 0:52c5dc2b2b68 | 527 | wait(0.02f); |
kenjiArai | 0:52c5dc2b2b68 | 528 | } |
kenjiArai | 0:52c5dc2b2b68 | 529 | } |
kenjiArai | 0:52c5dc2b2b68 | 530 | |
kenjiArai | 0:52c5dc2b2b68 | 531 | #endif |
kenjiArai | 0:52c5dc2b2b68 | 532 |