Обсуждаем контроллеры компании Atmel.
Ответить

Светодиодная змейка

Ср июл 18, 2018 20:25:44

Доброго времени суток! Требуется помощь в реализации змейки, не знаю в каком направлении двигаться. Есть матрица из светодиодов 4х8 нужно чтоб по её периметру зажигались светодиоды. Как бы бегающая змейка по периметру. Надеюсь на помощь! :roll: :?
Вложения
8R6Haw2FkUc.jpg
(66.35 KiB) Скачиваний: 575

Re: Светодиодная змейка

Ср июл 18, 2018 21:21:46

Какой конкретно помощи ожидаете от форумчан ?

Re: Светодиодная змейка

Чт июл 19, 2018 05:34:47

В лоб: составляете таблицу из "кадров" и по таймеру выводите.
Не в лоб: конечный автомат, массив состояния всех светодиодов, задаёте начальное состояние, сдвиг, пока не дойдёт, задаёте следующее состояние, опять сдвиг.
На каком языке пишете программы?

Re: Светодиодная змейка

Чт июл 19, 2018 07:46:18

Пишу на AVR Си. Немножко не понял про конечный автомат. Вот допустим пошла змейка по первому порту 0х00000111, 0х000001110, 0х00011100 ... 0х11100000 вот она дошла до низу дальше должна по сути повернуть вправо, как видно по таблице требуется задействовать сразу несколько портов а не один. В дальнейшем нужно будет ещё кнопки приделать , одна кнопка ускоряет другая замедляет третья меняет направление.

Re: Светодиодная змейка

Чт июл 19, 2018 08:44:51

абстрагируйтесь от байтов, представьте себе ваш "экранчик", как двумерный массив точек.
напишите функцию, которая этот двумерный массив выведет на реальные порты/светодиоды (вот в ней надо будет мозговать с битами и портами).
также создайте функцию, которая рисует точку в этом массиве (в ней тоже придется с битами и байтами мудрить, для 32 точек можно и без битов, только байтами обойтись).
а потом работайте только с массивом при помощи этой функции: нарисовали в массиве змейку по точкам в массиве - вызвали функцию вывода - проанализировали кнопки - рассчитали новое положение змейки - нарисовали змейку по точкам в массиве... и так все время

автомат тут не первостепенное

Re: Светодиодная змейка

Чт июл 19, 2018 15:51:29

Делаете класс ТОЧКА с координатами X,Y и методом Зажечь/Потушить.

Делаете связный список из объектов класса ТОЧКА.

При добавлении элемента в список вызываете метод Зажечь.

Движение заключается в том, что последний элемент списка переносится из хвоста в голову. При этом сначала вызывается метод потушить, а потом задаются новые координаты и метод Зажечь. Новые координаты при перемещении вычисляются из координат первого элемента списка и нажатой кнопки.

Всё :)

Re: Светодиодная змейка

Чт июл 19, 2018 16:07:23

Делаете связный список из объектов класса ТОЧКА.

Зачем там связный список, достаточно кольцевого буфера, а для змейки бегающей по периметру хватит и обычного массива во флеше.

Re: Светодиодная змейка

Чт июл 19, 2018 17:51:34

Да и на счёт кольцевого буфера сомнения... Достаточно знать координаты двух точек: начала и конца.

Re: Светодиодная змейка

Чт июл 19, 2018 18:42:05

Это сегодня змейка по периметру бегает, а завтра начнутся зигзаги и изменения длины. Лучше изначально сделать "на вырост". Каждый начинающий программист просто обязан написать свой связный список с шашками и стюардессами. Что, уже и постебаться нельзя? :)

Re: Светодиодная змейка

Чт июл 19, 2018 18:57:17

Методы, классы...
Буфер матрицы точек и добавляем алгоритм перемещения.
Хоть "покадрово".
(правда то на ассемблере :wink: )
8)

Re: Светодиодная змейка

Пт июл 20, 2018 06:57:31

VladislavS писал(а):Каждый начинающий программист просто обязан написать свой связный список с шашками и стюардессами.
если взять какой-нибудь AVR или PIC, то со связным списком будут проблемы: там и простой массив не всякий влезает.
кстати, змейку я так и не сделал ни разу в своей жизни... тряхнуть, что ли, стариной? :tea:
Ответить