Treehouse Mbed Team / Mbed 2 deprecated 1U5_proto_X

Dependencies:   mbed

Committer:
Slord2142
Date:
Tue Dec 06 18:47:01 2022 +0000
Revision:
1:bc3509459a27
Parent:
0:b3410a1e9843
Helix commit 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Slord2142 0:b3410a1e9843 1 //-------------------------------------------------------------------------------
Slord2142 0:b3410a1e9843 2 //
Slord2142 0:b3410a1e9843 3 // Treehouse Inc.
Slord2142 0:b3410a1e9843 4 // Colorado Springs, Colorado
Slord2142 0:b3410a1e9843 5 //
Slord2142 0:b3410a1e9843 6 // Copyright (c) 2016 by Treehouse Designs Inc.
Slord2142 0:b3410a1e9843 7 //
Slord2142 0:b3410a1e9843 8 // This code is the property of Treehouse, Inc. (Treehouse) and may not be redistributed
Slord2142 0:b3410a1e9843 9 // in any form without prior written permission from the copyright holder, Treehouse.
Slord2142 0:b3410a1e9843 10 //
Slord2142 0:b3410a1e9843 11 // The above copyright notice and this permission notice shall be included in
Slord2142 0:b3410a1e9843 12 // all copies or substantial portions of the Software.
Slord2142 0:b3410a1e9843 13 //
Slord2142 0:b3410a1e9843 14 //-------------------------------------------------------------------------------
Slord2142 0:b3410a1e9843 15 //
Slord2142 0:b3410a1e9843 16 // REVISION HISTORY:
Slord2142 0:b3410a1e9843 17 //
Slord2142 0:b3410a1e9843 18 // $Author: $
Slord2142 0:b3410a1e9843 19 // $Rev: $
Slord2142 0:b3410a1e9843 20 // $Date: $
Slord2142 0:b3410a1e9843 21 // $URL: $
Slord2142 0:b3410a1e9843 22 //
Slord2142 0:b3410a1e9843 23 //-------------------------------------------------------------------------------
Slord2142 0:b3410a1e9843 24
Slord2142 0:b3410a1e9843 25 #include "mbed.h"
Slord2142 0:b3410a1e9843 26 #include "globals.h"
Slord2142 0:b3410a1e9843 27 #include "serial.h"
Slord2142 0:b3410a1e9843 28 #include "menu.h"
Slord2142 0:b3410a1e9843 29 #include "adc.h"
Slord2142 0:b3410a1e9843 30 #include "boards.h"
Slord2142 0:b3410a1e9843 31 #include "Ticker.h"
Slord2142 0:b3410a1e9843 32 #include "stdlib.h"
Slord2142 0:b3410a1e9843 33 #include "lut.h"
Slord2142 0:b3410a1e9843 34 #include "temp.h"
Slord2142 1:bc3509459a27 35 #include "clocks.h"
Slord2142 0:b3410a1e9843 36
Slord2142 0:b3410a1e9843 37 Ticker drt;
Slord2142 0:b3410a1e9843 38 unsigned int oldTime=0;
Slord2142 0:b3410a1e9843 39
Slord2142 0:b3410a1e9843 40 /*******************************************************************************
Slord2142 0:b3410a1e9843 41 drtInt - Display Refresh Timer interrupt handler
Slord2142 0:b3410a1e9843 42 *******************************************************************************/
Slord2142 0:b3410a1e9843 43 // real time clock interrupt to flash the LED
Slord2142 0:b3410a1e9843 44 void drtInt(void)
Slord2142 0:b3410a1e9843 45 {
Slord2142 0:b3410a1e9843 46 updateReady = TRUE;
Slord2142 0:b3410a1e9843 47 }
Slord2142 0:b3410a1e9843 48
Slord2142 0:b3410a1e9843 49 /*******************************************************************************
Slord2142 0:b3410a1e9843 50 initDRT - Create Display Refresh Timer interrupt
Slord2142 0:b3410a1e9843 51 *******************************************************************************/
Slord2142 0:b3410a1e9843 52 // initialize display refresh timer (DRT)
Slord2142 0:b3410a1e9843 53 void initDRT(void)
Slord2142 0:b3410a1e9843 54 {
Slord2142 0:b3410a1e9843 55 drt.attach_us(&drtInt, UPDATE_REFRESH_DELAY_US);
Slord2142 0:b3410a1e9843 56 }
Slord2142 0:b3410a1e9843 57
Slord2142 0:b3410a1e9843 58 /*******************************************************************************
Slord2142 0:b3410a1e9843 59 refreshStatus - Refresh status info to the terminal
Slord2142 0:b3410a1e9843 60 *******************************************************************************/
Slord2142 0:b3410a1e9843 61 void refreshStatus(struct statusValues statVals){
Slord2142 0:b3410a1e9843 62
Slord2142 0:b3410a1e9843 63 char strbuf_mode[15] = {0};
Slord2142 0:b3410a1e9843 64 char strbuf_running[16] = {0};
Slord2142 0:b3410a1e9843 65 char strbuf_v48[15] = {0};
Slord2142 0:b3410a1e9843 66 char strbuf_v24[15] = {0};
Slord2142 0:b3410a1e9843 67 char strbuf_v12[15] = {0};
Slord2142 0:b3410a1e9843 68 char strbuf_blank[50] = {0};
Slord2142 0:b3410a1e9843 69
Slord2142 0:b3410a1e9843 70 if(buck){
Slord2142 0:b3410a1e9843 71 sprintf(strbuf_mode, "Buck Mode | ");
Slord2142 0:b3410a1e9843 72 }else{
Slord2142 0:b3410a1e9843 73 sprintf(strbuf_mode, "Boost Mode | ");
Slord2142 0:b3410a1e9843 74 }
Slord2142 0:b3410a1e9843 75 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 76
Slord2142 0:b3410a1e9843 77 if(running){
Slord2142 0:b3410a1e9843 78 sprintf(strbuf_running, "Running | ");
Slord2142 0:b3410a1e9843 79 }else{
Slord2142 0:b3410a1e9843 80 sprintf(strbuf_running, "NOT Running | ");
Slord2142 0:b3410a1e9843 81 }
Slord2142 0:b3410a1e9843 82 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 83
Slord2142 0:b3410a1e9843 84 if(statVals.V48_IS_HI){
Slord2142 0:b3410a1e9843 85 sprintf(strbuf_v48, "V48 HIGH | ");
Slord2142 0:b3410a1e9843 86 }else if(statVals.V48_IS_LO){
Slord2142 0:b3410a1e9843 87 sprintf(strbuf_v48, "V48 LOW | ");
Slord2142 0:b3410a1e9843 88 }else{
Slord2142 0:b3410a1e9843 89 // sprintf(strbuf, "V48 OK | ");
Slord2142 0:b3410a1e9843 90 sprintf(strbuf_v48, "");
Slord2142 0:b3410a1e9843 91 sprintf(strbuf_blank, " ");
Slord2142 0:b3410a1e9843 92 }
Slord2142 0:b3410a1e9843 93 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 94 /*
Slord2142 0:b3410a1e9843 95 if(statVals.V24_IS_HI){
Slord2142 0:b3410a1e9843 96 sprintf(strbuf_v24, "V24 HIGH | ");
Slord2142 0:b3410a1e9843 97 }else if(statVals.V24_IS_LO){
Slord2142 0:b3410a1e9843 98 sprintf(strbuf_v24, "V24 LOW | ");
Slord2142 0:b3410a1e9843 99 }else{
Slord2142 0:b3410a1e9843 100 // sprintf(strbuf, "V24 OK | ");
Slord2142 0:b3410a1e9843 101 sprintf(strbuf_v24, "");
Slord2142 0:b3410a1e9843 102 sprintf(strbuf_blank, strcat(strbuf_blank, " "));
Slord2142 0:b3410a1e9843 103 }
Slord2142 0:b3410a1e9843 104 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 105
Slord2142 0:b3410a1e9843 106 if(statVals.V12_IS_HI){
Slord2142 0:b3410a1e9843 107 sprintf(strbuf_v12, "V12 HIGH ");
Slord2142 0:b3410a1e9843 108 }else if(statVals.V24_IS_LO){
Slord2142 0:b3410a1e9843 109 sprintf(strbuf_v12, "V12 LOW ");
Slord2142 0:b3410a1e9843 110 }else{
Slord2142 0:b3410a1e9843 111 // sprintf(strbuf, "V12 OK | ");
Slord2142 0:b3410a1e9843 112 sprintf(strbuf_v12, "");
Slord2142 0:b3410a1e9843 113 sprintf(strbuf_blank, strcat(strbuf_blank, " "));
Slord2142 0:b3410a1e9843 114 }*/
Slord2142 0:b3410a1e9843 115 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 116
Slord2142 0:b3410a1e9843 117 //move cursor to STATUS_ROW and write status info
Slord2142 0:b3410a1e9843 118 //char row = STATUS_ROW + '0';
Slord2142 0:b3410a1e9843 119 sprintf( strbuf, "%c[9;0f", 27); // ESC=27, Move cursor position = [line;columnf
Slord2142 0:b3410a1e9843 120 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 121
Slord2142 0:b3410a1e9843 122 sprintf(strbuf, "Status: %s%s%s%s%s%s\r\n\r\n", strbuf_mode, strbuf_running, strbuf_v48, strbuf_v24, strbuf_v12, strbuf_blank);
Slord2142 0:b3410a1e9843 123 //sprintf(strbuf, "Status: %s%s%s%s%s%d \r\n\r\n", strbuf_mode, strbuf_running, strbuf_v48, strbuf_v24, strbuf_v12, row_print);
Slord2142 0:b3410a1e9843 124 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 125
Slord2142 0:b3410a1e9843 126 }
Slord2142 0:b3410a1e9843 127
Slord2142 0:b3410a1e9843 128 /*******************************************************************************
Slord2142 0:b3410a1e9843 129 refreshData - Refresh voltage and current readings to the terminal
Slord2142 0:b3410a1e9843 130 *******************************************************************************/
Slord2142 0:b3410a1e9843 131 void refreshData(struct adcValues adcVals){
Slord2142 0:b3410a1e9843 132 //loopTime = masterTimer.read_ms() - oldTime;
Slord2142 0:b3410a1e9843 133 //oldTime = masterTimer.read_ms();
Slord2142 0:b3410a1e9843 134
Slord2142 0:b3410a1e9843 135 struct displayValues dvals = calcDisplayValues(adcVals);
Slord2142 0:b3410a1e9843 136
Slord2142 1:bc3509459a27 137 //double pwr_out=dvals.v12f*dvals.i12f;
Slord2142 0:b3410a1e9843 138 //double pwr_in=dvals.v48f*(dvals.i48f);
Slord2142 0:b3410a1e9843 139 //double pwr_eff=100*pwr_out/pwr_in;
Slord2142 0:b3410a1e9843 140
Slord2142 0:b3410a1e9843 141 //move cursor to DATA_ROW and write data
Slord2142 0:b3410a1e9843 142 //row = DATA_ROW + '0';
Slord2142 0:b3410a1e9843 143 sprintf( strbuf, "%c[10;0f", 27); // ESC=27, Move cursor position = [line;columnf
Slord2142 0:b3410a1e9843 144 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 145 float temp_reading = GetTemperature();
Slord2142 0:b3410a1e9843 146
Slord2142 0:b3410a1e9843 147 sprintf(strbuf, "V48=%2.1f | V12=%2.1f, I12=%3.2f | Temp=%f | Test=%2.1f \r\n", dvals.v48f, dvals.v12f, dvals.i12f, temp_reading, dvals.test_v);
Slord2142 0:b3410a1e9843 148 //sprintf(strbuf, "V48=%2.1f, I48=%2.2f | V24=%2.1f, I24=%2.2f | V12=%2.1f, I12=%2.2f || loop=%d \r\n", v48f, i48f, v24f, i24f, v12f, i12f, loopTime);
Slord2142 0:b3410a1e9843 149 sendSerial(strbuf);
Slord2142 1:bc3509459a27 150 sprintf(strbuf, "NumOn=%d \r\n", numOn);
Slord2142 1:bc3509459a27 151 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 152 //sprintf(strbuf, "adcVals.i12 = %d \r\n", adcVals.i12);
Slord2142 0:b3410a1e9843 153 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 154 //sprintf(strbuf, "Power Out = %4.1f W, Power In = %4.1f W \r\n", pwr_out, pwr_in);
Slord2142 0:b3410a1e9843 155 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 156 sprintf( strbuf, "%c[34m", 27 ); // ESC=27, Blue Text
Slord2142 0:b3410a1e9843 157 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 158 //sprintf(strbuf, "Power Efficiency = %2.2f percent \r\n\r\n", pwr_eff);
Slord2142 0:b3410a1e9843 159 //sendSerial(strbuf);
Slord2142 0:b3410a1e9843 160 sprintf( strbuf, "%c[30m", 27 ); // ESC=27, White Text
Slord2142 0:b3410a1e9843 161 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 162 sprintf(strbuf, "BRDS_code=%d, MULT_code=%d \r\n", wr_out_code, en_out_code);
Slord2142 0:b3410a1e9843 163 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 164 }
Slord2142 0:b3410a1e9843 165
Slord2142 0:b3410a1e9843 166 /*******************************************************************************
Slord2142 0:b3410a1e9843 167 updateTerminal - Save cursor, write data, restore cursor.
Slord2142 0:b3410a1e9843 168 *******************************************************************************/
Slord2142 0:b3410a1e9843 169 void updateTerminal(struct adcValues adcVals, struct statusValues statVals){
Slord2142 0:b3410a1e9843 170 //get cursor pos, store in CUR_POS
Slord2142 0:b3410a1e9843 171 sprintf( strbuf, "%c7", 27 ); // ESC=27, Save cursor position = [s
Slord2142 0:b3410a1e9843 172 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 173
Slord2142 0:b3410a1e9843 174 refreshStatus(statVals);
Slord2142 0:b3410a1e9843 175 refreshData(adcVals);
Slord2142 0:b3410a1e9843 176
Slord2142 0:b3410a1e9843 177 //move cursor to CUR_POS
Slord2142 0:b3410a1e9843 178 sprintf( strbuf, "%c8", 27 ); // ESC=27, Save cursor position = [s
Slord2142 0:b3410a1e9843 179 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 180 }
Slord2142 0:b3410a1e9843 181
Slord2142 0:b3410a1e9843 182 /*******************************************************************************
Slord2142 0:b3410a1e9843 183 clrScrn - clears terminal and moves cursor to upper-left corner
Slord2142 0:b3410a1e9843 184 *******************************************************************************/
Slord2142 0:b3410a1e9843 185 // clears terminal
Slord2142 0:b3410a1e9843 186 void clrScrn(void){
Slord2142 0:b3410a1e9843 187 sprintf( strbuf, "%c[2J", 27 ); // ESC=27, Clear screen = [2J
Slord2142 0:b3410a1e9843 188 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 189 sprintf( strbuf, "%c[f", 27 ); // ESC=27, Move cursor to upper-left corner = [f
Slord2142 0:b3410a1e9843 190 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 191 }
Slord2142 0:b3410a1e9843 192
Slord2142 0:b3410a1e9843 193 /*******************************************************************************
Slord2142 0:b3410a1e9843 194 menuRedraw - Write menu to terminal
Slord2142 0:b3410a1e9843 195 *******************************************************************************/
Slord2142 0:b3410a1e9843 196 // clears terminal and re-draws main menu
Slord2142 0:b3410a1e9843 197 void menuRedraw(bool prompt){
Slord2142 0:b3410a1e9843 198 clrScrn();
Slord2142 0:b3410a1e9843 199 menu_banner();
Slord2142 0:b3410a1e9843 200
Slord2142 0:b3410a1e9843 201 sprintf( strbuf, "%c[34m", 27 ); // ESC=27, Blue Text
Slord2142 0:b3410a1e9843 202 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 203
Slord2142 0:b3410a1e9843 204 sprintf(strbuf, " Agility Power Systems DCM1 v1.0 LUT v%1.1f\r\n\r\n", LUT_VER);
Slord2142 0:b3410a1e9843 205 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 206
Slord2142 0:b3410a1e9843 207 sprintf( strbuf, "%c[0m", 27 ); // ESC=27, Normal
Slord2142 0:b3410a1e9843 208 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 209 sprintf( strbuf, "%c[30m", 27 ); // ESC=27, Black Text
Slord2142 0:b3410a1e9843 210 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 211
Slord2142 0:b3410a1e9843 212 struct adcValues adcVals = getADCresults();
Slord2142 0:b3410a1e9843 213 struct statusValues statVals = checkLevels(adcVals);
Slord2142 0:b3410a1e9843 214 refreshStatus(statVals);
Slord2142 0:b3410a1e9843 215 refreshData(adcVals);
Slord2142 0:b3410a1e9843 216
Slord2142 0:b3410a1e9843 217 sprintf(strbuf, "\r\nCommands: (Not Case-Sensitive)");
Slord2142 0:b3410a1e9843 218 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 219 sprintf(strbuf, "\r\n MENU");
Slord2142 0:b3410a1e9843 220 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 221 sprintf(strbuf, "\r\n BRDS");
Slord2142 0:b3410a1e9843 222 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 223 sprintf(strbuf, "\r\n MULT");
Slord2142 0:b3410a1e9843 224 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 225 sprintf(strbuf, "\r\n ALLOFF");
Slord2142 0:b3410a1e9843 226 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 227 sprintf(strbuf, "\r\n RUN");
Slord2142 0:b3410a1e9843 228 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 229 sprintf(strbuf, "\r\n STOP\r\n");
Slord2142 0:b3410a1e9843 230 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 231 sprintf(strbuf, "\r\n Type \'=number\' after BRDS or MULT to enter value.");
Slord2142 0:b3410a1e9843 232 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 233 sprintf(strbuf, "\r\n e.g. BRDS=4095 will enable all boards.\r\n");
Slord2142 0:b3410a1e9843 234 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 235 sprintf(strbuf, "\r\n Type \'?\' at end of BRDS or MULT to get status.");
Slord2142 0:b3410a1e9843 236 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 237 sprintf(strbuf, "\r\n e.g. BRDS? will print value of BRDS.\r\n");
Slord2142 0:b3410a1e9843 238 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 239
Slord2142 0:b3410a1e9843 240 if(prompt){
Slord2142 0:b3410a1e9843 241 menuPrompt(MENU_DCM1);
Slord2142 0:b3410a1e9843 242 }
Slord2142 0:b3410a1e9843 243 }
Slord2142 0:b3410a1e9843 244
Slord2142 0:b3410a1e9843 245 /*******************************************************************************
Slord2142 0:b3410a1e9843 246 sendLevelsWarning
Slord2142 0:b3410a1e9843 247 *******************************************************************************/
Slord2142 0:b3410a1e9843 248 void sendLevelsWarning(void){
Slord2142 0:b3410a1e9843 249 sprintf(strbuf, "\r\nSome voltage levels are out of range. I would look into it if I were you.\r\n");
Slord2142 0:b3410a1e9843 250 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 251 }
Slord2142 0:b3410a1e9843 252
Slord2142 0:b3410a1e9843 253 /*******************************************************************************
Slord2142 0:b3410a1e9843 254 menuPrompt - Write menu prompt to terminal
Slord2142 0:b3410a1e9843 255 *******************************************************************************/
Slord2142 0:b3410a1e9843 256 // sends carriage return and linefeed and prompt character
Slord2142 0:b3410a1e9843 257 void menuPrompt(int menuType)
Slord2142 0:b3410a1e9843 258 {
Slord2142 0:b3410a1e9843 259 char strMenu[30] ={0};
Slord2142 0:b3410a1e9843 260
Slord2142 0:b3410a1e9843 261 switch(menuType)
Slord2142 0:b3410a1e9843 262 {
Slord2142 0:b3410a1e9843 263 case MENU_DCM1: strcpy(strMenu,"DCM1"); break;
Slord2142 0:b3410a1e9843 264 case MENU_CALIBRATE: strcpy(strMenu,"CAL"); break;
Slord2142 0:b3410a1e9843 265 case MENU_TEST: strcpy(strMenu,"TEST"); break;
Slord2142 0:b3410a1e9843 266 case MENU_MAIN: strcpy(strMenu,"MAIN"); break;
Slord2142 0:b3410a1e9843 267 default: strcpy(strMenu,"UNDF"); break;
Slord2142 0:b3410a1e9843 268 }
Slord2142 0:b3410a1e9843 269
Slord2142 0:b3410a1e9843 270 // append the CR,LF and the ready character
Slord2142 0:b3410a1e9843 271 if(serialStatus.computer)
Slord2142 0:b3410a1e9843 272 {
Slord2142 0:b3410a1e9843 273 sendSerial("\r");
Slord2142 0:b3410a1e9843 274 }
Slord2142 0:b3410a1e9843 275 else
Slord2142 0:b3410a1e9843 276 {
Slord2142 0:b3410a1e9843 277 // adds a carrot so you know you are talking in terminal
Slord2142 0:b3410a1e9843 278 sprintf(strbuf,"\n\r%s>",strMenu);
Slord2142 0:b3410a1e9843 279 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 280 // sendSerial("\n\r>");
Slord2142 0:b3410a1e9843 281 }
Slord2142 0:b3410a1e9843 282 }
Slord2142 0:b3410a1e9843 283
Slord2142 0:b3410a1e9843 284 void menu_banner(void)
Slord2142 0:b3410a1e9843 285 {
Slord2142 0:b3410a1e9843 286 clrScrn();
Slord2142 0:b3410a1e9843 287 sprintf( strbuf, "%c[30m", 27 ); // ESC=27, Black Text
Slord2142 0:b3410a1e9843 288 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 289 sprintf(strbuf," ___ _ ___ __ ____ _____ __ \r\n");sendSerial(strbuf);
Slord2142 0:b3410a1e9843 290 sprintf(strbuf," / | ____ _(_) (_) /___ __ / __ \\____ _ _____ _____ / ___/__ _______/ /____ ____ ___ _____\r\n");sendSerial(strbuf);
Slord2142 0:b3410a1e9843 291 sprintf(strbuf," / /| |/ __ `/ / / / __/ / / / / /_/ / __ \\ | /| / / _ \\/ ___/ \\__ \\/ / / / ___/ __/ _ \\/ __ `__ \\/ ___/\r\n");sendSerial(strbuf);
Slord2142 0:b3410a1e9843 292 sprintf(strbuf," / ___ / /_/ / / / / /_/ /_/ / / ____/ /_/ / |/ |/ / __/ / ___/ / /_/ (__ ) /_/ __/ / / / / (__ ) \r\n");sendSerial(strbuf);
Slord2142 0:b3410a1e9843 293 sprintf(strbuf,"/_/ |_\\__, /_/_/_/\\__/\\__, / /_/ \\____/|__/|__/\\___/_/ /____/\\__, /____/\\__/\\___/_/ /_/ /_/____/ \r\n");sendSerial(strbuf);
Slord2142 0:b3410a1e9843 294 sprintf(strbuf," /____/ /____/ /____/ \r\n");sendSerial(strbuf);
Slord2142 0:b3410a1e9843 295 }
Slord2142 0:b3410a1e9843 296 /*
Slord2142 0:b3410a1e9843 297 sprintf(strbuf," ___ _ ___ __ ____ _____ __ \r\n");
Slord2142 0:b3410a1e9843 298 sprintf(strbuf," / | ____ _(_) (_) /___ __ / __ \____ _ _____ _____ / ___/__ _______/ /____ ____ ___ _____\r\n");
Slord2142 0:b3410a1e9843 299 sprintf(strbuf," / /| |/ __ `/ / / / __/ / / / / /_/ / __ \ | /| / / _ \/ ___/ \__ \/ / / / ___/ __/ _ \/ __ `__ \/ ___/\r\n");
Slord2142 0:b3410a1e9843 300 sprintf(strbuf," / ___ / /_/ / / / / /_/ /_/ / / ____/ /_/ / |/ |/ / __/ / ___/ / /_/ (__ ) /_/ __/ / / / / (__ ) \r\n");
Slord2142 0:b3410a1e9843 301 sprintf(strbuf,"/_/ |_\__, /_/_/_/\__/\__, / /_/ \____/|__/|__/\___/_/ /____/\__, /____/\__/\___/_/ /_/ /_/____/ \r\n");
Slord2142 0:b3410a1e9843 302 sprintf(strbuf," /____/ /____/ /____/ \r\n");
Slord2142 0:b3410a1e9843 303 */