0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样对Arduino 4x4x4 LED立方体编程

454398 来源:网络整理 作者:网络整理 2019-12-02 16:40 次阅读

上周,我构建了一个LED立方体– 64个LED ,您可以对其进行编程以进行梦幻般的未来派灯光秀,而且我希望您也这样做,因为它激励您并扩展Arduino技能的绝佳项目。我为您提供了一些基本的应用程序,以帮助您进行思考,但是今天,我将介绍为多维数据集制作的更多软件以及代码说明。这样做的目的不仅是为您提供更多运行的灯光秀,而且是为了了解对多维数据集进行编程的一些限制,并在此过程中学习一些新的编程概念。

这是一些相当高级的编码。在自定义提供的代码之前,您确实需要阅读我以前的所有 Arduino教程和我们的初学者Arduino指南。

应用程序1:迷你蛇

我不想运行一套像蛇一样的图案序列,而是想对一条蛇进行编程,这是一种人工的蛇,它可以自己做出随机选择,而且完全不可预测。仅限于2个细分,我将在后面解释,您可以在下面查看演示。在此处下载完整的代码。

处理3D空间时,单个点需要3个坐标: X, Y 和 Z 。

但是,在我们的立方体中,X和Z平面由LED引脚表示,而Y直接由LED引脚表示。映射到阴极平面。为了方便使用这些坐标并弄清楚立方体周围的运动,我创建了一个新的数据类型(使用结构)来表示立方体上的单个点,我称之为“ xyz”。它仅由两个整数组成:“ xz”和“ y”。通过这种结构,我还可以在下面的特殊(xz,y)坐标系中表示一个方向:

Y运动 (向上,向下):(xz,y + 1),(xz,y-1)

Z 运动 (向前,向后) :(xz-1,y),(xz + 1,y)

X运动 (左,右):(xz + 4,y),( xz-4,y)

例如,要将LED沿一个位置向左移动(0,0),我们应用(xz + 4,y) 并以(0,4)结尾。

对移动有一定限制-即Y坐标只能是可能的 0到3 (0是最底层,3是最上层),而XZ坐标只能是 0到15 。在Z轴运动上设置了另一个限制,以防止从立方体的后部到前面的“跳跃”,反之亦然。在这种情况下,我们使用模数函数测试4的倍数,并拒绝该移动尝试。这是逻辑,用 valid()函数表示,如果建议的方向是可以接受的移动,则返回true,否则返回false。我添加了另一个函数来检查反向 –也就是说,如果蛇正朝一个方向前进,即使它是移动到–和 move()《的有效位置,我们也不希望它向后退。/strong》函数,该函数将获取坐标,方向并返回新坐标。

XYZ 数据类型, valid(), move()和 inverse()函数都可以在下载的 xyz.h 文件中找到。如果您想知道为什么将其放入一个单独的文件而不是主程序文件中,那是由于一些复杂的Arduino编译器规则阻止了返回自定义数据类型;它们必须放置在自己的文件中,然后在主文件的开头导入。

在主运行时文件中,一个方向数组存储了蛇可能做出的所有可能动作;我们可以简单地选择一个随机数组成员来获得新的方向。还创建了变量来存储当前位置(现在),先前的方向和先前的位置。其余代码对您来说应该是显而易见的。只需f o r个循环,然后打开和关闭LED。在主循环中,我们检查建议的方向是否有效,如果是,则按照这种方式进行。如果没有,我们会选择一个新的方向。

在主循环中唯一要指出的是一些检查,以纠正我发现的涉及多路复用的错误:如果新位置在相同的阴极平面或相同的阴极平面上阳极引脚,关闭前一个LED会导致两个LED都熄灭。也是在这一点上,我意识到在我当前的实现中,超越2段蛇形是不可能的:尝试以角落布置方式点亮3个LED。您不能这样做,因为激活2层和2个LED引脚后,将打开4个LED,而不是3个。这是我们有限的多维数据集设计固有的问题,但不必担心:我们只需要使用视觉持久性以重写绘图方法。

视觉持久性意味着当光线顺序到达我们的眼睛时(比我们能够处理的快),它看起来像是一幅图像。在我们的案例中,与其同时绘制所有四个图层,不如绘制第一层,将其停用,绘制第二层并使其停用:这比我们知道发生任何变化的速度还快。这就是消息编写者工作的原理,就像这样:

