Matrix 8x8
- Войдите на сайт для отправки комментариев
Чт, 05/01/2017 - 19:20
Добрый день.
Хочу сделать бегущую стрелку на одной матрице 8x8, чтоб одна ещё не закончилась а вторая уже начиналась с инервалом в 2 пикселя. Пока только одна стрелка бежит, а дальше не соображу. Прдскажите пожалуста.
#include "LedControlMS.h" LedControl lc=LedControl(12,11,10,1); unsigned long delaytime=300; byte star[8]={B00010000,B00010000,B01010100,B00111000,B00010000}; void setup() { lc.shutdown(0,false); lc.setIntensity(0,10); lc.clearDisplay(0); } void scrollRight(byte arr[]){ for (int scroll =-4; scroll<8; scroll++) { for (int i=0; i<6;i++) { if (scroll+i<8) lc.setColumn(0, scroll+i, arr[i]); } delay(200); lc.clearDisplay(0); } } void loop() { scrollRight(star); }
Длина стрелки? Видимо, шесть пикселей? Так сделайте одну стрелку, а матрицу "сверните" в тор. Как раз так и будет - нос стрелки заехал за край матрицы и тут же появился с другой стороны (она же тор!) с интервалом в два пискеля.
Евгений, как понять "сверните в тор"?
Ну, Вы знаете что такое тор? Это такая штука типа бублика.
Давайте начнём с более простого.
Итак - у Вас бумага, рабитая на ячейки. Номера ячеек с 0 по 7. На бумаге горизонтально расположен червяк длиной 6 ячеек. Его хвост в ячейке 0, а голова - в ячейке 5. За один шаг он проползает одну ячейку.
После первого шага: хвост в ячейке 1, голова - в ячейке 6
После второго шага: хвост в ячейке 2, голова - в ячейке 7
После третьего шага: хвост в ячейке 3, голова -сползла с листа, т.к. ячейка 7 была последней
Теперь, возьмём этот лист и склеим его трубкой так, чтобы после ячеёки 7 снова шла ячейка 0. Червяк у нас ползёт поперёк трубки, а не вдоль, конечно. Что теперь с червяком?
После первого шага: хвост в ячейке 1, голова - в ячейке 6
После второго шага: хвост в ячейке 2, голова - в ячейке 7
После третьего шага: хвост в ячейке 3, голова в ячейке 0
После четвёртого шага: хвост в ячейке 4, голова в ячейке 1
После пятого шага: хвост в ячейке 5, голова в ячейке 2
После шестого шага: хвост в ячейке 6, голова в ячейке 3
Понятно? Если нет, продолжим завтра, мне убегать надо.
Блок схема как бы понятна, но как закодить? Я думал так, когда переменая Scroll==6, начять рисовать с ячейки 0. Но как зто "Заторить"?Надо ещё подсказку ))).
Ну, есть 100500 способов, например, ну, не знаю.
Давайте пока считать что ползает только горизонтально справа налевоо. Изначально червяка Вы нарисовать сумеете? Вот нарисовали. Запомнили в двух переменных координаты головы и хвоста. пусть изначально Xg = 5, а Xh = 0.
На каждом шаге нужно определеить новую координату головы и хвоста. Вот, смотрите.
Xg = (Xg + 1) % 8; // Вычисляем новую координату головы
НарисоватьТочку(Xg); // Рисуем голову
Стереть(Xh); // стираем хвост
Xh = (Xh + 1) % 8; // Вычисляем новую координату хвоста
Делай(100):
Собственно, всё. Вот это хозяйство пихаете в loop, а в setupe рисуете начального червя и задаёте начальные значения переменным.
Спасибо, вот так заработало.
Головоломка продолжается. Хочу эффект "змейка по спирали", в конце первой строки ещё хвост, а голова начинается в второй строке. Пока только так. Дайте пожалуста совет.