回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

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

头像 驴友花雕 2025.07.10 6 0

我们中的许多人都玩过经典的街机游戏 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,他是世界上最伟大的街机游戏的设计者和创造者。

 

01.jpg
02.jpg
03.jpg
04.jpg
05.jpg
06.jpg
07.jpg
08.jpg
09.jpg
09-.jpg

项目代码

 

代码
/************************************************** 
  Arduino source code for Space Invaders Desktop Clock
  ----> www.instructables.com/id/Space-Invaders-Desktop-Clock/

  Revision 2.2 

  Adafruit libraries written by Limor Fried/Ladyada for Adafruit Industries.
  
  Created 2015 by Desmond Andersen, CC BY-NC-SA License.
  Feel free to use, modify, and remix as long as you credit all text above.
 ****************************************************/

#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_LEDBackpack.h>
#include <Adafruit_GFX.h>


// Declare I2C objects
RTC_DS1307 rtc;
Adafruit_BicolorMatrix matrix1 = Adafruit_BicolorMatrix();
Adafruit_BicolorMatrix matrix2 = Adafruit_BicolorMatrix();
Adafruit_BicolorMatrix matrix3 = Adafruit_BicolorMatrix();
Adafruit_BicolorMatrix matrix4 = Adafruit_BicolorMatrix();

// Declare I/O pin connections
const int mainButtonPin = 4;
const int speakerPin = 9;

// Declare global variables
DateTime now;

int currentInvader = 1;
int mainButtonState = 0;


