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 )))