0 голосов

Всем здравствуйте! Хочу сделать термометр (использую аналоговый термометр Troyka-модуль) на основе Iskra Nano Pro с выводом графика температуры на OLED дисплей, и чтобы когда он доходил до конца экрана начинался сначала. Но столкнулся с проблемой: график не выводится, точнее выводится только первый пиксель.

С чем это может быть связано? Скажите, пожалуйста.

Заранее спасибо!

Вот код:

#define WIDTH  128
#define HEIGHT 64

#include <TroykaThermometer.h>
TroykaThermometer thermometer(A0);

#include <TroykaOLED.h>
TroykaOLED myOLED(0x3C);

void setup() {
    myOLED.begin();
    myOLED.setCoding(TXT_UTF8);
    myOLED.setFont(fontRus6x8);  
}

void loop() {
    uint8_t   x       = 0;
    int8_t     y       = map(thermometer.getTemperatureC()/100, -20, 40, HEIGHT, 56);
  
    uint32_t timer = 0;
  
    thermometer.read();


    myOLED.print("Температура", 0, 0);
    myOLED.print(thermometer.getTemperatureC(), 70, 0);
    myOLED.print("С", 102, 0);

    if(millis()-timer>1000) {
        myOLED.drawPixel(x, y);
    }
    if(x<=WIDTH) x++;
    else x = 0;
    timer = millis();
}

(57 баллов) 1 8 13
исправил

1 Ответ

0 голосов

У вас переменная x каждый раз объявляется в функции loop. Скорее всего она должна быть глобальной.

uint8_t   x = 0;

Для повышения читаемости и инерпретируемости кода добавьте () и {}

if(x<=WIDTH)
{ 
x++;
    }
else{ 
x = 0;
}
    timer = millis();

Кстати эта конструкция у вас выполняется постоянно. Как я понял, она должна выполняться раз секунду. Для этого она должна быть в том же условии, что функция отрисовки. 

if(millis()-timer>1000) {
        myOLED.drawPixel(x, y);
    
    if(x<=WIDTH) {x++;
    }else{ x = 0;}

    timer = millis();
}

(3.1 тыс. баллов) 14 20 41
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.

    За этот месяц ещё никого.

    ...