// Store bitmaps
static const uint8_t PROGMEM
    hour_one_bmp[] =
    { B00000000,
      B00000100,
      B00000100,
      B00000101,
      B00000100,
      B00000101,
      B00000100,
      B00000000 },
    hour_two_bmp[] =
    { B00000000,
      B00011100,
      B00000100,
      B00000101,
      B00011100,
      B00010001,
      B00011100,
      B00000000 },
    hour_three_bmp[] =
    { B00000000,
      B00011100,
      B00000100,
      B00000101,
      B00001100,
      B00000101,
      B00011100,
      B00000000 },
    hour_four_bmp[] =
    { B00000000,
      B00010100,
      B00010100,
      B00010101,
      B00011100,
      B00000101,
      B00000100,
      B00000000 },
    hour_five_bmp[] =
    { B00000000,
      B00011100,
      B00010000,
      B00010001,
      B00011100,
      B00000101,
      B00011100,
      B00000000 },
    hour_six_bmp[] =
    { B00000000,
      B00011100,
      B00010000,
      B00010001,
      B00011100,
      B00010101,
      B00011100,
      B00000000 },
    hour_seven_bmp[] =
    { B00000000,
      B00011100,
      B00000100,
      B00000101,
      B00000100,
      B00000101,
      B00000100,
      B00000000 },
    hour_eight_bmp[] =
    { B00000000,
      B00011100,
      B00010100,
      B00010101,
      B00011100,
      B00010101,
      B00011100,
      B00000000 },
    hour_nine_bmp[] =
    { B00000000,
      B00011100,
      B00010100,
      B00010101,
      B00011100,
      B00000101,
      B00011100,
      B00000000 },
    hour_ten_bmp[] =
    { B00000000,
      B01011100,
      B01010100,
      B01010101,
      B01010100,
      B01010101,
      B01011100,
      B00000000 },
    hour_eleven_bmp[] =
    { B00000000,
      B01000100,
      B01000100,
      B01000101,
      B01000100,
      B01000101,
      B01000100,
      B00000000 },
    hour_twelve_bmp[] =
    { B00000000,
      B01011100,
      B01000100,
      B01000101,
      B01011100,
      B01010001,
      B01011100,
      B00000000 },
    minute_zero_bmp[] =
    { B00000000,
      B01110111,
      B01010101,
      B01010101,
      B01010101,
      B01010101,
      B01110111,
      B00000000 },
    minute_one_bmp[] =
    { B00000000,
      B01110001,
      B01010001,
      B01010001,
      B01010001,
      B01010001,
      B01110001,
      B00000000 },
    minute_two_bmp[] =
    { B00000000,
      B01110111,
      B01010001,
      B01010001,
      B01010111,
      B01010100,
      B01110111,
      B00000000 },
    minute_three_bmp[] =
    { B00000000,
      B01110111,
      B01010001,
      B01010001,
      B01010111,
      B01010001,
      B01110111,
      B00000000 },
    minute_four_bmp[] =
    { B00000000,
      B01110101,
      B01010101,
      B01010101,
      B01010111,
      B01010001,
      B01110001,
      B00000000 },
    minute_five_bmp[] =
    { B00000000,
      B01110111,
      B01010100,
      B01010100,
      B01010111,
      B01010001,
      B01110111,
      B00000000 },
    minute_six_bmp[] =
    { B00000000,
      B01110111,
      B01010100,
      B01010100,
      B01010111,
      B01010101,
      B01110111,
      B00000000 },
    minute_seven_bmp[] =
    { B00000000,
      B01110111,
      B01010001,
      B01010001,
      B01010001,
      B01010001,
      B01110001,
      B00000000 },
    minute_eight_bmp[] =
    { B00000000,
      B01110111,
      B01010101,
      B01010101,
      B01010111,
      B01010101,
      B01110111,
      B00000000 },
    minute_nine_bmp[] =
    { B00000000,
      B01110111,
      B01010101,
      B01010101,
      B01010111,
      B01010001,
      B01110111,
      B00000000 },
    minute_ten_bmp[] =
    { B00000000,
      B00010111,
      B00010101,
      B00010101,
      B00010101,
      B00010101,
      B00010111,
      B00000000 },
    minute_eleven_bmp[] =
    { B00000000,
      B00010001,
      B00010001,
      B00010001,
      B00010001,
      B00010001,
      B00010001,
      B00000000 },
    minute_twelve_bmp[] =
    { B00000000,
      B00010111,
      B00010001,
      B00010001,
      B00010111,
      B00010100,
      B00010111,
      B00000000 },
    minute_thirteen_bmp[] =
    { B00000000,
      B00010111,
      B00010001,
      B00010001,
      B00010111,
      B00010001,
      B00010111,
      B00000000 },
    minute_fourteen_bmp[] =
    { B00000000,
      B00010101,
      B00010101,
      B00010101,
      B00010111,
      B00010001,
      B00010001,
      B00000000 },
    minute_fifteen_bmp[] =
    { B00000000,
      B00010111,
      B00010100,
      B00010100,
      B00010111,
      B00010001,
      B00010111,
      B00000000 },
    minute_sixteen_bmp[] =
    { B00000000,
      B00010111,
      B00010100,
      B00010100,
      B00010111,
      B00010101,
      B00010111,
      B00000000 },
    minute_seventeen_bmp[] =
    { B00000000,
      B00010111,
      B00010001,
      B00010001,
      B00010001,
      B00010001,
      B00010001,
      B00000000 },
    minute_eighteen_bmp[] =
    { B00000000,
      B00010111,
      B00010101,
      B00010101,
      B00010111,
      B00010101,
      B00010111,
      B00000000 },
    minute_nineteen_bmp[] =
    { B00000000,
      B00010111,
      B00010101,
      B00010101,
      B00010111,
      B00010001,
      B00010111,
      B00000000 },
    minute_twenty_bmp[] =
    { B00000000,
      B01110111,
      B00010101,
      B00010101,
      B01110101,
      B01000101,
      B01110111,
      B00000000 },
    minute_twentyone_bmp[] =
    { B00000000,
      B01110001,
      B00010001,
      B00010001,
      B01110001,
      B01000001,
      B01110001,
      B00000000 },
    minute_twentytwo_bmp[] =
    { B00000000,
      B01110111,
      B00010001,
      B00010001,
      B01110111,
      B01000100,
      B01110111,
      B00000000 },
    minute_twentythree_bmp[] =
    { B00000000,
      B01110111,
      B00010001,
      B00010001,
      B01110111,
      B01000001,
      B01110111,
      B00000000 },
    minute_twentyfour_bmp[] =
    { B00000000,
      B01110101,
      B00010101,
      B00010101,
      B01110111,
      B01000001,
      B01110001,
      B00000000 },
    minute_twentyfive_bmp[] =
    { B00000000,
      B01110111,
      B00010100,
      B00010100,
      B01110111,
      B01000001,
      B01110111,
      B00000000 },
    minute_twentysix_bmp[] =
    { B00000000,
      B01110111,
      B00010100,
      B00010100,
      B01110111,
      B01000101,
      B01110111,
      B00000000 },
    minute_twentyseven_bmp[] =
    { B00000000,
      B01110111,
      B00010001,
      B00010001,
      B01110001,
      B01000001,
      B01110001,
      B00000000 },
    minute_twentyeight_bmp[] =
    { B00000000,
      B01110111,
      B00010101,
      B00010101,
      B01110111,
      B01000101,
      B01110111,
      B00000000 },
    minute_twentynine_bmp[] =
    { B00000000,
      B01110111,
      B00010101,
      B00010101,
      B01110111,
      B01000001,
      B01110111,
      B00000000 },
    minute_thirty_bmp[] =
    { B00000000,
      B01110111,
      B00010101,
      B00010101,
      B01110101,
      B00010101,
      B01110111,
      B00000000 },
    minute_thirtyone_bmp[] =
    { B00000000,
      B01110001,
      B00010001,
      B00010001,
      B01110001,
      B00010001,
      B01110001,
      B00000000 },
    minute_thirtytwo_bmp[] =
    { B00000000,
      B01110111,
      B00010001,
      B00010001,
      B01110111,
      B00010100,
      B01110111,
      B00000000 },
    minute_thirtythree_bmp[] =
    { B00000000,
      B01110111,
      B00010001,
      B00010001,
      B01110111,
      B00010001,
      B01110111,
      B00000000 },
    minute_thirtyfour_bmp[] =
    { B00000000,
      B01110101,
      B00010101,
      B00010101,
      B01110111,
      B00010001,
      B01110001,
      B00000000 },
    minute_thirtyfive_bmp[] =
    { B00000000,
      B01110111,
      B00010100,
      B00010100,
      B01110111,
      B00010001,
      B01110111,
      B00000000 },
    minute_thirtysix_bmp[] =
    { B00000000,
      B01110111,
      B00010100,
      B00010100,
      B01110111,
      B00010101,
      B01110111,
      B00000000 },
    minute_thirtyseven_bmp[] =
    { B00000000,
      B01110111,
      B00010001,
      B00010001,
      B01110001,
      B00010001,
      B01110001,
      B00000000 },
    minute_thirtyeight_bmp[] =
    { B00000000,
      B01110111,
      B00010101,
      B00010101,
      B01110111,
      B00010101,
      B01110111,
      B00000000 },
    minute_thirtynine_bmp[] =
    { B00000000,
      B01110111,
      B00010101,
      B00010101,
      B01110111,
      B00010001,
      B01110111,
      B00000000 },
    minute_forty_bmp[] =
    { B00000000,
      B01010111,
      B01010101,
      B01010101,
      B01110101,
      B00010101,
      B00010111,
      B00000000 },
    minute_fortyone_bmp[] =
    { B00000000,
      B01010001,
      B01010001,
      B01010001,
      B01110001,
      B00010001,
      B00010001,
      B00000000 },
    minute_fortytwo_bmp[] =
    { B00000000,
      B01010111,
      B01010001,
      B01010001,
      B01110111,
      B00010100,
      B00010111,
      B00000000 },
    minute_fortythree_bmp[] =
    { B00000000,
      B01010111,
      B01010001,
      B01010001,
      B01110111,
      B00010001,
      B00010111,
      B00000000 },
    minute_fortyfour_bmp[] =
    { B00000000,
      B01010101,
      B01010101,
      B01010101,
      B01110111,
      B00010001,
      B00010001,
      B00000000 },
    minute_fortyfive_bmp[] =
    { B00000000,
      B01010111,
      B01010100,
      B01010100,
      B01110111,
      B00010001,
      B00010111,
      B00000000 },
    minute_fortysix_bmp[] =
    { B00000000,
      B01010111,
      B01010100,
      B01010100,
      B01110111,
      B00010101,
      B00010111,
      B00000000 },
    minute_fortyseven_bmp[] =
    { B00000000,
      B01010111,
      B01010001,
      B01010001,
      B01110001,
      B00010001,
      B00010001,
      B00000000 },
    minute_fortyeight_bmp[] =
    { B00000000,
      B01010111,
      B01010101,
      B01010101,
      B01110111,
      B00010101,
      B00010111,
      B00000000 },
    minute_fortynine_bmp[] =
    { B00000000,
      B01010111,
      B01010101,
      B01010101,
      B01110111,
      B00010001,
      B00010111,
      B00000000 },
    minute_fifty_bmp[] =
    { B00000000,
      B01110111,
      B01000101,
      B01000101,
      B01110101,
      B00010101,
      B01110111,
      B00000000 },
    minute_fiftyone_bmp[] =
    { B00000000,
      B01110001,
      B01000001,
      B01000001,
      B01110001,
      B00010001,
      B01110001,
      B00000000 },
    minute_fiftytwo_bmp[] =
    { B00000000,
      B01110111,
      B01000001,
      B01000001,
      B01110111,
      B00010100,
      B01110111,
      B00000000 },
    minute_fiftythree_bmp[] =
    { B00000000,
      B01110111,
      B01000001,
      B01000001,
      B01110111,
      B00010001,
      B01110111,
      B00000000 },
    minute_fiftyfour_bmp[] =
    { B00000000,
      B01110101,
      B01000101,
      B01000101,
      B01110111,
      B00010001,
      B01110001,
      B00000000 },
    minute_fiftyfive_bmp[] =
    { B00000000,
      B01110111,
      B01000100,
      B01000100,
      B01110111,
      B00010001,
      B01110111,
      B00000000 },
    minute_fiftysix_bmp[] =
    { B00000000,
      B01110111,
      B01000100,
      B01000100,
      B01110111,
      B00010101,
      B01110111,
      B00000000 },
    minute_fiftyseven_bmp[] =
    { B00000000,
      B01110111,
      B01010001,
      B01010001,
      B01110001,
      B00010001,
      B01110001,
      B00000000 },
    minute_fiftyeight_bmp[] =
    { B00000000,
      B01110111,
      B01000101,
      B01000101,
      B01110111,
      B00010101,
      B01110111,
      B00000000 },
    minute_fiftynine_bmp[] =
    { B00000000,
      B01110111,
      B01000101,
      B01000101,
      B01110111,
      B00010001,
      B01110111,
      B00000000 },
    text_pressA_bmp[] =
    { B00000000,
      B00000011,
      B00000010,
      B00000010,
      B01110011,
      B00000010,
      B00000010,
      B00000000 },
    text_pressB_bmp[] =
    { B00000000,
      B10111011,
      B10101010,
      B10101010,
      B10101011,
      B00110010,
      B00101011,
      B00000000 },
    text_pressC_bmp[] =
    { B00000000,
      B10111011,
      B00100010,
      B00100010,
      B10111011,
      B00001000,
      B10111011,
      B00000000 },
    text_pressD_bmp[] =
    { B00000000,
      B10000000,
      B00000000,
      B00000000,
      B10011100,
      B10000000,
      B10000000,
      B00000000 },
    text_startA_bmp[] =
    { B00000000,
      B00000011,
      B00000010,
      B00000010,
      B01110011,
      B00000000,
      B00000011,
      B00000000 },
    text_startB_bmp[] =
    { B00000000,
      B10111011,
      B00010010,
      B00010010,
      B10010011,
      B10010010,
      B10010010,
      B00000000 },
    text_startC_bmp[] =
    { B00000000,
      B10111011,
      B10101001,
      B10101001,
      B10101001,
      B10110001,
      B10101001,
      B00000000 },
    text_startD_bmp[] =
    { B00000000,
      B10000000,
      B00000000,
      B00000000,
      B00011100,
      B00000000,
      B00000000,
      B00000000 },
    invader_1AA_bmp[] = 
    { B00000001, 
      B00000011, 
      B00000111, 
      B00001101, 
      B00001111, 
      B00000010,
      B00000101,
      B00001010 },
    invader_1AB_bmp[] =
    { B10000000,
      B11000000,
      B11100000,
      B10110000,
      B11110000,
      B01000000,
      B10100000,
      B01010000 },
    invader_1BA_bmp[] = 
    { B00000001, 
      B00000011, 
      B00000111, 
      B00001101, 
      B00001111, 
      B00000101,
      B00001000,
      B00000100 },
    invader_1BB_bmp[] =
    { B10000000,
      B11000000,
      B11100000,
      B10110000,
      B11110000,
      B10100000,
      B00010000,
      B00100000 },
    invader_2AA_bmp[] =
    { B00000100,
      B00000010,
      B00000111, 
      B00001101, 
      B00011111, 
      B00010111, 
      B00010100, 
      B00000011 },
    invader_2AB_bmp[] =
    { B00010000,
      B00100000,
      B11110000,
      B11011000,
      B11111100,
      B11110100,
      B00010100,
      B01100000 },
    invader_2BA_bmp[] =
    { B00000100,
      B00010010,
      B00010111, 
      B00011101, 
      B00001111, 
      B00000111, 
      B00000100, 
      B00001000 },
    invader_2BB_bmp[] =
    { B00010000,
      B00100100,
      B11110100,
      B11011100,
      B11111000,
      B11110000,
      B00010000,
      B00001000 },
    invader_3AA_bmp[] =
    { B00000011,
      B00011111,
      B00111111,
      B00111001,
      B00111111,
      B00000110,
      B00001101,
      B00110000, },
    invader_3AB_bmp[] =
    { B11000000,
      B11111000,
      B11111100,
      B10011100,
      B11111100,
      B01100000,
      B10110000,
      B00001100, },
    invader_3BA_bmp[] =
    { B00000011,
      B00011111,
      B00111111,
      B00111001,
      B00111111,
      B00001110,
      B00011001,
      B00001100, },
    invader_3BB_bmp[] =
    { B11000000,
      B11111000,
      B11111100,
      B10011100,
      B11111100,
      B01110000,
      B10011000,
      B00110000 },
    invader_popA_bmp[] =
    { B00001000,
      B00000100,
      B00000010,
      B00111000,
      B00000000,
      B00001001,
      B00010010,
      B00000010 },
    invader_popB_bmp[] =
    { B10000000,
      B10010010,
      B00010100,
      B00100000,
      B00001110,
      B00000000,
      B01010000,
      B01001000 };


