//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void PulsesCountScreen::doDraw(TFTMenu* menu)
{
  UTFT* dc = menu->getDC();
  uint8_t* oldFont = dc->getFont();

  dc->setFont(BigRusFont);
  dc->setColor(VGA_WHITE);

  menu->print("ПАРАМЕТРЫ",130,2);
  menu->print("СИСТОЛИЧЕСКОЕ  ", 1, 37);
  menu->print("ДИАСТОЛИЧЕСКОЕ ", 1, 72);
  menu->print("ЧАСТОТА ПУЛЬСА", 1, 107);
  menu->print("ПАЛЬПАЦИЯ", 1, 142);


  if (channel4PulsesVal.toInt() == 0)
  {
	  screenButtons->relabelButton(channel4Button, "ОТКЛ");
  }
  else
  {
	  screenButtons->relabelButton(channel4Button, "ВКЛ");
  }
  screenButtons->drawButton(channel4Button);
  
  dc->setFont(oldFont);
}
void ECCalibrateScreen::SdrawScreen()
{
	myUTFT.clrScr();
	myUTFT.setBackColor(0, 0, 255);

	myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_BLACK, VGA_RED, VGA_BLUE);

	myButtons.addButton( 10, 10, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);
	myButtons.addButton( 160, 10, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);
	myButtons.addButton( 10, 64, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);
	myButtons.addButton( 160, 64, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);
	myButtons.addButton( 10, 116, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);
	myButtons.addButton( 160, 116, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);
	myButtons.addButton( 10, 170, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);
	myButtons.addButton( 160, 170, MAIN_BUTTON_X, MAIN_BUTTON_Y, mainButton);

	myButtons.drawButtons();

	//Add text to buttons.
	myUTFT.setBackColor (161,190,237);
	myUTFT.print("Reset", 55, 30);
	myUTFT.print("Info", 190, 30);
	myUTFT.print("Read", 55, 90);
	myUTFT.print("TRead", 190, 90);
	myUTFT.print("Stop", 55, 146);
	myUTFT.print("Start", 190, 146);
	myUTFT.print("Back", 55, 195);
	myUTFT.print("Calibrate", 185, 195);
}
Beispiel #3
0
void License::render(UTFT tft) {
	tft.clrScr();
	tft.setFont(SmallFont);
	_tft = tft;
	_index = _offset = 0;
	update();
}
Beispiel #4
0
// Draw a spot and wait until the user touches it, returning the touch coordinates in tx and ty.
// The alternative X and Y locations are so that the caller can allow for the touch panel being possibly inverted.
void DoTouchCalib(PixelNumber x, PixelNumber y, PixelNumber altX, PixelNumber altY, bool wantY, uint16_t& rawRslt)
{
	const PixelNumber touchCircleRadius = 8;
	const PixelNumber touchCalibMaxError = 40;
	
	lcd.setColor(touchSpotColour);
	lcd.fillCircle(x, y, touchCircleRadius);
	
	for (;;)
	{
		uint16_t tx, ty, rawX, rawY;
		if (touch.read(tx, ty, &rawX, &rawY))
		{
			if (   (abs((int)tx - (int)x) <= touchCalibMaxError || abs((int)tx - (int)altX) <= touchCalibMaxError)
				&& (abs((int)ty - (int)y) <= touchCalibMaxError || abs((int)ty - (int)altY) <= touchCalibMaxError)
			   ) 
			{
				TouchBeep();
				rawRslt = (wantY) ? rawY : rawX;
				break;
			}
		}
	}
	
	lcd.setColor(defaultBackColour);
	lcd.fillCircle(x, y, touchCircleRadius);
}
void ECCalibrateScreen::endCalibration()
{
	myUTFT.fillScr(VGA_BLUE);
	myUTFT.setColor(VGA_RED);
	myUTFT.fillRoundRect(80, 70, 239, 169);

	myUTFT.setColor(VGA_WHITE);
	myUTFT.setBackColor(VGA_RED);
	myUTFT.print("! All Done !", CENTER, 93);
	myUTFT.print("Touch Screen", CENTER, 119);
	myUTFT.print("To Exit", CENTER, 132);

	SwaitForTouch();
	myUTFT.clrScr();

	myUTFT.setFont(BigFont);

	myButtons.enableButton( /*resetButton*/ 0);
	myButtons.enableButton( /*infoButton*/ 1);
	myButtons.enableButton( /*readButton*/ 2);
	myButtons.enableButton( /*tempReadButton*/ 3);
	myButtons.enableButton( /*stopButton*/ 4);
	myButtons.enableButton( /*startButton*/ 5);
	myButtons.enableButton( /*backButton*/6);
	myButtons.enableButton( /*calibrateButton*/7);

	SdrawScreen();

}
Beispiel #6
0
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Screen1_0::doDraw(TFTMenu* menu)
{
  UTFT* dc = menu->getDC();
  dc->setColor(VGA_WHITE);
  dc->setBackColor(VGA_BLACK);
  dc->setFont(TFT_FONT);
  
  // тут рисуем, что надо именно нам, кнопки прорисуются сами после того, как мы тут всё отрисуем
  menu->print("Настройки", 50, 0);
}
void PlugScreen::drawScreen(  )
{
	//Clear What was there.
	 myUTFT.clrScr();

	 resetButtons();
	 myUTFT.setBackColor (0, 0, 0);
	 myUTFT.print("Plug Setup", CENTER, 1);
	 myUTFT.setBackColor(0, 0, 255);

	 //Draw Lights button
	 lightsButton = myButtons.addButton( 10, 54, 145, 53, mainButton);
	 myButtons.drawButton(lightsButton);
	 myUTFT.print("Lights", 35, 71);

	 heaterButton = myButtons.addButton( 10, 110, 145, 53, mainButton);
	 myButtons.drawButton(heaterButton);
	 myUTFT.print("Heater", 35, 135);


	 pumpButton = myButtons.addButton( 160, 54, 145, 53, mainButton);
	 myButtons.drawButton(pumpButton);
	 myUTFT.print("Pump", 190, 71);

	 settingsButton = myButtons.addButton( 160, 110, 145, 53, mainButton);
	 myButtons.drawButton(settingsButton);
	 myUTFT.print("Override", 175, 135);

	 //Draw back button
	 back2SetupButton = myButtons.addButton( 10, 170, 145, 53, mainButton);
	 myButtons.drawButton(back2SetupButton);
	 myUTFT.print("Back", 55, 195);

}
Beispiel #8
0
void InitLcd(DisplayOrientation dor, uint8_t language)
{
	lcd.InitLCD(dor);					// set up the LCD
	Fields::CreateFields(language);		// create all the fields
	mgr.RefreshAll(true);				// redraw everything

	currentTab = NULL;
}
/*
 * Delivering this instruction will instruct the E.C. Circuit to transmit it device info.
	Full proper syntax: i<cr> or I<CR>
	The E.C. Circuit will respond: E,V3.0,4/11<CR>
	Where:
	E =E.C. Circuit
	V3.1= Firmware version
	5/13= Date firmware was written
 */
