Доброго времени суток всем. Есть простенькая задача: по изменению счетчика перерисовывать на экране изображение. Однако, не выходит. Рисует один закрашенный прямоугольник и все. Или у меня логика не правильная, или что - то я не понимаю, как экран работает. Подскажите, в чем косяк? Код (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()); }
Код целиком скопирован? Уберите его в теги, чтобы он был оформлен по-нормальному. Разве так оно работает? без фигурных скобок?(( А что делает хитрая комбинация цикла for и if с переменной i?
афтар, код не компилируется, поэтому про то, что он "закрашивает квадратик" - вы врете. Что касается кода - цикл ФОР это праздник какой-то... большей бессмыслицы не видал.
Естественно, Вы правы. Скобки стер случайно, пока вычищал мусор из кода. Поправлю. Нужна циклическая смена изображения. С прямоугольника на закрашенный прямоугольник. Изображение принято чисто для примера.
А мы никогда не читаем документацию, ни к чему - это такая национальная забава, похоже. Ясно ведь сказано вот тут: https://github.com/olikraus/u8glib/wiki/tpictureloop и вот тут: https://github.com/olikraus/u8glib/wiki/thelloworld Переведу: у вас неправильно сделан picture loop, никаких delay там быть не должно и не может, всё, что должно быть в picture loop - это отрисовка того, что должно быть на экране В ДАННЫЙ момент времени. Вызывать перерисовку экрана надо не постоянно, а ТОЛЬКО ТОГДА, когда информация к представлению на экране изменилась, иначе МК будет только и занят одним тупым делом - перерисовкой экрана. Совет: возьмите пример Hello word из поставки u8glib - и вникайте.
вы смену с "прямоугольника на закрашенный прямоугольник" не в цикле FOR делаете случаем? - если да, то оно работать не будет, у вас в цикле фор совершенная бредятина намешана
DIYMan, не в этом дело Человек элементарно вообще не знает Си. Он простейших конструкций не в состоянии правильно написать. Присмотрись. что у него в цикле...Первый прямоугольник рисуется, в второй нет
да фиг знает, что он хотел. У него сначала FOR, в него вложены совершенно лишние IF-ы. а как розочка на торте - еще и двойное индексирование переменной. Такое впечатление, что писали трое, и все под мухой
Да это я увидел, просто написал в дополнение, т.к. про ту дичь было уже сказано. И даже если бы там с циклом for было всё в порядке - код бы не работал, т.к. "отрисовка" двух прямоугольников идёт в одной итерации цикла picture loop. Как итог - будет ВСЕГДА отрисован второй прямоугольник, и похрен на delay.
Вы, Уважаемый, не хамите, а вчитайтесь в ник внимательно. Не все тут гуру и информатику с молоком матери впитали. Да не знаю я Си. Поэтому и спрашиваю в чем не прав.
Статус начинающего вовсе не означает, что с вами тут будут вальсы танцевать и постесняются ткнуть носом в глупые ошибки.
Не спорю. Но и говорить, что вру Вам тоже не следовало. Что видел, то пел. В итоге, в контексте моего вопроса, задача решена.
Любая программа, любой код - это АЛГОРИТМ. Если алгоритма в ГОЛОВЕ НЕТ или на бумаге, то и браться за код БЕССМЫСЛЕННО.