37浏览
查看: 37|回复: 2

[项目] 【Arduino 动手做】Space Invaders:太空侵略者动画时钟

[复制链接]
我们中的许多人都玩过经典的街机游戏 Space Invaders。这是一种将其实施到您的日常生活中的方法!

这个漂亮的时钟充满了时髦的动画和音效。它非常适合您的桌面,并且会让工作/学习变得更加有趣。

零部件

Pro Trinket 5V (1)
DS1307 实时时钟分线板 (1)
8 针 IC 插座(可选)
双色 LED 方形像素矩阵双肩包 (4)
8Ω 0.5W 迷你音箱(1)
红色面板安装瞬时按钮 (1)
各种热缩管
面板安装 2.1mm DC 桶形插孔 (1)
5V 开关电源 (1)
20-22 AWG 电子线
半尺寸 Perma-Proto 面包板 (1)
注意:您不必使用 Adafruit 的 Pro Trinket。任何基于 Arduino 的 5V 微控制器只要有足够的 I/O 引脚并适合项目外壳,就可以工作。

工具

烙铁(当然带焊料)
帮助之手或 PCB 虎钳
尖嘴钳
砂纸
文件
热胶枪
乐泰 5 分钟环氧树脂
计算机
微型 USB 数据线

哟哟哟!您刚刚构建了自己的 Space Invaders 桌面时钟!

我希望你喜欢这个项目,但不要止步于此。我鼓励大家实施自己的想法,让这个项目更酷!

最后,我想特别感谢伟大的 Tomohiro Nishikado,他是世界上最伟大的街机游戏的设计者和创造者。

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图1

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图2

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图3

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图4

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图5

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图6

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图7

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图8


【Arduino 动手做】Space Invaders:太空侵略者动画时钟图9

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图10

驴友花雕  中级技神
 楼主|

发表于 前天 06:09

【Arduino 动手做】Space Invaders:太空侵略者动画时钟