void ECCalibrateScreen::getInfo()
{
	inputstring = "I\r";  //Command to get info
	Serial3.print(inputstring); //send command to sensor.

	//Draw part of the screen here and the info when we have it.
	//info comes after the loop has iterated.
	myUTFT.clrScr();
	resetButtons();
	//Draw back button
	subBackButton = myButtons.addButton( 10, 168, 145, 53, mainButton);
	myButtons.drawButton(subBackButton);
	myUTFT.setBackColor (161,190,237);
	myUTFT.print("Back", 45, 185);

	waiting_for_info = true;

}
void ECCalibrateScreen::getTempSingleReading()
{
	inputstring = ( waterTempString + "\r");  //"17.8\r"Command to get reading.
	Serial3.print(inputstring); //send command to sensor.
	delay(1000); //This takes 1000ms to complete.

	//Draw part of the screen here and the info when we have it.
	//info comes after the loop has iterated.
	myUTFT.clrScr();
	resetButtons();
	//Draw back button
	subBackButton = myButtons.addButton( 10, 168, 145, 53, mainButton);
	myButtons.drawButton(subBackButton);
	myUTFT.setBackColor (161,190,237);
	myUTFT.print("Back", 45, 185);

	waiting_for_single_reading = true;

}
Beispiel #11
0
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Screen1::doUpdate(TFTMenu* menu)
{
    // тут обновляем внутреннее состояние
	if (isActive())
	{
		DS3231Time tm = RealtimeClock.getTime();
		if (oldsecond != tm.second)
		{
			oldsecond = tm.second;
			UTFT* dc = menu->getDC();
			dc->setColor(VGA_WHITE);
			dc->setBackColor(VGA_BLACK);
			// получаем компоненты даты в виде строк
			String strDate = RealtimeClock.getDateStr(tm);
			String strTime = RealtimeClock.getTimeStr(tm);
			dc->setFont(SmallRusFont);
			// печатаем их
			dc->print(strDate, 5, 305);
			dc->print(strTime, 160, 305);
															//dc->printNumF(setupPin.power3V3, 1, 195, 1);    //
															//dc->printNumF(setupPin.power5V0, 1, 195, 15);   //
															//dc->printNumI(setupPin.power200, 195, 30);      //
		}
	}
}
Beispiel #12
0
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Screen1::doDraw(TFTMenu* menu)
{
  UTFT* dc = menu->getDC();
  dc->setColor(VGA_WHITE);
  dc->setBackColor(VGA_BLACK);
  dc->setFont(TFT_FONT);
  // тут рисуем, что надо именно нам, кнопки прорисуются сами после того, как мы тут всё отрисуем
  menu->print("Главный экран", 15, 0);
  
  //// выводим число
  //dc->setColor(VGA_BLUE);
  //int number = 12345;
  //dc->printNumI(number, 20,200);

  //dc->setFont(SmallSymbolFont);
  //// выводим спецсимвол
  //dc->printChar(47,20,250);

  // возвращает шрифт по умолчанию
  dc->setFont(TFT_FONT); 
  /*RealXBeeMenu.XBee_status();
  delay(300);*/
  }