使用视觉持久性的新绘制方法

首先,是一个新的绘制例程。我创建了一个 4 x 16二维数组(正确或错误)以表示LED立方体状态的文字。绘制例程将通过简单地对其进行迭代并将每一层刷新到立方体一小会儿来实现视觉的持久性。它将继续以当前状态绘制自己,直到刷新时间过去为止,此时我们将控制权传递回main loop()。我已将代码的这一部分保存在此LED_cube_POV文件中,因此,如果您只想开始编写自己的游戏,然后随时使用它作为基础。

应用2:Game of生活

现在,让我们将其开发为Conway的《人生游戏》的基本版本。对于不熟悉(尝试使用Google搜索来查找令人敬畏的复活节彩蛋动画)的人来说,生命游戏是细胞自动机的一个示例,它创造了一种令人着迷的给出的行为只有几个简单的规则。

例如,这是蚂蚁在智力和蜂巢的思想下如何运动的方式,尽管生物学事实表明它们实际上遵循非常基本的荷尔蒙规则。这是完整的下载代码:按下 reset 按钮重新启动。如果发现自己反复出现相同的模式,请尝试按住rest按钮更长的时间。

此处是生命博弈的规则:

任何少于两个活邻居的活细胞都会死亡,好像是由人口不足造成的。

有两个活邻居的活细胞或三个活着的邻居继续生活到下一代。

具有三个以上活着的邻居的任何活细胞都会死去,就像人满为患一样。

任何有三个活着的邻居的死细胞都会变成

运行代码。您会注意到,在5到10个“世代”内,自动机可能已经停下来,稳定在某个位置;有时,这种稳定的模式会改变位置并在木板上移动。在极少数情况下,它们甚至可能完全消失。这是只能使用4x4x4 LED的限制,但无论如何都是一个很好的学习练习。

解释代码:

您可能不熟悉 memcpy()函数。我用它来保存以前的游戏状态,因为数组不能像普通变量那样相互分配-您必须在内存空间中进行实际复制(在这种情况下为64位)。

howManyNeighbours()函数应该可以自我解释,但如果情况并非如此,则此方法采用单个坐标,并遍历每个可能的邻居(与我们先前在蛇中使用的方向相同的数组)应用程序),以检查它们是否有效。然后,它会检查那些相邻的LED在先前的游戏状态中是否“点亮”,并计数有多少。

该“生活游戏”应用的主要功能是 progressGame(),这会将自动机规则应用于当前游戏状态。

改进:到目前为止,我已经花了太长时间了,但是您可能想要尝试添加一张支票,该支票在经过5代左右的相同模式后会自动将板复位。那请告诉我!我也建议您尝试将POV方法添加到蛇游戏中,以期有可能使更长的蛇成为可能。

今天就是我了。我可能稍后会再访问一些Arduino LED多维数据集应用程序,但希望您能够修改我的代码并创建自己的游戏规则:让我们知道您在注释中提出了什么,以便我们都可以下载您的创作!与以往一样,我将在这里回答您的问题并捍卫我的可怕编码能力。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    240

    文章

    23100

    浏览量

    657607
  • Arduino
    +关注

    关注

    187

    文章

    6461

    浏览量

    186555
  • 立方体
    +关注

    关注

    0

    文章

    6

    浏览量

    6410
