Проблема с выводом изображения на LCD ST7920

Тема в разделе "Arduino & Shields", создана пользователем Beginer, 6 июн 2018.

  1. Beginer

    Beginer Нуб

    Доброго времени суток всем.

    Есть простенькая задача: по изменению счетчика перерисовывать на экране изображение.
    Однако, не выходит. Рисует один закрашенный прямоугольник и все.
    Или у меня логика не правильная, или что - то я не понимаю, как экран работает.
    Подскажите, в чем косяк?
    Код (C++):
    #include "U8glib.h"
    U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE);
    void setup()
    {
    Serial.begin(9600);
    }
    void loop()
    {
    u8g.firstPage();
    do
    {
    u8g.setColorIndex(1);
    //---- Рамка----
    u8g.drawFrame(0, 0, 128, 64);
    //---- Конец рамки ----
    for(int i=0; i<=1; i++)
    {
    if(i==0)
    {
    u8g.drawFrame(10,10,30,20);
    Serial.print("i1=");Serial.println(i);
    delay(3000);
    i=i+1;
    }
    else(i==1);
    {
    u8g.drawBox(10,10,30,20);
    Serial.print("i2=");Serial.println(i);
    delay(3000);
    }
    }
    }
    while (u8g.nextPage());
    }
     
    Последнее редактирование: 6 июн 2018
  2. Daniil

    Daniil Гуру

    Код целиком скопирован? Уберите его в теги, чтобы он был оформлен по-нормальному.
    Разве так оно работает? без фигурных скобок?((
    А что делает хитрая комбинация цикла for и if с переменной i?
     
  3. b707

    b707 Гуру

    афтар, код не компилируется, поэтому про то, что он "закрашивает квадратик" - вы врете.
    Что касается кода - цикл ФОР это праздник какой-то... большей бессмыслицы не видал.
     
  4. Beginer

    Beginer Нуб

    Естественно, Вы правы.
    Скобки стер случайно, пока вычищал мусор из кода.
    Поправлю.

    Нужна циклическая смена изображения. С прямоугольника на закрашенный прямоугольник. Изображение принято чисто для примера.
     
  5. Daniil

    Daniil Гуру

    а цикл фор?
     
  6. DIYMan

    DIYMan Guest

    А мы никогда не читаем документацию, ни к чему - это такая национальная забава, похоже. Ясно ведь сказано вот тут: https://github.com/olikraus/u8glib/wiki/tpictureloop и вот тут: https://github.com/olikraus/u8glib/wiki/thelloworld

    Переведу: у вас неправильно сделан picture loop, никаких delay там быть не должно и не может, всё, что должно быть в picture loop - это отрисовка того, что должно быть на экране В ДАННЫЙ момент времени. Вызывать перерисовку экрана надо не постоянно, а ТОЛЬКО ТОГДА, когда информация к представлению на экране изменилась, иначе МК будет только и занят одним тупым делом - перерисовкой экрана.

    Совет: возьмите пример Hello word из поставки u8glib - и вникайте.
     
  7. b707

    b707 Гуру

    вы смену с "прямоугольника на закрашенный прямоугольник" не в цикле FOR делаете случаем? - если да, то оно работать не будет, у вас в цикле фор совершенная бредятина намешана
     
  8. parovoZZ

    parovoZZ Гуру

    Используя готовые библиотеки никогда не поймешь.
     
  9. b707

    b707 Гуру

    DIYMan, не в этом дело :) Человек элементарно вообще не знает Си. Он простейших конструкций не в состоянии правильно написать. Присмотрись. что у него в цикле...Первый прямоугольник рисуется, в второй нет
     
    DIYMan нравится это.
  10. Daniil

    Daniil Гуру

    кажется, что ТС хотел elseif использовать.
     
  11. b707

    b707 Гуру

    да фиг знает, что он хотел. У него сначала FOR, в него вложены совершенно лишние IF-ы. а как розочка на торте - еще и двойное индексирование переменной.
    Такое впечатление, что писали трое, и все под мухой :)
     
  12. DIYMan

    DIYMan Guest

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

    И даже если бы там с циклом for было всё в порядке - код бы не работал, т.к. "отрисовка" двух прямоугольников идёт в одной итерации цикла picture loop. Как итог - будет ВСЕГДА отрисован второй прямоугольник, и похрен на delay.
     
  13. DIYMan

    DIYMan Guest

    В C/C++ нет ключевого слова elseif - тут вам не Паскаль ;)
     
  14. b707

    b707 Гуру

    Ок, до этого я не добрался :)
    В том коде, что сейчас - будет ВСЕГДА отрисован ТОЛЬКО первый :)))
     
  15. Beginer

    Beginer Нуб

    Вы, Уважаемый, не хамите, а вчитайтесь в ник внимательно. Не все тут гуру и информатику с молоком матери впитали.
    Да не знаю я Си. Поэтому и спрашиваю в чем не прав.
     
  16. Beginer

    Beginer Нуб

    Спасибо. Где - то логику понял. Сейчас попробую разобраться.
     
  17. Beginer

    Beginer Нуб

    Спасибо. Опыт удался.
     
  18. b707

    b707 Гуру

    Статус начинающего вовсе не означает, что с вами тут будут вальсы танцевать и постесняются ткнуть носом в глупые ошибки.
     
    parovoZZ нравится это.
  19. Beginer

    Beginer Нуб

    Не спорю. Но и говорить, что вру Вам тоже не следовало. Что видел, то пел.
    В итоге, в контексте моего вопроса, задача решена.
     
  20. parovoZZ

    parovoZZ Гуру

    Любая программа, любой код - это АЛГОРИТМ. Если алгоритма в ГОЛОВЕ НЕТ или на бумаге, то и браться за код БЕССМЫСЛЕННО.
     
    Daniil нравится это.