u8glib и ssd1306
- Войдите на сайт для отправки комментариев
Пт, 06/01/2017 - 20:35
Решил сделать вольтметр))
Взял библиотеку 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);
}


А Вы попробуйте для начала эти значения просто в сериал выводить. Посмотрите как они меняются, подумайте какой фильтр поставить, а потом уж на экран будете рисовать.
Я удивился, если бы оно не менялось, цифруете, умножаете на число с плавающей точкой, выводите до двух отображаемых значений ))) естественно знаки после запятой будут мерцающими...да и выводить два знака после запятой бессмысленно, сейчас Вам Евгений Петрович расскажет почему там и так будет только два знака (при умножении int на float)
Все дело было в том что изображение выводится кластерами, и в после вывода первого кластера, значение меняется, и следующий кластер выводится с уже другим значением. Проблема решается перебросом данных в переменную перед циклом вывода, тогда значение будет постоянным пока не обновится экран.
Там не одна проблема, скорее всего скетч приведён не тот, что используется
1023*0,0049 = 5,0127 А на дисплее более 6 )))