收藏 人收藏

    评论

    相关推荐

    CC13x4、CC26x4 Simplelink™ 无线MCU技术参考手册

    电子发烧友网站提供《CC13x4、CC26x4 Simplelink™ 无线MCU技术参考手册.pdf》资料免费下载
    发表于 11-14 15:48 0次下载
    CC13<b class='flag-5'>x4</b>、CC26<b class='flag-5'>x4</b> Simplelink™ 无线MCU技术参考手册

    TLV320AIC32x4电源时序

    电子发烧友网站提供《TLV320AIC32x4电源时序.pdf》资料免费下载
    发表于 10-18 10:15 0次下载
    TLV320AIC32<b class='flag-5'>x4</b>电源时序

    TLV320AIC32x4睡眠和待机模式

    电子发烧友网站提供《TLV320AIC32x4睡眠和待机模式.pdf》资料免费下载
    发表于 10-18 09:43 0次下载
    TLV320AIC32<b class='flag-5'>x4</b>睡眠和待机模式

    为TM4C12x MCU开发LCD应用

    电子发烧友网站提供《为TM4C12x MCU开发LCD应用.pdf》资料免费下载
    发表于 09-19 10:40 0次下载
    为TM<b class='flag-5'>4C12x</b> MCU开发LCD应用

    TDA4x(LDC) 畸变矫正应用说明

    电子发烧友网站提供《TDA4x(LDC) 畸变矫正应用说明.pdf》资料免费下载
    发表于 09-10 10:58 0次下载
    TDA<b class='flag-5'>4x</b>(LDC) 畸变矫正应用说明

    Jacinto7 AM6x/DRA8x/TDA4x原理图检查清单

    电子发烧友网站提供《Jacinto7 AM6x/DRA8x/TDA4x原理图检查清单.pdf》资料免费下载
    发表于 09-06 11:19 0次下载
    Jacinto7 AM6<b class='flag-5'>x</b>/DRA8<b class='flag-5'>x</b>/TDA<b class='flag-5'>4x</b>原理图检查清单

    双TDA4x系统解决方案

    电子发烧友网站提供《双TDA4x系统解决方案.pdf》资料免费下载
    发表于 09-03 10:13 0次下载
    双TDA<b class='flag-5'>4x</b>系统解决方案

    SN65LVCP404千兆位4x4交叉点开关数据表

    电子发烧友网站提供《SN65LVCP404千兆位4x4交叉点开关数据表.pdf》资料免费下载
    发表于 07-08 11:12 0次下载
    SN65LVCP404千兆位<b class='flag-5'>4x4</b>交叉点开关数据表

    LVDS 4x4交叉点开关SN65LVDS250数据表

    电子发烧友网站提供《LVDS 4x4交叉点开关SN65LVDS250数据表.pdf》资料免费下载
    发表于 06-26 11:12 0次下载
    LVDS <b class='flag-5'>4x4</b>交叉点开关SN65LVDS250数据表

    awg24x4p是几类网线

    awg24x4p网线通常被认为是五类网线。以下是关于awg24x4p网线的详细解释: 标识含义: AWG:表示美国线规(American Wire Gauge),是导线形成最后直径前所要经过的孔
    的头像 发表于 06-24 10:24 1478次阅读

    创意挑战丨从0自制“自平衡立方体”(分享开源资料)

    一个非常有意思的项目,利用反作用力轮保持平衡的立方体! 项目概览 这个立方体能够在顶点处保持平衡,同时还能以受控方式绕轴旋转。这一功能是通过巧妙地控制和一组三个反作用力轮来实现的。这个装置
    发表于 06-19 14:00

    RUCKUS R760资料:室内 Wi-Fi 6E 4x4:4 接入点,8.35 Gbps数据速率

    电子发烧友网站提供《RUCKUS R760资料:室内 Wi-Fi 6E 4x4:4 接入点,8.35 Gbps数据速率.pdf》资料免费下载
    发表于 05-28 16:32 0次下载

    16通道、 2/4/8时分多路复用局部调光背光LED驱动器TLC696x2/4/8数据表

    电子发烧友网站提供《16通道、 2/4/8时分多路复用局部调光背光LED驱动器TLC696x2/4/8数据表.pdf》资料免费下载
    发表于 03-25 09:08 0次下载
    16通道、 2/<b class='flag-5'>4</b>/8时分多路复用局部调光背光<b class='flag-5'>LED</b>驱动器TLC696<b class='flag-5'>x</b>2/<b class='flag-5'>4</b>/8数据表

    可以使用CLI命令同时使用多个miniprog4(例如,3~4)对多个CCG7x设备进行编程吗?

    我有一个关于使用带有 miniprog4 的 CLI 命令编程 CCG7x 的问题。 我们可以使用 CLI 命令同时使用多个 miniprog4(例如,3~
    发表于 02-22 06:30

    使用Arduino Nano制作一个4×4×4 LED立方体

    在这个项目中,我们将使用 Arduino Nano 制作一个很酷的 4×4×4 LED立方体
    的头像 发表于 02-11 12:07 3015次阅读
    使用<b class='flag-5'>Arduino</b> Nano制作一个<b class='flag-5'>4</b>×<b class='flag-5'>4</b>×<b class='flag-5'>4</b> <b class='flag-5'>LED</b><b class='flag-5'>立方体</b>