u8glib и ssd1306

Alex_405
Offline
Зарегистрирован: 20.11.2016

Решил сделать вольтметр))

Взял библиотеку u8glib загрузил тестовый скетч, все работает. Добавил аналоговый пин, и вывел значение с АЦП, но показывает как то странно, будто занные меняются в процессе прорисовки.

 


#include "U8glib.h"


U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);	// Fast I2C / TWI 

float pix=0;
float pil=0.0049;
int anp = 0;
int ink=0;


void draw(void) {


    u8g.setFont(u8g_font_fur20);
  pix = analogRead(anp);
     u8g.setPrintPos( 0, 42);
    u8g.print(pix*pil,2);

    u8g.setFont(u8g_font_7x14);
    u8g.setPrintPos( 0, 62);
    u8g.print(ink);
    ink=ink+1;
}

void setup(void) {
  // flip screen, if required
  // u8g.setRot180();
}

void loop(void) {
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  //delay(500);
}

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

А Вы попробуйте для начала эти значения просто в сериал выводить. Посмотрите как они меняются, подумайте какой фильтр поставить, а потом уж на экран будете рисовать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Я удивился, если бы оно не менялось, цифруете, умножаете на число с плавающей точкой, выводите до двух отображаемых значений ))) естественно знаки после запятой будут мерцающими...да и выводить два знака после запятой бессмысленно, сейчас Вам Евгений Петрович расскажет почему там и так будет только два знака (при умножении int на float)

Alex_405
Offline
Зарегистрирован: 20.11.2016

Все дело было в том что изображение выводится кластерами, и в после вывода первого кластера, значение меняется, и следующий кластер выводится с уже другим значением. Проблема решается перебросом данных в переменную перед циклом вывода, тогда значение будет постоянным пока не обновится экран.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Там не одна проблема, скорее всего скетч приведён не тот, что используется
1023*0,0049 = 5,0127 А на дисплее более 6 )))