Вывод float на OLED

ifkbhit
Offline
Зарегистрирован: 24.04.2017

Здравствуйте, пытаюсь вывести на экран текущее напряжение каждые 600мсек. При выводе раз через раз символы печатаются один поверх другого. При этом, если выводит просто значение millis(), то проблемы нет, проблема возникает только при выводе значений с плавающей точкой. Вот код: 

#include <U8glib.h>
#define CYCLE_TIME 600

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST);
unsigned long long current;
double cnt = 0;

void setup(void){   
}

float readVcc(){
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  ADCSRA |= _BV(ADSC);
  while (bit_is_set(ADCSRA, ADSC)); 
  uint8_t low = ADCL; 
  uint8_t high = ADCH; 
  float result = (high<<8) | low;
  result = (1.1 * 1023.0 * 1000) / result; 
  return result;
}

void u8g_prepare(void) {
  u8g.setFont(u8g_font_6x10);
  /*u8g.setFontRefHeightExtendedText();
  u8g.setDefaultForegroundColor();
  u8g.setFontPosTop();*/
}


void draw() {
  u8g_prepare();
  u8g.setPrintPos(0, 20);
  //String doubleStr = String(readVcc());
  
  float currentVolt = readVcc();
  u8g.print(currentVolt);
}
void loop(void) {
  if(millis() - current > CYCLE_TIME){
    current = millis();
    u8g.firstPage();  
      do {
        draw();
      } while( u8g.nextPage() );
  }
}

Что можно сделать, что бы исправить это? Arduino Nano v3, OLED 0.91 I2C, U8Glib 1.19.1

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

ifkbhit пишет:

Что можно сделать, что бы исправить это? 

хорошенько подумать, почему так происходит

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

Потом еще разок. Пароль: "швабра".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

хорошенько подумать, почему так происходит

При этом внимательно глядя на экран.

Желательно увичить интервал хоть до секунды (или больше), чтобы успевать что-то разглядеть.