void setup()
{ 
    // Pass in I2C addresses
    matrix1.begin(0x70);
    matrix2.begin(0x71);
    matrix3.begin(0x72);
    matrix4.begin(0x73);

    // Setup time
    rtc.begin();

    if (! rtc.isrunning())
    {
        // This sets the RTC to the date and time this sketch was compiled
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    }    
    
    // Setup display
    matrix1.setRotation(3);
    matrix2.setRotation(3);
    matrix3.setRotation(3);
    matrix4.setRotation(3);

    matrix1.setBrightness(5);
    matrix2.setBrightness(5);
    matrix3.setBrightness(5);
    matrix4.setBrightness(5);

    // Setup buttons
    pinMode(mainButtonPin, INPUT);

    // Setup speaker
    pinMode(speakerPin, OUTPUT);


    // Splash screen
    mainButtonState = digitalRead(mainButtonPin);

    while(!mainButtonState)
    {
        matrix1.clear();
        matrix2.clear();
        matrix3.clear();
        matrix4.clear();

        matrix1.drawBitmap(0, 0, text_pressA_bmp, 8, 8, LED_RED);
        matrix2.drawBitmap(0, 0, text_pressB_bmp, 8, 8, LED_RED);
        matrix3.drawBitmap(0, 0, text_pressC_bmp, 8, 8, LED_RED);
        matrix4.drawBitmap(0, 0, text_pressD_bmp, 8, 8, LED_RED);

        matrix1.writeDisplay();
        matrix2.writeDisplay();
        matrix3.writeDisplay();
        matrix4.writeDisplay();
        
        tone(speakerPin, 139, 600);

        delay(800);

        mainButtonState = digitalRead(mainButtonPin);
        
        if(mainButtonState == HIGH)
            break;
        
        tone(speakerPin, 123, 600);

        delay(800);
        
        mainButtonState = digitalRead(mainButtonPin);
        
        if(mainButtonState == HIGH)
            break;

        matrix1.clear();
        matrix2.clear();
        matrix3.clear();
        matrix4.clear();

        matrix1.drawBitmap(0, 0, text_startA_bmp, 8, 8, LED_RED);
        matrix2.drawBitmap(0, 0, text_startB_bmp, 8, 8, LED_RED);
        matrix3.drawBitmap(0, 0, text_startC_bmp, 8, 8, LED_RED);
        matrix4.drawBitmap(0, 0, text_startD_bmp, 8, 8, LED_RED);

        matrix1.writeDisplay();
        matrix2.writeDisplay();
        matrix3.writeDisplay();
        matrix4.writeDisplay();

        tone(speakerPin, 110, 600);

        delay(800);
        
        mainButtonState = digitalRead(mainButtonPin);
        
        if(mainButtonState == HIGH)
            break;
        
        tone(speakerPin, 104, 600);

        delay(800);

        mainButtonState = digitalRead(mainButtonPin);
    }

    matrix1.clear();
    matrix2.clear();
    matrix3.clear();
    matrix4.clear();

    matrix1.writeDisplay();
    matrix2.writeDisplay();
    matrix3.writeDisplay();
    matrix4.writeDisplay();
    
    delay(1000);
}


void loop()
{
    // Check for button press
    mainButtonState = digitalRead(mainButtonPin);
    
    if(mainButtonState == HIGH)
        shootInvader(); 
  
    // Update time
    now = rtc.now();

    // Display time
    displayHour(now.hour());
    displayMinute(now.minute());

    // Update invader every hour
    if(now.minute() == 0 && now.second() == 0)
        currentInvader = cycleInvader(currentInvader);

    // Display invader
    displayInvader(currentInvader, now.second());


    delay(1000);
}


void displayHour (int h)
{
    matrix1.clear();
    
    switch (h)
    {
        case 1: case 13:
            matrix1.drawBitmap(0, 0, hour_one_bmp, 8, 8, LED_GREEN);
            break;
        case 2: case 14:
            matrix1.drawBitmap(0, 0, hour_two_bmp, 8, 8, LED_GREEN);
            break;
        case 3: case 15:
            matrix1.drawBitmap(0, 0, hour_three_bmp, 8, 8, LED_GREEN);
            break;
        case 4: case 16:
            matrix1.drawBitmap(0, 0, hour_four_bmp, 8, 8, LED_GREEN);
            break;
        case 5: case 17:
            matrix1.drawBitmap(0, 0, hour_five_bmp, 8, 8, LED_GREEN);
            break;
        case 6: case 18:
            matrix1.drawBitmap(0, 0, hour_six_bmp, 8, 8, LED_GREEN);
            break;
        case 7: case 19:
            matrix1.drawBitmap(0, 0, hour_seven_bmp, 8, 8, LED_GREEN);
            break;
        case 8: case 20:
            matrix1.drawBitmap(0, 0, hour_eight_bmp, 8, 8, LED_GREEN);
            break;
        case 9: case 21:
            matrix1.drawBitmap(0, 0, hour_nine_bmp, 8, 8, LED_GREEN);
            break;
        case 10: case 22:
            matrix1.drawBitmap(0, 0, hour_ten_bmp, 8, 8, LED_GREEN);
            break;
        case 11: case 23:
            matrix1.drawBitmap(0, 0, hour_eleven_bmp, 8, 8, LED_GREEN);
            break;
        case 12: case 24:
            matrix1.drawBitmap(0, 0, hour_twelve_bmp, 8, 8, LED_GREEN);
            break;
    }

    matrix1.writeDisplay();
}


void displayMinute (int m)
{
    matrix2.clear();

    switch (m)
    {
        case 0:
            matrix2.drawBitmap(0, 0, minute_zero_bmp, 8, 8, LED_GREEN);
            break;
        case 1:
            matrix2.drawBitmap(0, 0, minute_one_bmp, 8, 8, LED_GREEN);
            break;
        case 2:
            matrix2.drawBitmap(0, 0, minute_two_bmp, 8, 8, LED_GREEN);
            break;
        case 3:
            matrix2.drawBitmap(0, 0, minute_three_bmp, 8, 8, LED_GREEN);
            break;
        case 4:
            matrix2.drawBitmap(0, 0, minute_four_bmp, 8, 8, LED_GREEN);
            break;
        case 5:
            matrix2.drawBitmap(0, 0, minute_five_bmp, 8, 8, LED_GREEN);
            break;
        case 6:
            matrix2.drawBitmap(0, 0, minute_six_bmp, 8, 8, LED_GREEN);
            break;
        case 7:
            matrix2.drawBitmap(0, 0, minute_seven_bmp, 8, 8, LED_GREEN);
            break;
        case 8:
            matrix2.drawBitmap(0, 0, minute_eight_bmp, 8, 8, LED_GREEN);
            break;
        case 9:
            matrix2.drawBitmap(0, 0, minute_nine_bmp, 8, 8, LED_GREEN);
            break;
        case 10:
            matrix2.drawBitmap(0, 0, minute_ten_bmp, 8, 8, LED_GREEN);
            break;
        case 11:
            matrix2.drawBitmap(0, 0, minute_eleven_bmp, 8, 8, LED_GREEN);
            break;
        case 12:
            matrix2.drawBitmap(0, 0, minute_twelve_bmp, 8, 8, LED_GREEN);
            break;
        case 13:
            matrix2.drawBitmap(0, 0, minute_thirteen_bmp, 8, 8, LED_GREEN);
            break;
        case 14:
            matrix2.drawBitmap(0, 0, minute_fourteen_bmp, 8, 8, LED_GREEN);
            break;
        case 15:
            matrix2.drawBitmap(0, 0, minute_fifteen_bmp, 8, 8, LED_GREEN);
            break;
        case 16:
            matrix2.drawBitmap(0, 0, minute_sixteen_bmp, 8, 8, LED_GREEN);
            break;
        case 17:
            matrix2.drawBitmap(0, 0, minute_seventeen_bmp, 8, 8, LED_GREEN);
            break;
        case 18:
            matrix2.drawBitmap(0, 0, minute_eighteen_bmp, 8, 8, LED_GREEN);
            break;
        case 19:
            matrix2.drawBitmap(0, 0, minute_nineteen_bmp, 8, 8, LED_GREEN);
            break;
        case 20:
            matrix2.drawBitmap(0, 0, minute_twenty_bmp, 8, 8, LED_GREEN);
            break;
        case 21:
            matrix2.drawBitmap(0, 0, minute_twentyone_bmp, 8, 8, LED_GREEN);
            break;
        case 22:
            matrix2.drawBitmap(0, 0, minute_twentytwo_bmp, 8, 8, LED_GREEN);
            break;
        case 23:
            matrix2.drawBitmap(0, 0, minute_twentythree_bmp, 8, 8, LED_GREEN);
            break;
        case 24:
            matrix2.drawBitmap(0, 0, minute_twentyfour_bmp, 8, 8, LED_GREEN);
            break;
        case 25:
            matrix2.drawBitmap(0, 0, minute_twentyfive_bmp, 8, 8, LED_GREEN);
            break;
        case 26:
            matrix2.drawBitmap(0, 0, minute_twentysix_bmp, 8, 8, LED_GREEN);
            break;
        case 27:
            matrix2.drawBitmap(0, 0, minute_twentyseven_bmp, 8, 8, LED_GREEN);
            break;
        case 28:
            matrix2.drawBitmap(0, 0, minute_twentyeight_bmp, 8, 8, LED_GREEN);
            break;
        case 29:
            matrix2.drawBitmap(0, 0, minute_twentynine_bmp, 8, 8, LED_GREEN);
            break;
        case 30:
            matrix2.drawBitmap(0, 0, minute_thirty_bmp, 8, 8, LED_GREEN);
            break;
        case 31:
            matrix2.drawBitmap(0, 0, minute_thirtyone_bmp, 8, 8, LED_GREEN);
            break;
        case 32:
            matrix2.drawBitmap(0, 0, minute_thirtytwo_bmp, 8, 8, LED_GREEN);
            break;
        case 33:
            matrix2.drawBitmap(0, 0, minute_thirtythree_bmp, 8, 8, LED_GREEN);
            break;
        case 34:
            matrix2.drawBitmap(0, 0, minute_thirtyfour_bmp, 8, 8, LED_GREEN);
            break;
        case 35:
            matrix2.drawBitmap(0, 0, minute_thirtyfive_bmp, 8, 8, LED_GREEN);
            break;
        case 36:
            matrix2.drawBitmap(0, 0, minute_thirtysix_bmp, 8, 8, LED_GREEN);
            break;
        case 37:
            matrix2.drawBitmap(0, 0, minute_thirtyseven_bmp, 8, 8, LED_GREEN);
            break;
        case 38:
            matrix2.drawBitmap(0, 0, minute_thirtyeight_bmp, 8, 8, LED_GREEN);
            break;
        case 39:
            matrix2.drawBitmap(0, 0, minute_thirtynine_bmp, 8, 8, LED_GREEN);
            break;
        case 40:
            matrix2.drawBitmap(0, 0, minute_forty_bmp, 8, 8, LED_GREEN);
            break;
        case 41:
            matrix2.drawBitmap(0, 0, minute_fortyone_bmp, 8, 8, LED_GREEN);
            break;
        case 42:
            matrix2.drawBitmap(0, 0, minute_fortytwo_bmp, 8, 8, LED_GREEN);
            break;
        case 43:
            matrix2.drawBitmap(0, 0, minute_fortythree_bmp, 8, 8, LED_GREEN);
            break;
        case 44:
            matrix2.drawBitmap(0, 0, minute_fortyfour_bmp, 8, 8, LED_GREEN);
            break;
        case 45:
            matrix2.drawBitmap(0, 0, minute_fortyfive_bmp, 8, 8, LED_GREEN);
            break;
        case 46:
            matrix2.drawBitmap(0, 0, minute_fortysix_bmp, 8, 8, LED_GREEN);
            break;
        case 47:
            matrix2.drawBitmap(0, 0, minute_fortyseven_bmp, 8, 8, LED_GREEN);
            break;
        case 48:
            matrix2.drawBitmap(0, 0, minute_fortyeight_bmp, 8, 8, LED_GREEN);
            break;
        case 49:
            matrix2.drawBitmap(0, 0, minute_fortynine_bmp, 8, 8, LED_GREEN);
            break;
        case 50:
            matrix2.drawBitmap(0, 0, minute_fifty_bmp, 8, 8, LED_GREEN);
            break;
        case 51:
            matrix2.drawBitmap(0, 0, minute_fiftyone_bmp, 8, 8, LED_GREEN);
            break;
        case 52:
            matrix2.drawBitmap(0, 0, minute_fiftytwo_bmp, 8, 8, LED_GREEN);
            break;
        case 53:
            matrix2.drawBitmap(0, 0, minute_fiftythree_bmp, 8, 8, LED_GREEN);
            break;
        case 54:
            matrix2.drawBitmap(0, 0, minute_fiftyfour_bmp, 8, 8, LED_GREEN);
            break;
        case 55:
            matrix2.drawBitmap(0, 0, minute_fiftyfive_bmp, 8, 8, LED_GREEN);
            break;
        case 56:
            matrix2.drawBitmap(0, 0, minute_fiftysix_bmp, 8, 8, LED_GREEN);
            break;
        case 57:
            matrix2.drawBitmap(0, 0, minute_fiftyseven_bmp, 8, 8, LED_GREEN);
            break;
        case 58:
            matrix2.drawBitmap(0, 0, minute_fiftyeight_bmp, 8, 8, LED_GREEN);
            break;
        case 59:
            matrix2.drawBitmap(0, 0, minute_fiftynine_bmp, 8, 8, LED_GREEN);
            break;
    }

    matrix2.writeDisplay();
}


int cycleInvader (int i)
{
    if(i == 3)
        i = 1;
    else
        i += 1;

    return i;
}


void displayInvader (int i, int s)
{
    matrix3.clear();
    matrix4.clear();

    // Animate invader
    if((s % 2) == 0)
    {
        switch (i)
        {
            case 1:
                matrix3.drawBitmap(0, 0, invader_1AA_bmp, 8, 8, LED_YELLOW);
                matrix4.drawBitmap(0, 0, invader_1AB_bmp, 8, 8, LED_YELLOW);
                break;
            case 2:
                matrix3.drawBitmap(0, 0, invader_2AA_bmp, 8, 8, LED_YELLOW);
                matrix4.drawBitmap(0, 0, invader_2AB_bmp, 8, 8, LED_YELLOW);
                break;
            case 3:
                matrix3.drawBitmap(0, 0, invader_3AA_bmp, 8, 8, LED_YELLOW);
                matrix4.drawBitmap(0, 0, invader_3AB_bmp, 8, 8, LED_YELLOW);
                break;
        }
    }
    else
    {
        switch (i)
        {
            case 1:
                matrix3.drawBitmap(0, 0, invader_1BA_bmp, 8, 8, LED_YELLOW);
                matrix4.drawBitmap(0, 0, invader_1BB_bmp, 8, 8, LED_YELLOW);
                break;
            case 2:
                matrix3.drawBitmap(0, 0, invader_2BA_bmp, 8, 8, LED_YELLOW);
                matrix4.drawBitmap(0, 0, invader_2BB_bmp, 8, 8, LED_YELLOW);
                break;
            case 3:
                matrix3.drawBitmap(0, 0, invader_3BA_bmp, 8, 8, LED_YELLOW);
                matrix4.drawBitmap(0, 0, invader_3BB_bmp, 8, 8, LED_YELLOW);
                break;
        }
    }

    matrix3.writeDisplay();
    matrix4.writeDisplay();
}


void shootInvader ()
{ 
    matrix3.clear();
    matrix4.clear();

    matrix3.drawBitmap(0, 0, invader_popA_bmp, 8, 8, LED_YELLOW);
    matrix4.drawBitmap(0, 0, invader_popB_bmp, 8, 8, LED_YELLOW);

    matrix3.writeDisplay();
    matrix4.writeDisplay();

    tone(speakerPin, 698, 250);

    delay(250);
    
    tone(speakerPin, 523, 250);
    
    delay(250);

    matrix3.clear();
    matrix4.clear();

    matrix3.writeDisplay();
    matrix4.writeDisplay();

    delay(2000);
    
    currentInvader = cycleInvader(currentInvader);
}

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

项目视频:https://www.youtube.com/watch?v=qAj8b_ExIG4
项目代码:https://content.instructables.com/FK7/SP4Y/IF602FBD/FK7SP4YIF602FBD.ino
3D打印文件:https://content.instructables.com/FM4/Y7PX/IDOD0KS5/FM4Y7PXIDOD0KS5.stl
https://content.instructables.com/FB0/C1PB/IDOD0KS6/FB0C1PBIDOD0KS6.stl
激光SVG文件:
https://content.instructables.com/FGV/FBVZ/IDOD38CT/FGVFBVZIDOD38CT.svg
 

10.jpg
00185---.gif

评论

user-avatar
icon 他的勋章
    展开更多