Beispiel #13
0
void Mixer::render(UTFT tft) {
	tft.clrScr();

	tft.setColor(255, 255, 255);
	tft.fillRect(0, 0, tft.getDisplayXSize() - 1, 12);
	tft.setBackColor(255, 255, 255);
	tft.setColor(0, 0, 0);
	tft.setFont(SmallFont);
	tft.print("Mixer", 10, 0);

	_tft = tft;
	for(byte x=0;x<3; x++) {
		renderedGains[x] = 0;
		renderMute(x);
	}
	update();
}
Beispiel #14
0
void Draw::drawAPicture(pos x, pos y, short int width, short int height,
	char tp[], short int color)
{
	char temp;
	int x0 = x;
	myGLCD.setColor(color);
	int wid = width / 8;
	//将二进制中为一的表示为该点位亮。
	//将tp[]中的数据依次点亮屏幕。
	for (int i = 0; i < height; i++){

		for (int j = 0; j < width; j++){

			if (j % 8 == 0)temp = tp[i*wid + j / 8];
			if (temp & 0x80){
				myGLCD.drawPixel(x0, y);
			}
			temp <<= 1;
			x0++;
		}
		x0 = x;
		y++;
	}
}
void ECCalibrateScreen::begin()
{

	// Initial setup
	myUTFT.InitLCD();
	myUTFT.clrScr();

	myTouch.InitTouch();
	myTouch.setPrecision(PREC_MEDIUM);

	myUTFT.setFont(BigFont);
	myUTFT.setBackColor(0, 0, 255);
	myButtons.setTextFont(BigFont);

	resetButtons();

	sensorstring = "";
	sensorstring.reserve(30); //set aside some bytes for receiving data
	inputstring = "";

	waiting_for_info = false;
	waiting_for_single_reading = false;
	sensor_stringcomplete = false;
	factReset = false;
	inStopMode = false;
	waiting_for_dry = false;

	Serial3.begin(38400); //To communicate with the sensor.

	Serial.begin(115200);

	//Start Read straight away.
	inputstring = ( waterTempString + ",C\r");  //Start based on temp.
	Serial3.print(inputstring); //send command to sensor.

}
Beispiel #16
0
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void SoundLevelScreen::doDraw(TFTMenu* menu)
{
	UTFT* dc = menu->getDC();
	dc->setColor(VGA_WHITE);
	uint8_t* oldFont = dc->getFont();

	dc->setFont(BigRusFont);
	dc->setBackColor(VGA_BLACK);

	// тут рисуем, что надо именно нам, кнопки прорисуются сами после того, как мы тут всё отрисуем
	menu->print("УРОВЕНЬ ЗВУКА", 105, 10);
	dc->setFont(oldFont);
}
void ECCalibrateScreen::drawStoppingScreen()
{
	myUTFT.clrScr();
	resetButtons();

	myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_BLACK, VGA_RED, VGA_BLACK);

	myUTFT.setBackColor (VGA_BLACK);
	myUTFT.print("EC STOPPED", CENTER, 1);

	myUTFT.print("All EC Readings", CENTER, 30);
	myUTFT.print("Now Stopped", CENTER, 54);
	myUTFT.print("Sensor Standby", CENTER, 78);

	//Draw back button
	subBackButton = myButtons.addButton( 10, 168, 145, 53, mainButton);
	myButtons.drawButton(subBackButton);
	myUTFT.setBackColor (161,190,237);
	myUTFT.print("Back", 45, 185);
}
void ECCalibrateScreen::startCalibration()
{

	myButtons.disableButton( resetButton );
	myButtons.disableButton( infoButton );
	myButtons.disableButton( readButton );
	myButtons.disableButton( tempReadButton );
	myButtons.disableButton( stopButton );
	myButtons.disableButton( startButton );
	myButtons.disableButton( backButton);
	myButtons.disableButton( calibrateButton);

	inputstring = "P,1\r";  //In Hydroponics we use always E.C Sensor 0.1 -- Fresh Water
	Serial3.print(inputstring); //send command to sensor.

	myUTFT.setFont(SmallFont);
	dryCalibration();
	highCalibration();

}
void drawDryScreen()
{
	String version = sensorstring.substring(3,6);
	String date = sensorstring.substring(7,11);
	sensorstring="";

	//resetButtons();
	myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_BLACK, VGA_RED, VGA_BLACK);
	//Indicate that we have changed screens.


	myUTFT.setBackColor (VGA_BLACK);
	myUTFT.print("EC HW Info", CENTER, 1);

	myUTFT.print("Sensor Version", CENTER, 30);
	myUTFT.print(version, CENTER, 54);
	myUTFT.print("Firmware Date", CENTER, 78);
	myUTFT.print(date, CENTER, 102);

}
//Static so can be used with the callback.
void drawReadingScreen()
{
	String EC = sensorstring.substring(0,3);
	String TDS = sensorstring.substring(4,6);
	String SAL = sensorstring.substring(7,8);
	sensorstring="";

	//resetButtons();
	myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_BLACK, VGA_RED, VGA_BLACK);
	//Indicate that we have changed screens.


	myUTFT.setBackColor (VGA_BLACK);
	myUTFT.print("EC Get Reading", CENTER, 1);

	myUTFT.print("EC Level", CENTER, 30);
	myUTFT.print(EC, CENTER, 54);
	myUTFT.print("TDS Level", CENTER, 78);
	myUTFT.print(TDS, CENTER, 102);
	myUTFT.print(SAL, CENTER, 126);

}
void ECCalibrateScreen::updateLowWaitScreen()
{
	iSeconds = iSeconds - 3;
	String thisString = String(iSeconds);
	myUTFT.clrScr();
	myUTFT.print("Calibration in Progress", CENTER, 30);
	myUTFT.print("Seconds left until ready " + thisString, CENTER, 42);


	switch(iCounter){

	case 0:
		Serial.println("PRINT 0");
		myUTFT.print("************************************", CENTER, 114);
		iCounter = 1;
		break;
	case 1:
		Serial.println("PRINT 1");
		myUTFT.print("******************", CENTER, 114);
		iCounter = 2;
		break;
	case 2:
		Serial.println("PRINT 2");
		myUTFT.print("*****", CENTER, 114);
		iCounter = 0;
		break;

	}

   if(iSeconds == 0){
	   iSeconds = max_seconds_for_calibration;
	   //Move to next stage.
	   endCalibration();
   }



}
void ECCalibrateScreen::lowCalibration()
{
	myUTFT.clrScr();
	myUTFT.setColor(255, 0, 0);
	myUTFT.fillRect(0, 0, 220, 13);
	myUTFT.setColor(255, 255, 255);
	myUTFT.setBackColor(255, 0, 0);
	myUTFT.drawLine(0, 14, 320, 14);
	myUTFT.print("EC Calibration", CENTER, 1);
	myUTFT.setBackColor(0, 0, 0);

	myUTFT.print("Calibrate now with the low side liquid", LEFT, 30);
	myUTFT.print("Place the sensor in the 220Us", LEFT, 42);
	myUTFT.print("calibration liquid.  This process", LEFT, 54);
	myUTFT.print("will take 5 mins to complete", LEFT, 66);
	myUTFT.print("Wait for process to finish before ", LEFT, 78);
	myUTFT.print("removing the sensor from the liquid", LEFT, 90);
	myUTFT.print("", LEFT, 102);
	myUTFT.print("************************************", LEFT, 114);
	myUTFT.print("Touch screen to continue", CENTER, 162);

	SwaitForTouch();
	myUTFT.clrScr();

	inputstring = "C\r";  //set in continious mode

	String thisSt = String(12);
	myUTFT.print("Calibration in Progress", CENTER, 30);
	myUTFT.print("Seconds left until ready " + thisSt, CENTER, 42);
	simpleTimer.setTimer(3000, updateLowWaitScreen, /*100*/ 4); //Update screen every 3 seconds for 5 minues.


	//delay(2000);  //Wait 2 seconds -- make 5mins
	//Serial3.print(inputstring); //send command to sensor.
	//inputstring = "Z2\r";  //set the sensor at this value.
	//Serial3.print(inputstring); //need to send twice??


}
void PlugScreen::waitForReceiver(NewRemoteCode receivedCode)
{
	//Clear What was there.
	myUTFT.setFont(SmallFont);
	myUTFT.clrScr();
	myUTFT.setColor(255, 0, 0);
	myUTFT.fillRect(0, 0, 220, 13);
	myUTFT.setColor(255, 255, 255);
	myUTFT.setBackColor(255, 0, 0);
	myUTFT.drawLine(0, 14, 320, 14);
	myUTFT.print("ID Set", CENTER, 1);
	myUTFT.setBackColor(0, 0, 0);

	setAddresstoEEPROM(receivedCode.address);
	if(plugDevice.lights)
	{
		EEPROM.write(EEPROM_LEARNED_LIGHTS_UNIT,receivedCode.unit);
		plugDevice.lights = false;
	}
	if(plugDevice.pump)
	{
		EEPROM.write(EEPROM_LEARNED_PUMP_UNIT,receivedCode.unit);
		plugDevice.pump = false;
	}
	if(plugDevice.heater)
	{
		EEPROM.write(EEPROM_LEARNED_HEATER_UNIT,receivedCode.unit);
		plugDevice.heater = false;
	}

	//unsigned long add = getAddress();
	String sAddress(receivedCode.address);
	String slightID(receivedCode.unit);

	myUTFT.print("The unit has been set to unit ", LEFT, 30);
	myUTFT.print(slightID, LEFT, 42);
	myUTFT.print("The Transmitting Address is", LEFT, 54);
	myUTFT.print(sAddress, LEFT, 66);
	myUTFT.print("You can now use the plug", LEFT, 78);
	myUTFT.print("**********************************", LEFT, 90);

	myButtons.deleteAllButtons();
	exitButton = -1;

	exitButton = myButtons.addButton( 10, 170, 145, 53, mainButton);
	myButtons.drawButton(exitButton);
	myUTFT.setBackColor (161,190,237);
	myUTFT.print("Back", 55, 195);
	myUTFT.setFont(BigFont);

}
Beispiel #24
0
void Draw::drawARect(pos x0, pos y0, pos x1, pos y1, short int color)
{
	myGLCD.setColor(color);
	myGLCD.drawRect(x0, y0, x1, y1);
}
void  PlugScreen::drawPrepareScreen()
{
	Serial.println("PlugScreen::handlePlugScreen SET LIGHTS ID  \n");
	myUTFT.setFont(SmallFont);
	myUTFT.clrScr();
	myUTFT.setColor(255, 0, 0);
	myUTFT.fillRect(0, 0, 220, 13);
	myUTFT.setColor(255, 255, 255);
	myUTFT.setBackColor(255, 0, 0);
	myUTFT.drawLine(0, 14, 320, 14);
	myUTFT.print("Plug Setting", CENTER, 1);
	myUTFT.setBackColor(0, 0, 0);

	myUTFT.print("Use the remote that came with your", LEFT, 30);
	myUTFT.print("plugs to set which unit and address it", LEFT, 42);
	myUTFT.print("uses.Just point the remote at the screen", LEFT, 54);
	myUTFT.print("and press a button for the unit you want", LEFT, 66);
	myUTFT.print("to use for the lights", LEFT, 78);
	myUTFT.print("", LEFT, 90);
	myUTFT.print("Please press a unit for the lights", LEFT, 102);
	myUTFT.print("", LEFT, 114);

	exitButton = myButtons.addButton( 10, 170, 145, 53, mainButton);
	myButtons.drawButton(exitButton);
	myUTFT.setBackColor (161,190,237);
	myUTFT.print("Cancel", 55, 195);
	myUTFT.setFont(BigFont);
}
Beispiel #26
0
void Draw::fillARect(pos x0, pos y0, pos x1, pos y1, short int color)
{
	myGLCD.setColor(color);
	myGLCD.fillRect(x0, y0, x1, y1);
}
Beispiel #27
0
//将整个屏幕清空。
void Draw::cleanScreen()
{
	myGLCD.clrScr();
}
void ECCalibrateScreen::dryCalibration()
{

	myUTFT.clrScr();
	myUTFT.setColor(255, 0, 0);
	myUTFT.fillRect(0, 0, 220, 13);
	myUTFT.setColor(255, 255, 255);
	myUTFT.setBackColor(255, 0, 0);
	myUTFT.drawLine(0, 14, 320, 14);
	myUTFT.print("EC Calibration", CENTER, 1);
	myUTFT.setBackColor(0, 0, 0);

	myUTFT.print("Do NOT put sensor in any Liquid you are", LEFT, 30);
	myUTFT.print("going to calibrate for a dry condition", LEFT, 42);
	myUTFT.print("This is much like setting a TARE on a", LEFT, 54);
	myUTFT.print("scale", LEFT, 66);
	myUTFT.print("", LEFT, 78);
	myUTFT.print("Please make sure that the EC sensor is", LEFT, 90);
	myUTFT.print("connected to the BNC connector before", LEFT, 102);
	myUTFT.print("you continue", LEFT, 114);
	//myUTFT.print("crosshairs in sequence.", LEFT, 126);
	myUTFT.print("Touch screen to continue", CENTER, 162);

	waitForTouch();
	myUTFT.clrScr();

	inputstring = "Z0\r";  //Command to get info
	Serial3.print(inputstring); //send command to sensor.

}
Beispiel #29
0
void Keyboard::render(UTFT tft) {
    tft.clrScr();
    tft.setFont(BigFont);

    tft.setBackColor(255, 255, 255);
    tft.setColor(255, 255, 255);
    tft.drawRoundRect(30, 30, tft.getDisplayXSize() - 111, 70);
    tft.fillRect(tft.getDisplayXSize() - 106, 30, tft.getDisplayXSize() - 66, 70);
    tft.setColor(0, 0, 0);
    tft.print("<-", tft.getDisplayXSize() - 102, 43);
    tft.setColor(255, 255, 255);
    tft.fillRect(tft.getDisplayXSize() - 61, 30, tft.getDisplayXSize() - 21, 70);
    tft.setColor(0, 0, 0);
    tft.print("OK", tft.getDisplayXSize() - 57, 43);

    byte br = 9,
         nl = 0,
         offset = 1;

    int x = offset,
        y = 120;

    for(byte j=0; j<numKeys; j++) {
        tft.setColor(255, 255, 255);
        tft.fillRect(x, y, x + 30, y + 30);
        tft.setColor(0, 0, 0);
        String str = "";
        str += keys[j]; //lame!
        tft.print(str, x + 7, y + 8);
        x += 32;
        nl++;
        if(nl > br) {
            offset += 15;
            x = offset;
            nl = 0;
            y += 32;
            br -= 1;
        }
    }

    _tft = tft;
}
void ECCalibrateScreen::highCalibration()
{
	myUTFT.clrScr();
	myUTFT.setColor(255, 0, 0);
	myUTFT.fillRect(0, 0, 220, 13);
	myUTFT.setColor(255, 255, 255);
	myUTFT.setBackColor(255, 0, 0);
	myUTFT.drawLine(0, 14, 320, 14);
	myUTFT.print("EC Calibration", CENTER, 1);
	myUTFT.setBackColor(0, 0, 0);

	myUTFT.print("Calibrate now with the high side liquid", LEFT, 30);
	myUTFT.print("Place the sensor in the 3,000Us ", LEFT, 42);
	myUTFT.print("calibration liquid. This process", LEFT, 54);
	myUTFT.print("will take 5 minutes to complete", LEFT, 66);
	myUTFT.print("Wait for process to finish before ", LEFT, 78);
	myUTFT.print("removing the sensor from the liquid", LEFT, 90);
	myUTFT.print("", LEFT, 102);
	myUTFT.print("************************************", LEFT, 114);
	myUTFT.print("Touch screen to continue", CENTER, 162);

	waitForTouch();
	myUTFT.clrScr();

	inputstring = "C\r";  //set in continious mode

	myUTFT.clrScr();
	String thisSt = String(iSeconds);
	myUTFT.print("Calibration in Progress", CENTER, 30);
	myUTFT.print("Seconds left until ready " + thisSt, CENTER, 42);
	simpleTimer.setTimer(3000, updateWaitScreen, /*100*/ 4); //Update screen every 3 seconds for 5 minues.

}