项目代码

  1. /**************************************************
  2.   Arduino source code for Space Invaders Desktop Clock
  3.   ----> www.instructables.com/id/Space-Invaders-Desktop-Clock/
  4.   Revision 2.2
  5.   Adafruit libraries written by Limor Fried/Ladyada for Adafruit Industries.
  6.   
  7.   Created 2015 by Desmond Andersen, CC BY-NC-SA License.
  8.   Feel free to use, modify, and remix as long as you credit all text above.
  9. ****************************************************/
  10. #include <Wire.h>
  11. #include <RTClib.h>
  12. #include <Adafruit_LEDBackpack.h>
  13. #include <Adafruit_GFX.h>
  14. // Declare I2C objects
  15. RTC_DS1307 rtc;
  16. Adafruit_BicolorMatrix matrix1 = Adafruit_BicolorMatrix();
  17. Adafruit_BicolorMatrix matrix2 = Adafruit_BicolorMatrix();
  18. Adafruit_BicolorMatrix matrix3 = Adafruit_BicolorMatrix();
  19. Adafruit_BicolorMatrix matrix4 = Adafruit_BicolorMatrix();
  20. // Declare I/O pin connections
  21. const int mainButtonPin = 4;
  22. const int speakerPin = 9;
  23. // Declare global variables
  24. DateTime now;
  25. int currentInvader = 1;
  26. int mainButtonState = 0;
  27. // Store bitmaps
  28. static const uint8_t PROGMEM
  29.     hour_one_bmp[] =
  30.     { B00000000,
  31.       B00000100,
  32.       B00000100,
  33.       B00000101,
  34.       B00000100,
  35.       B00000101,
  36.       B00000100,
  37.       B00000000 },
  38.     hour_two_bmp[] =
  39.     { B00000000,
  40.       B00011100,
  41.       B00000100,
  42.       B00000101,
  43.       B00011100,
  44.       B00010001,
  45.       B00011100,
  46.       B00000000 },
  47.     hour_three_bmp[] =
  48.     { B00000000,
  49.       B00011100,
  50.       B00000100,
  51.       B00000101,
  52.       B00001100,
  53.       B00000101,
  54.       B00011100,
  55.       B00000000 },
  56.     hour_four_bmp[] =
  57.     { B00000000,
  58.       B00010100,
  59.       B00010100,
  60.       B00010101,
  61.       B00011100,
  62.       B00000101,
  63.       B00000100,
  64.       B00000000 },
  65.     hour_five_bmp[] =
  66.     { B00000000,
  67.       B00011100,
  68.       B00010000,
  69.       B00010001,
  70.       B00011100,
  71.       B00000101,
  72.       B00011100,
  73.       B00000000 },
  74.     hour_six_bmp[] =
  75.     { B00000000,
  76.       B00011100,
  77.       B00010000,
  78.       B00010001,
  79.       B00011100,
  80.       B00010101,
  81.       B00011100,
  82.       B00000000 },
  83.     hour_seven_bmp[] =
  84.     { B00000000,
  85.       B00011100,
  86.       B00000100,
  87.       B00000101,
  88.       B00000100,
  89.       B00000101,
  90.       B00000100,
  91.       B00000000 },
  92.     hour_eight_bmp[] =
  93.     { B00000000,
  94.       B00011100,
  95.       B00010100,
  96.       B00010101,
  97.       B00011100,
  98.       B00010101,
  99.       B00011100,
  100.       B00000000 },
  101.     hour_nine_bmp[] =
  102.     { B00000000,
  103.       B00011100,
  104.       B00010100,
  105.       B00010101,
  106.       B00011100,
  107.       B00000101,
  108.       B00011100,
  109.       B00000000 },
  110.     hour_ten_bmp[] =
  111.     { B00000000,
  112.       B01011100,
  113.       B01010100,
  114.       B01010101,
  115.       B01010100,
  116.       B01010101,
  117.       B01011100,
  118.       B00000000 },
  119.     hour_eleven_bmp[] =
  120.     { B00000000,
  121.       B01000100,
  122.       B01000100,
  123.       B01000101,
  124.       B01000100,
  125.       B01000101,
  126.       B01000100,
  127.       B00000000 },
  128.     hour_twelve_bmp[] =
  129.     { B00000000,
  130.       B01011100,
  131.       B01000100,
  132.       B01000101,
  133.       B01011100,
  134.       B01010001,
  135.       B01011100,
  136.       B00000000 },
  137.     minute_zero_bmp[] =
  138.     { B00000000,
  139.       B01110111,
  140.       B01010101,
  141.       B01010101,
  142.       B01010101,
  143.       B01010101,
  144.       B01110111,
  145.       B00000000 },
  146.     minute_one_bmp[] =
  147.     { B00000000,
  148.       B01110001,
  149.       B01010001,
  150.       B01010001,
  151.       B01010001,
  152.       B01010001,
  153.       B01110001,
  154.       B00000000 },
  155.     minute_two_bmp[] =
  156.     { B00000000,
  157.       B01110111,
  158.       B01010001,
  159.       B01010001,
  160.       B01010111,
  161.       B01010100,
  162.       B01110111,
  163.       B00000000 },
  164.     minute_three_bmp[] =
  165.     { B00000000,
  166.       B01110111,
  167.       B01010001,
  168.       B01010001,
  169.       B01010111,
  170.       B01010001,
  171.       B01110111,
  172.       B00000000 },
  173.     minute_four_bmp[] =
  174.     { B00000000,
  175.       B01110101,
  176.       B01010101,
  177.       B01010101,
  178.       B01010111,
  179.       B01010001,
  180.       B01110001,
  181.       B00000000 },
  182.     minute_five_bmp[] =
  183.     { B00000000,
  184.       B01110111,
  185.       B01010100,
  186.       B01010100,
  187.       B01010111,
  188.       B01010001,
  189.       B01110111,
  190.       B00000000 },
  191.     minute_six_bmp[] =
  192.     { B00000000,
  193.       B01110111,
  194.       B01010100,
  195.       B01010100,
  196.       B01010111,
  197.       B01010101,
  198.       B01110111,
  199.       B00000000 },
  200.     minute_seven_bmp[] =
  201.     { B00000000,
  202.       B01110111,
  203.       B01010001,
  204.       B01010001,
  205.       B01010001,
  206.       B01010001,
  207.       B01110001,
  208.       B00000000 },
  209.     minute_eight_bmp[] =
  210.     { B00000000,
  211.       B01110111,
  212.       B01010101,
  213.       B01010101,
  214.       B01010111,
  215.       B01010101,
  216.       B01110111,
  217.       B00000000 },
  218.     minute_nine_bmp[] =
  219.     { B00000000,
  220.       B01110111,
  221.       B01010101,
  222.       B01010101,
  223.       B01010111,
  224.       B01010001,
  225.       B01110111,
  226.       B00000000 },
  227.     minute_ten_bmp[] =
  228.     { B00000000,
  229.       B00010111,
  230.       B00010101,
  231.       B00010101,
  232.       B00010101,
  233.       B00010101,
  234.       B00010111,
  235.       B00000000 },
  236.     minute_eleven_bmp[] =
  237.     { B00000000,
  238.       B00010001,
  239.       B00010001,
  240.       B00010001,
  241.       B00010001,
  242.       B00010001,
  243.       B00010001,
  244.       B00000000 },
  245.     minute_twelve_bmp[] =
  246.     { B00000000,
  247.       B00010111,
  248.       B00010001,
  249.       B00010001,
  250.       B00010111,
  251.       B00010100,
  252.       B00010111,
  253.       B00000000 },
  254.     minute_thirteen_bmp[] =
  255.     { B00000000,
  256.       B00010111,
  257.       B00010001,
  258.       B00010001,
  259.       B00010111,
  260.       B00010001,
  261.       B00010111,
  262.       B00000000 },
  263.     minute_fourteen_bmp[] =
  264.     { B00000000,
  265.       B00010101,
  266.       B00010101,
  267.       B00010101,
  268.       B00010111,
  269.       B00010001,
  270.       B00010001,
  271.       B00000000 },
  272.     minute_fifteen_bmp[] =
  273.     { B00000000,
  274.       B00010111,
  275.       B00010100,
  276.       B00010100,
  277.       B00010111,
  278.       B00010001,
  279.       B00010111,
  280.       B00000000 },
  281.     minute_sixteen_bmp[] =
  282.     { B00000000,
  283.       B00010111,
  284.       B00010100,
  285.       B00010100,
  286.       B00010111,
  287.       B00010101,
  288.       B00010111,
  289.       B00000000 },
  290.     minute_seventeen_bmp[] =
  291.     { B00000000,
  292.       B00010111,
  293.       B00010001,
  294.       B00010001,
  295.       B00010001,
  296.       B00010001,
  297.       B00010001,
  298.       B00000000 },
  299.     minute_eighteen_bmp[] =
  300.     { B00000000,
  301.       B00010111,
  302.       B00010101,
  303.       B00010101,
  304.       B00010111,
  305.       B00010101,
  306.       B00010111,
  307.       B00000000 },
  308.     minute_nineteen_bmp[] =
  309.     { B00000000,
  310.       B00010111,
  311.       B00010101,
  312.       B00010101,
  313.       B00010111,
  314.       B00010001,
  315.       B00010111,
  316.       B00000000 },
  317.     minute_twenty_bmp[] =
  318.     { B00000000,
  319.       B01110111,
  320.       B00010101,
  321.       B00010101,
  322.       B01110101,
  323.       B01000101,
  324.       B01110111,
  325.       B00000000 },
  326.     minute_twentyone_bmp[] =
  327.     { B00000000,
  328.       B01110001,
  329.       B00010001,
  330.       B00010001,
  331.       B01110001,
  332.       B01000001,
  333.       B01110001,
  334.       B00000000 },
  335.     minute_twentytwo_bmp[] =
  336.     { B00000000,
  337.       B01110111,
  338.       B00010001,
  339.       B00010001,
  340.       B01110111,
  341.       B01000100,
  342.       B01110111,
  343.       B00000000 },
  344.     minute_twentythree_bmp[] =
  345.     { B00000000,
  346.       B01110111,
  347.       B00010001,
  348.       B00010001,
  349.       B01110111,
  350.       B01000001,
  351.       B01110111,
  352.       B00000000 },
  353.     minute_twentyfour_bmp[] =
  354.     { B00000000,
  355.       B01110101,
  356.       B00010101,
  357.       B00010101,
  358.       B01110111,
  359.       B01000001,
  360.       B01110001,
  361.       B00000000 },
  362.     minute_twentyfive_bmp[] =
  363.     { B00000000,
  364.       B01110111,
  365.       B00010100,
  366.       B00010100,
  367.       B01110111,
  368.       B01000001,
  369.       B01110111,
  370.       B00000000 },
  371.     minute_twentysix_bmp[] =
  372.     { B00000000,
  373.       B01110111,
  374.       B00010100,
  375.       B00010100,
  376.       B01110111,
  377.       B01000101,
  378.       B01110111,
  379.       B00000000 },
  380.     minute_twentyseven_bmp[] =
  381.     { B00000000,
  382.       B01110111,
  383.       B00010001,
  384.       B00010001,
  385.       B01110001,
  386.       B01000001,
  387.       B01110001,
  388.       B00000000 },
  389.     minute_twentyeight_bmp[] =
  390.     { B00000000,
  391.       B01110111,
  392.       B00010101,
  393.       B00010101,
  394.       B01110111,
  395.       B01000101,
  396.       B01110111,
  397.       B00000000 },
  398.     minute_twentynine_bmp[] =
  399.     { B00000000,
  400.       B01110111,
  401.       B00010101,
  402.       B00010101,
  403.       B01110111,
  404.       B01000001,
  405.       B01110111,
  406.       B00000000 },
  407.     minute_thirty_bmp[] =
  408.     { B00000000,
  409.       B01110111,
  410.       B00010101,
  411.       B00010101,
  412.       B01110101,
  413.       B00010101,
  414.       B01110111,
  415.       B00000000 },
  416.     minute_thirtyone_bmp[] =
  417.     { B00000000,
  418.       B01110001,
  419.       B00010001,
  420.       B00010001,
  421.       B01110001,
  422.       B00010001,
  423.       B01110001,
  424.       B00000000 },
  425.     minute_thirtytwo_bmp[] =
  426.     { B00000000,
  427.       B01110111,
  428.       B00010001,
  429.       B00010001,
  430.       B01110111,
  431.       B00010100,
  432.       B01110111,
  433.       B00000000 },
  434.     minute_thirtythree_bmp[] =
  435.     { B00000000,
  436.       B01110111,
  437.       B00010001,
  438.       B00010001,
  439.       B01110111,
  440.       B00010001,
  441.       B01110111,
  442.       B00000000 },
  443.     minute_thirtyfour_bmp[] =
  444.     { B00000000,
  445.       B01110101,
  446.       B00010101,
  447.       B00010101,
  448.       B01110111,
  449.       B00010001,
  450.       B01110001,
  451.       B00000000 },
  452.     minute_thirtyfive_bmp[] =
  453.     { B00000000,
  454.       B01110111,
  455.       B00010100,
  456.       B00010100,
  457.       B01110111,
  458.       B00010001,
  459.       B01110111,
  460.       B00000000 },
  461.     minute_thirtysix_bmp[] =
  462.     { B00000000,
  463.       B01110111,
  464.       B00010100,
  465.       B00010100,
  466.       B01110111,
  467.       B00010101,
  468.       B01110111,
  469.       B00000000 },
  470.     minute_thirtyseven_bmp[] =
  471.     { B00000000,
  472.       B01110111,
  473.       B00010001,
  474.       B00010001,
  475.       B01110001,
  476.       B00010001,
  477.       B01110001,
  478.       B00000000 },
  479.     minute_thirtyeight_bmp[] =
  480.     { B00000000,
  481.       B01110111,
  482.       B00010101,
  483.       B00010101,
  484.       B01110111,
  485.       B00010101,
  486.       B01110111,
  487.       B00000000 },
  488.     minute_thirtynine_bmp[] =
  489.     { B00000000,
  490.       B01110111,
  491.       B00010101,
  492.       B00010101,
  493.       B01110111,
  494.       B00010001,
  495.       B01110111,
  496.       B00000000 },
  497.     minute_forty_bmp[] =
  498.     { B00000000,
  499.       B01010111,
  500.       B01010101,
  501.       B01010101,
  502.       B01110101,
  503.       B00010101,
  504.       B00010111,
  505.       B00000000 },
  506.     minute_fortyone_bmp[] =
  507.     { B00000000,
  508.       B01010001,
  509.       B01010001,
  510.       B01010001,
  511.       B01110001,
  512.       B00010001,
  513.       B00010001,
  514.       B00000000 },
  515.     minute_fortytwo_bmp[] =
  516.     { B00000000,
  517.       B01010111,
  518.       B01010001,
  519.       B01010001,
  520.       B01110111,
  521.       B00010100,
  522.       B00010111,
  523.       B00000000 },
  524.     minute_fortythree_bmp[] =
  525.     { B00000000,
  526.       B01010111,
  527.       B01010001,
  528.       B01010001,
  529.       B01110111,
  530.       B00010001,
  531.       B00010111,
  532.       B00000000 },
  533.     minute_fortyfour_bmp[] =
  534.     { B00000000,
  535.       B01010101,
  536.       B01010101,
  537.       B01010101,
  538.       B01110111,
  539.       B00010001,
  540.       B00010001,
  541.       B00000000 },
  542.     minute_fortyfive_bmp[] =
  543.     { B00000000,
  544.       B01010111,
  545.       B01010100,
  546.       B01010100,
  547.       B01110111,
  548.       B00010001,
  549.       B00010111,
  550.       B00000000 },
  551.     minute_fortysix_bmp[] =
  552.     { B00000000,
  553.       B01010111,
  554.       B01010100,
  555.       B01010100,
  556.       B01110111,
  557.       B00010101,
  558.       B00010111,
  559.       B00000000 },
  560.     minute_fortyseven_bmp[] =
  561.     { B00000000,
  562.       B01010111,
  563.       B01010001,
  564.       B01010001,
  565.       B01110001,
  566.       B00010001,
  567.       B00010001,
  568.       B00000000 },
  569.     minute_fortyeight_bmp[] =
  570.     { B00000000,
  571.       B01010111,
  572.       B01010101,
  573.       B01010101,
  574.       B01110111,
  575.       B00010101,
  576.       B00010111,
  577.       B00000000 },
  578.     minute_fortynine_bmp[] =
  579.     { B00000000,
  580.       B01010111,
  581.       B01010101,
  582.       B01010101,
  583.       B01110111,
  584.       B00010001,
  585.       B00010111,
  586.       B00000000 },
  587.     minute_fifty_bmp[] =
  588.     { B00000000,
  589.       B01110111,
  590.       B01000101,
  591.       B01000101,
  592.       B01110101,
  593.       B00010101,
  594.       B01110111,
  595.       B00000000 },
  596.     minute_fiftyone_bmp[] =
  597.     { B00000000,
  598.       B01110001,
  599.       B01000001,
  600.       B01000001,
  601.       B01110001,
  602.       B00010001,
  603.       B01110001,
  604.       B00000000 },
  605.     minute_fiftytwo_bmp[] =
  606.     { B00000000,
  607.       B01110111,
  608.       B01000001,
  609.       B01000001,
  610.       B01110111,
  611.       B00010100,
  612.       B01110111,
  613.       B00000000 },
  614.     minute_fiftythree_bmp[] =
  615.     { B00000000,
  616.       B01110111,
  617.       B01000001,
  618.       B01000001,
  619.       B01110111,
  620.       B00010001,
  621.       B01110111,
  622.       B00000000 },
  623.     minute_fiftyfour_bmp[] =
  624.     { B00000000,
  625.       B01110101,
  626.       B01000101,
  627.       B01000101,
  628.       B01110111,
  629.       B00010001,
  630.       B01110001,
  631.       B00000000 },
  632.     minute_fiftyfive_bmp[] =
  633.     { B00000000,
  634.       B01110111,
  635.       B01000100,
  636.       B01000100,
  637.       B01110111,
  638.       B00010001,
  639.       B01110111,
  640.       B00000000 },
  641.     minute_fiftysix_bmp[] =
  642.     { B00000000,
  643.       B01110111,
  644.       B01000100,
  645.       B01000100,
  646.       B01110111,
  647.       B00010101,
  648.       B01110111,
  649.       B00000000 },
  650.     minute_fiftyseven_bmp[] =
  651.     { B00000000,
  652.       B01110111,
  653.       B01010001,
  654.       B01010001,
  655.       B01110001,
  656.       B00010001,
  657.       B01110001,
  658.       B00000000 },
  659.     minute_fiftyeight_bmp[] =
  660.     { B00000000,
  661.       B01110111,
  662.       B01000101,
  663.       B01000101,
  664.       B01110111,
  665.       B00010101,
  666.       B01110111,
  667.       B00000000 },
  668.     minute_fiftynine_bmp[] =
  669.     { B00000000,
  670.       B01110111,
  671.       B01000101,
  672.       B01000101,
  673.       B01110111,
  674.       B00010001,
  675.       B01110111,
  676.       B00000000 },
  677.     text_pressA_bmp[] =
  678.     { B00000000,
  679.       B00000011,
  680.       B00000010,
  681.       B00000010,
  682.       B01110011,
  683.       B00000010,
  684.       B00000010,
  685.       B00000000 },
  686.     text_pressB_bmp[] =
  687.     { B00000000,
  688.       B10111011,
  689.       B10101010,
  690.       B10101010,
  691.       B10101011,
  692.       B00110010,
  693.       B00101011,
  694.       B00000000 },
  695.     text_pressC_bmp[] =
  696.     { B00000000,
  697.       B10111011,
  698.       B00100010,
  699.       B00100010,
  700.       B10111011,
  701.       B00001000,
  702.       B10111011,
  703.       B00000000 },
  704.     text_pressD_bmp[] =
  705.     { B00000000,
  706.       B10000000,
  707.       B00000000,
  708.       B00000000,
  709.       B10011100,
  710.       B10000000,
  711.       B10000000,
  712.       B00000000 },
  713.     text_startA_bmp[] =
  714.     { B00000000,
  715.       B00000011,
  716.       B00000010,
  717.       B00000010,
  718.       B01110011,
  719.       B00000000,
  720.       B00000011,
  721.       B00000000 },
  722.     text_startB_bmp[] =
  723.     { B00000000,
  724.       B10111011,
  725.       B00010010,
  726.       B00010010,
  727.       B10010011,
  728.       B10010010,
  729.       B10010010,
  730.       B00000000 },
  731.     text_startC_bmp[] =
  732.     { B00000000,
  733.       B10111011,
  734.       B10101001,
  735.       B10101001,
  736.       B10101001,
  737.       B10110001,
  738.       B10101001,
  739.       B00000000 },
  740.     text_startD_bmp[] =
  741.     { B00000000,
  742.       B10000000,
  743.       B00000000,
  744.       B00000000,
  745.       B00011100,
  746.       B00000000,
  747.       B00000000,
  748.       B00000000 },
  749.     invader_1AA_bmp[] =
  750.     { B00000001,
  751.       B00000011,
  752.       B00000111,
  753.       B00001101,
  754.       B00001111,
  755.       B00000010,
  756.       B00000101,
  757.       B00001010 },
  758.     invader_1AB_bmp[] =
  759.     { B10000000,
  760.       B11000000,
  761.       B11100000,
  762.       B10110000,
  763.       B11110000,
  764.       B01000000,
  765.       B10100000,
  766.       B01010000 },
  767.     invader_1BA_bmp[] =
  768.     { B00000001,
  769.       B00000011,
  770.       B00000111,
  771.       B00001101,
  772.       B00001111,
  773.       B00000101,
  774.       B00001000,
  775.       B00000100 },
  776.     invader_1BB_bmp[] =
  777.     { B10000000,
  778.       B11000000,
  779.       B11100000,
  780.       B10110000,
  781.       B11110000,
  782.       B10100000,
  783.       B00010000,
  784.       B00100000 },
  785.     invader_2AA_bmp[] =
  786.     { B00000100,
  787.       B00000010,
  788.       B00000111,
  789.       B00001101,
  790.       B00011111,
  791.       B00010111,
  792.       B00010100,
  793.       B00000011 },
  794.     invader_2AB_bmp[] =
  795.     { B00010000,
  796.       B00100000,
  797.       B11110000,
  798.       B11011000,
  799.       B11111100,
  800.       B11110100,
  801.       B00010100,
  802.       B01100000 },
  803.     invader_2BA_bmp[] =
  804.     { B00000100,
  805.       B00010010,
  806.       B00010111,
  807.       B00011101,
  808.       B00001111,
  809.       B00000111,
  810.       B00000100,
  811.       B00001000 },
  812.     invader_2BB_bmp[] =
  813.     { B00010000,
  814.       B00100100,
  815.       B11110100,
  816.       B11011100,
  817.       B11111000,
  818.       B11110000,
  819.       B00010000,
  820.       B00001000 },
  821.     invader_3AA_bmp[] =
  822.     { B00000011,
  823.       B00011111,
  824.       B00111111,
  825.       B00111001,
  826.       B00111111,
  827.       B00000110,
  828.       B00001101,
  829.       B00110000, },
  830.     invader_3AB_bmp[] =
  831.     { B11000000,
  832.       B11111000,
  833.       B11111100,
  834.       B10011100,
  835.       B11111100,
  836.       B01100000,
  837.       B10110000,
  838.       B00001100, },
  839.     invader_3BA_bmp[] =
  840.     { B00000011,
  841.       B00011111,
  842.       B00111111,
  843.       B00111001,
  844.       B00111111,
  845.       B00001110,
  846.       B00011001,
  847.       B00001100, },
  848.     invader_3BB_bmp[] =
  849.     { B11000000,
  850.       B11111000,
  851.       B11111100,
  852.       B10011100,
  853.       B11111100,
  854.       B01110000,
  855.       B10011000,
  856.       B00110000 },
  857.     invader_popA_bmp[] =
  858.     { B00001000,
  859.       B00000100,
  860.       B00000010,
  861.       B00111000,
  862.       B00000000,
  863.       B00001001,
  864.       B00010010,
  865.       B00000010 },
  866.     invader_popB_bmp[] =
  867.     { B10000000,
  868.       B10010010,
  869.       B00010100,
  870.       B00100000,
  871.       B00001110,
  872.       B00000000,
  873.       B01010000,
  874.       B01001000 };
  875. void setup()
  876. {
  877.     // Pass in I2C addresses
  878.     matrix1.begin(0x70);
  879.     matrix2.begin(0x71);
  880.     matrix3.begin(0x72);
  881.     matrix4.begin(0x73);
  882.     // Setup time
  883.     rtc.begin();
  884.     if (! rtc.isrunning())
  885.     {
  886.         // This sets the RTC to the date and time this sketch was compiled
  887.         rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  888.     }   
  889.    
  890.     // Setup display
  891.     matrix1.setRotation(3);
  892.     matrix2.setRotation(3);
  893.     matrix3.setRotation(3);
  894.     matrix4.setRotation(3);
  895.     matrix1.setBrightness(5);
  896.     matrix2.setBrightness(5);
  897.     matrix3.setBrightness(5);
  898.     matrix4.setBrightness(5);
  899.     // Setup buttons
  900.     pinMode(mainButtonPin, INPUT);
  901.     // Setup speaker
  902.     pinMode(speakerPin, OUTPUT);
  903.     // Splash screen
  904.     mainButtonState = digitalRead(mainButtonPin);
  905.     while(!mainButtonState)
  906.     {
  907.         matrix1.clear();
  908.         matrix2.clear();
  909.         matrix3.clear();
  910.         matrix4.clear();
  911.         matrix1.drawBitmap(0, 0, text_pressA_bmp, 8, 8, LED_RED);
  912.         matrix2.drawBitmap(0, 0, text_pressB_bmp, 8, 8, LED_RED);
  913.         matrix3.drawBitmap(0, 0, text_pressC_bmp, 8, 8, LED_RED);
  914.         matrix4.drawBitmap(0, 0, text_pressD_bmp, 8, 8, LED_RED);
  915.         matrix1.writeDisplay();
  916.         matrix2.writeDisplay();
  917.         matrix3.writeDisplay();
  918.         matrix4.writeDisplay();
  919.         
  920.         tone(speakerPin, 139, 600);
  921.         delay(800);
  922.         mainButtonState = digitalRead(mainButtonPin);
  923.         
  924.         if(mainButtonState == HIGH)
  925.             break;
  926.         
  927.         tone(speakerPin, 123, 600);
  928.         delay(800);
  929.         
  930.         mainButtonState = digitalRead(mainButtonPin);
  931.         
  932.         if(mainButtonState == HIGH)
  933.             break;
  934.         matrix1.clear();
  935.         matrix2.clear();
  936.         matrix3.clear();
  937.         matrix4.clear();
  938.         matrix1.drawBitmap(0, 0, text_startA_bmp, 8, 8, LED_RED);
  939.         matrix2.drawBitmap(0, 0, text_startB_bmp, 8, 8, LED_RED);
  940.         matrix3.drawBitmap(0, 0, text_startC_bmp, 8, 8, LED_RED);
  941.         matrix4.drawBitmap(0, 0, text_startD_bmp, 8, 8, LED_RED);
  942.         matrix1.writeDisplay();
  943.         matrix2.writeDisplay();
  944.         matrix3.writeDisplay();
  945.         matrix4.writeDisplay();
  946.         tone(speakerPin, 110, 600);
  947.         delay(800);
  948.         
  949.         mainButtonState = digitalRead(mainButtonPin);
  950.         
  951.         if(mainButtonState == HIGH)
  952.             break;
  953.         
  954.         tone(speakerPin, 104, 600);
  955.         delay(800);
  956.         mainButtonState = digitalRead(mainButtonPin);
  957.     }
  958.     matrix1.clear();
  959.     matrix2.clear();
  960.     matrix3.clear();
  961.     matrix4.clear();
  962.     matrix1.writeDisplay();
  963.     matrix2.writeDisplay();
  964.     matrix3.writeDisplay();
  965.     matrix4.writeDisplay();
  966.    
  967.     delay(1000);
  968. }
  969. void loop()
  970. {
  971.     // Check for button press
  972.     mainButtonState = digitalRead(mainButtonPin);
  973.    
  974.     if(mainButtonState == HIGH)
  975.         shootInvader();
  976.   
  977.     // Update time
  978.     now = rtc.now();
  979.     // Display time
  980.     displayHour(now.hour());
  981.     displayMinute(now.minute());
  982.     // Update invader every hour
  983.     if(now.minute() == 0 && now.second() == 0)
  984.         currentInvader = cycleInvader(currentInvader);
  985.     // Display invader
  986.     displayInvader(currentInvader, now.second());
  987.     delay(1000);
  988. }
  989. void displayHour (int h)
  990. {
  991.     matrix1.clear();
  992.    
  993.     switch (h)
  994.     {
  995.         case 1: case 13:
  996.             matrix1.drawBitmap(0, 0, hour_one_bmp, 8, 8, LED_GREEN);
  997.             break;
  998.         case 2: case 14:
  999.             matrix1.drawBitmap(0, 0, hour_two_bmp, 8, 8, LED_GREEN);
  1000.             break;
  1001.         case 3: case 15:
  1002.             matrix1.drawBitmap(0, 0, hour_three_bmp, 8, 8, LED_GREEN);
  1003.             break;
  1004.         case 4: case 16:
  1005.             matrix1.drawBitmap(0, 0, hour_four_bmp, 8, 8, LED_GREEN);
  1006.             break;
  1007.         case 5: case 17:
  1008.             matrix1.drawBitmap(0, 0, hour_five_bmp, 8, 8, LED_GREEN);
  1009.             break;
  1010.         case 6: case 18:
  1011.             matrix1.drawBitmap(0, 0, hour_six_bmp, 8, 8, LED_GREEN);
  1012.             break;
  1013.         case 7: case 19:
  1014.             matrix1.drawBitmap(0, 0, hour_seven_bmp, 8, 8, LED_GREEN);
  1015.             break;
  1016.         case 8: case 20:
  1017.             matrix1.drawBitmap(0, 0, hour_eight_bmp, 8, 8, LED_GREEN);
  1018.             break;
  1019.         case 9: case 21:
  1020.             matrix1.drawBitmap(0, 0, hour_nine_bmp, 8, 8, LED_GREEN);
  1021.             break;
  1022.         case 10: case 22:
  1023.             matrix1.drawBitmap(0, 0, hour_ten_bmp, 8, 8, LED_GREEN);
  1024.             break;
  1025.         case 11: case 23:
  1026.             matrix1.drawBitmap(0, 0, hour_eleven_bmp, 8, 8, LED_GREEN);
  1027.             break;
  1028.         case 12: case 24:
  1029.             matrix1.drawBitmap(0, 0, hour_twelve_bmp, 8, 8, LED_GREEN);
  1030.             break;
  1031.     }
  1032.     matrix1.writeDisplay();
  1033. }
  1034. void displayMinute (int m)
  1035. {
  1036.     matrix2.clear();
  1037.     switch (m)
  1038.     {
  1039.         case 0:
  1040.             matrix2.drawBitmap(0, 0, minute_zero_bmp, 8, 8, LED_GREEN);
  1041.             break;
  1042.         case 1:
  1043.             matrix2.drawBitmap(0, 0, minute_one_bmp, 8, 8, LED_GREEN);
  1044.             break;
  1045.         case 2:
  1046.             matrix2.drawBitmap(0, 0, minute_two_bmp, 8, 8, LED_GREEN);
  1047.             break;
  1048.         case 3:
  1049.             matrix2.drawBitmap(0, 0, minute_three_bmp, 8, 8, LED_GREEN);
  1050.             break;
  1051.         case 4:
  1052.             matrix2.drawBitmap(0, 0, minute_four_bmp, 8, 8, LED_GREEN);
  1053.             break;
  1054.         case 5:
  1055.             matrix2.drawBitmap(0, 0, minute_five_bmp, 8, 8, LED_GREEN);
  1056.             break;
  1057.         case 6:
  1058.             matrix2.drawBitmap(0, 0, minute_six_bmp, 8, 8, LED_GREEN);
  1059.             break;
  1060.         case 7:
  1061.             matrix2.drawBitmap(0, 0, minute_seven_bmp, 8, 8, LED_GREEN);
  1062.             break;
  1063.         case 8:
  1064.             matrix2.drawBitmap(0, 0, minute_eight_bmp, 8, 8, LED_GREEN);
  1065.             break;
  1066.         case 9:
  1067.             matrix2.drawBitmap(0, 0, minute_nine_bmp, 8, 8, LED_GREEN);
  1068.             break;
  1069.         case 10:
  1070.             matrix2.drawBitmap(0, 0, minute_ten_bmp, 8, 8, LED_GREEN);
  1071.             break;
  1072.         case 11:
  1073.             matrix2.drawBitmap(0, 0, minute_eleven_bmp, 8, 8, LED_GREEN);
  1074.             break;
  1075.         case 12:
  1076.             matrix2.drawBitmap(0, 0, minute_twelve_bmp, 8, 8, LED_GREEN);
  1077.             break;
  1078.         case 13:
  1079.             matrix2.drawBitmap(0, 0, minute_thirteen_bmp, 8, 8, LED_GREEN);
  1080.             break;
  1081.         case 14:
  1082.             matrix2.drawBitmap(0, 0, minute_fourteen_bmp, 8, 8, LED_GREEN);
  1083.             break;
  1084.         case 15:
  1085.             matrix2.drawBitmap(0, 0, minute_fifteen_bmp, 8, 8, LED_GREEN);
  1086.             break;
  1087.         case 16:
  1088.             matrix2.drawBitmap(0, 0, minute_sixteen_bmp, 8, 8, LED_GREEN);
  1089.             break;
  1090.         case 17:
  1091.             matrix2.drawBitmap(0, 0, minute_seventeen_bmp, 8, 8, LED_GREEN);
  1092.             break;
  1093.         case 18:
  1094.             matrix2.drawBitmap(0, 0, minute_eighteen_bmp, 8, 8, LED_GREEN);
  1095.             break;
  1096.         case 19:
  1097.             matrix2.drawBitmap(0, 0, minute_nineteen_bmp, 8, 8, LED_GREEN);
  1098.             break;
  1099.         case 20:
  1100.             matrix2.drawBitmap(0, 0, minute_twenty_bmp, 8, 8, LED_GREEN);
  1101.             break;
  1102.         case 21:
  1103.             matrix2.drawBitmap(0, 0, minute_twentyone_bmp, 8, 8, LED_GREEN);
  1104.             break;
  1105.         case 22:
  1106.             matrix2.drawBitmap(0, 0, minute_twentytwo_bmp, 8, 8, LED_GREEN);
  1107.             break;
  1108.         case 23:
  1109.             matrix2.drawBitmap(0, 0, minute_twentythree_bmp, 8, 8, LED_GREEN);
  1110.             break;
  1111.         case 24:
  1112.             matrix2.drawBitmap(0, 0, minute_twentyfour_bmp, 8, 8, LED_GREEN);
  1113.             break;
  1114.         case 25:
  1115.             matrix2.drawBitmap(0, 0, minute_twentyfive_bmp, 8, 8, LED_GREEN);
  1116.             break;
  1117.         case 26:
  1118.             matrix2.drawBitmap(0, 0, minute_twentysix_bmp, 8, 8, LED_GREEN);
  1119.             break;
  1120.         case 27:
  1121.             matrix2.drawBitmap(0, 0, minute_twentyseven_bmp, 8, 8, LED_GREEN);
  1122.             break;
  1123.         case 28:
  1124.             matrix2.drawBitmap(0, 0, minute_twentyeight_bmp, 8, 8, LED_GREEN);
  1125.             break;
  1126.         case 29:
  1127.             matrix2.drawBitmap(0, 0, minute_twentynine_bmp, 8, 8, LED_GREEN);
  1128.             break;
  1129.         case 30:
  1130.             matrix2.drawBitmap(0, 0, minute_thirty_bmp, 8, 8, LED_GREEN);
  1131.             break;
  1132.         case 31:
  1133.             matrix2.drawBitmap(0, 0, minute_thirtyone_bmp, 8, 8, LED_GREEN);
  1134.             break;
  1135.         case 32:
  1136.             matrix2.drawBitmap(0, 0, minute_thirtytwo_bmp, 8, 8, LED_GREEN);
  1137.             break;
  1138.         case 33:
  1139.             matrix2.drawBitmap(0, 0, minute_thirtythree_bmp, 8, 8, LED_GREEN);
  1140.             break;
  1141.         case 34:
  1142.             matrix2.drawBitmap(0, 0, minute_thirtyfour_bmp, 8, 8, LED_GREEN);
  1143.             break;
  1144.         case 35:
  1145.             matrix2.drawBitmap(0, 0, minute_thirtyfive_bmp, 8, 8, LED_GREEN);
  1146.             break;
  1147.         case 36:
  1148.             matrix2.drawBitmap(0, 0, minute_thirtysix_bmp, 8, 8, LED_GREEN);
  1149.             break;
  1150.         case 37:
  1151.             matrix2.drawBitmap(0, 0, minute_thirtyseven_bmp, 8, 8, LED_GREEN);
  1152.             break;
  1153.         case 38:
  1154.             matrix2.drawBitmap(0, 0, minute_thirtyeight_bmp, 8, 8, LED_GREEN);
  1155.             break;
  1156.         case 39:
  1157.             matrix2.drawBitmap(0, 0, minute_thirtynine_bmp, 8, 8, LED_GREEN);
  1158.             break;
  1159.         case 40:
  1160.             matrix2.drawBitmap(0, 0, minute_forty_bmp, 8, 8, LED_GREEN);
  1161.             break;
  1162.         case 41:
  1163.             matrix2.drawBitmap(0, 0, minute_fortyone_bmp, 8, 8, LED_GREEN);
  1164.             break;
  1165.         case 42:
  1166.             matrix2.drawBitmap(0, 0, minute_fortytwo_bmp, 8, 8, LED_GREEN);
  1167.             break;
  1168.         case 43:
  1169.             matrix2.drawBitmap(0, 0, minute_fortythree_bmp, 8, 8, LED_GREEN);
  1170.             break;
  1171.         case 44:
  1172.             matrix2.drawBitmap(0, 0, minute_fortyfour_bmp, 8, 8, LED_GREEN);
  1173.             break;
  1174.         case 45:
  1175.             matrix2.drawBitmap(0, 0, minute_fortyfive_bmp, 8, 8, LED_GREEN);
  1176.             break;
  1177.         case 46:
  1178.             matrix2.drawBitmap(0, 0, minute_fortysix_bmp, 8, 8, LED_GREEN);
  1179.             break;
  1180.         case 47:
  1181.             matrix2.drawBitmap(0, 0, minute_fortyseven_bmp, 8, 8, LED_GREEN);
  1182.             break;
  1183.         case 48:
  1184.             matrix2.drawBitmap(0, 0, minute_fortyeight_bmp, 8, 8, LED_GREEN);
  1185.             break;
  1186.         case 49:
  1187.             matrix2.drawBitmap(0, 0, minute_fortynine_bmp, 8, 8, LED_GREEN);
  1188.             break;
  1189.         case 50:
  1190.             matrix2.drawBitmap(0, 0, minute_fifty_bmp, 8, 8, LED_GREEN);
  1191.             break;
  1192.         case 51:
  1193.             matrix2.drawBitmap(0, 0, minute_fiftyone_bmp, 8, 8, LED_GREEN);
  1194.             break;
  1195.         case 52:
  1196.             matrix2.drawBitmap(0, 0, minute_fiftytwo_bmp, 8, 8, LED_GREEN);
  1197.             break;
  1198.         case 53:
  1199.             matrix2.drawBitmap(0, 0, minute_fiftythree_bmp, 8, 8, LED_GREEN);
  1200.             break;
  1201.         case 54:
  1202.             matrix2.drawBitmap(0, 0, minute_fiftyfour_bmp, 8, 8, LED_GREEN);
  1203.             break;
  1204.         case 55:
  1205.             matrix2.drawBitmap(0, 0, minute_fiftyfive_bmp, 8, 8, LED_GREEN);
  1206.             break;
  1207.         case 56:
  1208.             matrix2.drawBitmap(0, 0, minute_fiftysix_bmp, 8, 8, LED_GREEN);
  1209.             break;
  1210.         case 57:
  1211.             matrix2.drawBitmap(0, 0, minute_fiftyseven_bmp, 8, 8, LED_GREEN);
  1212.             break;
  1213.         case 58:
  1214.             matrix2.drawBitmap(0, 0, minute_fiftyeight_bmp, 8, 8, LED_GREEN);
  1215.             break;
  1216.         case 59:
  1217.             matrix2.drawBitmap(0, 0, minute_fiftynine_bmp, 8, 8, LED_GREEN);
  1218.             break;
  1219.     }
  1220.     matrix2.writeDisplay();
  1221. }
  1222. int cycleInvader (int i)
  1223. {
  1224.     if(i == 3)
  1225.         i = 1;
  1226.     else
  1227.         i += 1;
  1228.     return i;
  1229. }
  1230. void displayInvader (int i, int s)
  1231. {
  1232.     matrix3.clear();
  1233.     matrix4.clear();
  1234.     // Animate invader
  1235.     if((s % 2) == 0)
  1236.     {
  1237.         switch (i)
  1238.         {
  1239.             case 1:
  1240.                 matrix3.drawBitmap(0, 0, invader_1AA_bmp, 8, 8, LED_YELLOW);
  1241.                 matrix4.drawBitmap(0, 0, invader_1AB_bmp, 8, 8, LED_YELLOW);
  1242.                 break;
  1243.             case 2:
  1244.                 matrix3.drawBitmap(0, 0, invader_2AA_bmp, 8, 8, LED_YELLOW);
  1245.                 matrix4.drawBitmap(0, 0, invader_2AB_bmp, 8, 8, LED_YELLOW);
  1246.                 break;
  1247.             case 3:
  1248.                 matrix3.drawBitmap(0, 0, invader_3AA_bmp, 8, 8, LED_YELLOW);
  1249.                 matrix4.drawBitmap(0, 0, invader_3AB_bmp, 8, 8, LED_YELLOW);
  1250.                 break;
  1251.         }
  1252.     }
  1253.     else
  1254.     {
  1255.         switch (i)
  1256.         {
  1257.             case 1:
  1258.                 matrix3.drawBitmap(0, 0, invader_1BA_bmp, 8, 8, LED_YELLOW);
  1259.                 matrix4.drawBitmap(0, 0, invader_1BB_bmp, 8, 8, LED_YELLOW);
  1260.                 break;
  1261.             case 2:
  1262.                 matrix3.drawBitmap(0, 0, invader_2BA_bmp, 8, 8, LED_YELLOW);
  1263.                 matrix4.drawBitmap(0, 0, invader_2BB_bmp, 8, 8, LED_YELLOW);
  1264.                 break;
  1265.             case 3:
  1266.                 matrix3.drawBitmap(0, 0, invader_3BA_bmp, 8, 8, LED_YELLOW);
  1267.                 matrix4.drawBitmap(0, 0, invader_3BB_bmp, 8, 8, LED_YELLOW);
  1268.                 break;
  1269.         }
  1270.     }
  1271.     matrix3.writeDisplay();
  1272.     matrix4.writeDisplay();
  1273. }
  1274. void shootInvader ()
  1275. {
  1276.     matrix3.clear();
  1277.     matrix4.clear();
  1278.     matrix3.drawBitmap(0, 0, invader_popA_bmp, 8, 8, LED_YELLOW);
  1279.     matrix4.drawBitmap(0, 0, invader_popB_bmp, 8, 8, LED_YELLOW);
  1280.     matrix3.writeDisplay();
  1281.     matrix4.writeDisplay();
  1282.     tone(speakerPin, 698, 250);
  1283.     delay(250);
  1284.    
  1285.     tone(speakerPin, 523, 250);
  1286.    
  1287.     delay(250);
  1288.     matrix3.clear();
  1289.     matrix4.clear();
  1290.     matrix3.writeDisplay();
  1291.     matrix4.writeDisplay();
  1292.     delay(2000);
  1293.    
  1294.     currentInvader = cycleInvader(currentInvader);
  1295. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 前天 06:13

【Arduino 动手做】Space Invaders:太空侵略者动画时钟

【Arduino 动手做】Space Invaders:太空侵略者动画时钟
项目链接:https://www.instructables.com/Space-Invaders-Desktop-Clock/
项目作者:GeckoDiode
(加州大学洛杉矶分校热爱制作东西的学生)

项目视频:https://www.youtube.com/watch?v=qAj8b_ExIG4
项目代码:https://content.instructables.co ... FK7SP4YIF602FBD.ino
3D打印文件:https://content.instructables.co ... FM4Y7PXIDOD0KS5.stl
https://content.instructables.co ... FB0C1PBIDOD0KS6.stl
激光SVG文件:
https://content.instructables.co ... FGVFBVZIDOD38CT.svg

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图1

【Arduino 动手做】Space Invaders:太空侵略者动画时钟图2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail