Наложение значения переменной самой на себя на экране

ergeykl
Offline
Зарегистрирован: 20.04.2017

Всем привет!

Есть esp8266, стандартный дисплей LCD 2004 и датчики ds18b20. Есть необходимость произвести расчет формулой:

int U = 0;                      // Коэффициент смешения (расчетный)
byte G1 = 2;                    // Расход на подаче
byte G2;                    // Расход на обратке (расчетный)
byte G3;                    // Расход после смешения (расчетный)



void setup(void){

///////////////////////////////РАСЧЕТ УЗЛА СМЕШЕНИЯ//////////////////////////////////////////
  HRE3Value = 0;                 // После старта контроллера заслонка принимает положение
                                 // при котором сторона А полностью закрыта.

/////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////DS18B20//////////////////////////////////////////////////
 ds.begin();            //включаем DS18B20
/////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////ДИСПЛЕЙ 1602 I2C//////////////////////////////////////////////

  lcd.createChar(0, gradus);      // Подключаем знак градуса
  lcd.createChar(1, vlazhnost);   // Подключаем знак влажности
  lcd.createChar(2, tnv);         // Подключаем знак градуса
  lcd.createChar(3, battery);     // Подключаем знак батарейки




  lcd.begin();
  lcd.backlight();                           // Включаем подсветку



  lcd.setCursor(2,0);
  lcd.print("MAIN SETTINGS CO");

  lcd.setCursor(0,1);                        // Ячейка 1 строка 2
  lcd.print(char(2));lcd.print("=");
  lcd.setCursor(0,2);                        // Ячейка 1 строка 3
  lcd.print("T1=");
  lcd.setCursor(0,3);                        // Ячейка 1 строка 4
  lcd.print("T2=");
  
  lcd.setCursor(11,1);                       // Ячейка 12 строка 2
  lcd.print(char(1));lcd.print("=");
  lcd.setCursor(11,2);                       // Ячейка 12 строка 3
  lcd.print("T3=");
  lcd.setCursor(11,3);                       // Ячейка 12 строка 4
  lcd.print("T4=");

  lcd.clear();
  
/////////////////////////////////////////////////////////////////////////////////////////////


  }



void loop(void){



/////////////////////////////////////////////////////////////////////////////////////////////
T1 = ds.getTempC(Temp1);                       // Датчик температуры Т1 (подача ЦО)
T2 = ds.getTempC(Temp2);                       // Датчик температуры Т2 (обратка ЦО)
T3 = ds.getTempC(Temp3);                       // Датчик температуры Т3 (подача ЦО ТП)
T4 = ds.getTempC(Temp4);                       // Датчик температуры Т4 (обратка ЦО ТП)
T7 = ds.getTempC(Temp7);                       // Датчик температуры Т7 (подача ГВС)
T13 = ds.getTempC(Temp13);                     // Датчик температуры Т13 (обратка ГВС)
/////////////////////////////////////////////////////////////////////////////////////////////




U = ( T1 - T3 ) / ( T3 - T4 );    // Расчет коэффициента смешения

  if ( G1 == 0 )                    // Необходимо указать расход G1
      {
  // Надпись "Необходимо указать значение расхода G1"
    G2 = 0;                         // Если расход G1 не введен, то расчет не ведётся
    G3 = 0;
      }
  else
        {
  G3 = ( G1 * ( 1 + U ) );          // Расчет расхода G3
  G2 = (( G3 * U ) / ( 1 + U ));    // Расчет расхода G2
        }
}


Смысл в том, что при выводе значения U - (коэф смешения) на экране LCD2004, после значения 100, при уменьшении коэффициента, отображается 990, (остаются нули) и так далее - 950, 500, а в конце 000.

Вопрос, как сделать так, чтобы после трехзначного значения и двухзначного, пропадали "призрачные" нули?

ПС. Код не полный, повыдёргивал его из основного массива.

sadman41
Offline
Зарегистрирован: 19.10.2016

Допечатывать два пробела следом.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

делать постоянную ширину поля, например, 4 и выравнивать вывод вправо.  sprintf() справица. 

bwn
Offline
Зарегистрирован: 25.08.2014

Перед выводом делать:
lcd.setCursor(x,x);
lcd.print("   ");
В принципе вариант №1, но с другой стороны. Хотя лишний оператор добавляется.(((( Пичалька.