首页 > 其他 > 详细

protogen面罩LED点阵代码

时间:2021-05-01 16:42:37      阅读:16      评论:0      收藏:0      [点我收藏+]
#include <MaxMatrix.h>
char noseRight[] =  {8, 8, B00000000, B00000000, B10000000, B11000000, B11000000, B11111100, B01111110, B00000000};
char icon01[] =     {8, 8, B00100000,B01111000,B11011110,B11000111,B11111111,B00000000,B00000000,B00000000};
char icon02[] =     {8, 8, B00000000,B00000000,B00000000,B10000000,B11100000,B01111000,B00011110,B00000111};
char icon03[] =     {8, 8, B00000000,B00000000,B00000000,B00000000,B00000111,B00011110,B01111000,B11100000};
char icon04[] =     {8, 8, B00000000,B00000000,B00000000,B11100000,B11111000,B00011110,B00000111,B00000001};
char Eye02[] =      {8, 8, B00000000,B00000000,B00000000,B10000000,B11100000,B11111000,B11111110,B00011111};
char Eye01[] =      {8, 8, B00010000,B00111100,B01111111,B11111111,B11111111,B00111111,B00000001,B00000000};
char Angry2[] =     {8, 8, 
B00000000,
B00000000,
B00000000,
B11000000,
B11110000,
B11111100,
B11111000,
B01110000,};
char Angry1[] =     {8, 8, 
B00001000,
B00001100,
B00001111,
B00001111,
B00000111,
B00000011,
B00000001,
B00000000,};
char Spooked1[] =   {8, 8, 
B00000000,
B11100000,
B11110000,
B11111000,
B11111000,
B11111100,
B00000000,
B00000000};
char Spooked2[] =   {8, 8, 
B00000000,
B00000111,
B00001111,
B00011111,
B00011111,
B00111111,
B00000000,
B00000000,};
char ZZZ2[] =      {8, 8, 
B00000000,
B00011111,
B00000001,
B00000010,
B11100100,
B01001000,
B10011111,
B11100000};
char ZZZ1[] =      {8, 8, 
B01111110,
B10000100,
B00001000,
B00010000,
B00100000,
B01111110,
B10000000,
B00000000};
char HAP02[] =      {8, 8, 
B00000000,
B00000000,
B00000110,
B00001111,
B11111111,
B11111110,
B11111100,
B11110000};
char HAP01[] =      {8, 8, B00000000, B00000000, B10000000, B11100000, B01111111, B00011111, B00000111, B00000000};
char Glitch01[] =     {8, 8, 
B00100000,
B01111110,
B11011111,
B11000111,
B11111111,
B00000000,
B00000000,
B00000000};
char Glitch02[] =     {8, 8, 
B00000000,
B00000000,
B10000000,
B11110000,
B11111111,
B01111111,
B00011111,
B00000111};
char Glitch03[] =     {8, 8, 
B00000000,
B00000000,
B00000111,
B00011111,
B11111111,
B11111111,
B11111000,
B11100000};
char Glitch04[] =     {8, 8,
B00011111,
B11111111,
B11111111,
B11111111,
B11111111,
B11111111,
B00011111,
B00001111};
//Left side of the helmet
char noseLeft[] =   {8, 8, B00000000, B00000000, B00000001, B00000011, B00000011, B00111111, B01111110, B00000000};
char icon01L[] =    {8, 8, B00001000, B00011110, B01111011, B11100011, B11111111, B00000000, B00000000, B00000000};
char icon02L[] =    {8, 8, B00000000, B00000000, B00000000, B00000001, B00000111, B00011110, B01111000, B11100000};
char icon03L[] =    {8, 8, B00000000, B00000000, B00000000, B00000000, B11100000, B01111000, B00011110, B00000111};
char icon04L[] =    {8, 8, B00000000, B00000000, B00000000, B00000111, B00011111, B01111000, B11100000, B10000000};
char Eye02L[] =      {8, 8, B00000000,B00000000,B00000000,B00000001,B00000111,B00011111,B01111111,B11111000};
char Eye01L[] =      {8, 8, B00001000,B00111100,B11111110,B11111111,B11111111,B11111100,B10000000,B00000000};
char Angry2L[] =     {8, 8, 
B00000000,
B00000000,
B00000000,
B00000011,
B00001111,
B00111111,
B00011111,
B00001110,};
char Angry1L[] =     {8, 8, 
B00010000,
B00110000,
B11110000,
B11110000,
B11100000,
B11000000,
B10000000,
B00000000,};
char Spooked2L[] =   {8, 8, 
B00000000,
B11100000,
B11110000,
B11111000,
B11111000,
B11111100,
B00000000,
B00000000};
char Spooked1L[] =   {8, 8, 
B00000000,
B00000111,
B00001111,
B00011111,
B00011111,
B00111111,
B00000000,
B00000000,};
char ZZZ2L[] =      {8, 8, B00000000,B00001111,B00000000,B00000001,B11110010,B00100100,B01001111,B11110000};
char ZZZ1L[] =      {8, 8, B00111111,B11000010,B10000100,B00001000,B00010000,B00111111,B11000000,B00000000};
char none[] =      {8, 8, B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};
char Glitch01L[] =    {8, 8, 
B00001000,
B01111110,
B11111011,
B11100011, 
B11111111,
B00000000, 
B00000000, 
B00000000};
char Glitch02L[] =    {8, 8, 
B00000000,
B00000000,
B00000001,
B00001111, 
B11111111, 
B11111110,
B11111000,
B11100000};
char Glitch03L[] =    {8, 8, 
B00000000, 
B00000000, 
B11100000, 
B11111000, 
B11111111,
B11111111, 
B00011111,
B00000111};
char Glitch04L[] =    {8, 8,
B11111000,
B11111111, 
B11111111, 
B11111111, 
B11111111,
B11111111,
B11111000, 
B11110000};
const int interruptPin = 2;
const int interruptPin2 = 3;
volatile long debounceTime = 0;
volatile long currentTime = 0;
char HAP02L[] =     {8, 8, B00000000, B00000000, B01100000, B11110000, B11111111, B01111111, B00111111, B00001111};
char HAP01L[] =     {8, 8, B00000000, B00000000, B00000001, B00000111, B11111110, B11111000, B11100000, B00000000};

int redPin = 5; //These pins are used for the expression indicating rgb LED.
int greenPin = 11;
int bluePin = 9;

//The terms DIN, CLK and CS state where you should connect the the cables from the matrix to the Arduino,
//so DIN is connected to digital pin 6 on the arduino and the CLK on digital pin 7
int DIN = 6;   // DIN pin of MAX7219 module
int CLK = 7;   // CLK pin of MAX7219 module
int CS = 8;    // CS pin of MAX7219 module
int maxInUse = 14; //Change this number to the amount of matrixes you linked together
byte counter = 0;
byte counter2 = 0;
int column1L = 104;
int column2L = 112;
int column3L = 95;
int column4L = 103;
int column1 = 8;
int column2 = 16;
int column3 = -1;
int column4 = 7;
int state = 0;
int state2;
int stateSerial;

MaxMatrix m(DIN, CS, CLK, maxInUse);


void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  Serial.begin(9600);
  randomSeed(analogRead(0));
  m.init();
  m.setIntensity(0);   // You can change the brightness of the matrices within a range of 0-15
  m.clear();
  pinMode(interruptPin, OUTPUT);
  digitalWrite(2, HIGH);
  attachInterrupt(digitalPinToInterrupt(2),ISR_button, FALLING);
  pinMode(interruptPin2, INPUT);
  attachInterrupt(digitalPinToInterrupt(3), hallSensor, CHANGE);
  if (digitalRead(3) == 0) {
    state2 = 1;
  }
}
void loop()
{
    if (Serial.available() > 0) {    //Used for input through bluetooth or serial monitor instead of button.
      stateSerial = Serial.read();   //Mainly for testing purposes
    }
    if (stateSerial == ‘0‘) {
      state = 0;
    }
    if (stateSerial == ‘1‘) {
      state = 1;
    }
    if (stateSerial == ‘2‘) {
      state = 2;
    }
    if (stateSerial == ‘3‘) {
      state = 3;
    }
    if (stateSerial == ‘4‘) {
      state = 4;
    }

    if (counter2 > 17) {                    //The blinking animation begins here
      for (int i = 0; i < 5; i++) {
        column1L = column1L - 1;
        column2L = column2L - 1;
        column1 = column1 - 1;
        column2 = column2 - 1;
        column3L = column3L + 1;
        column4L = column4L + 1;
        column3 = column3 + 1;
        column4 = column4 + 1;
        m.setColumn(column1L, 00000000);
        m.setColumn(column2L, 00000000);
        m.setColumn(column3L, 00000000);
        m.setColumn(column4L, 00000000);
        m.setColumn(column1, 00000000);
        m.setColumn(column2, 00000000);
        m.setColumn(column3, 00000000);
        m.setColumn(column4, 00000000);
        delay(15);
        counter2++;
      }
      column1L = 104;
      column2L = 112;
      column3L = 95;
      column4L = 103;
      column1 = 8;
      column2 = 16;
      column3 = -1;
      column4 = 7;
      counter2 = 0;
    }
    counter2++;
    Serial.print(("Expression #"));
    Serial.println(state);

    switch (state) {                      //First button press: serious expression
      case 0:
        m.writeSprite(104, 0, Eye01L);
        m.writeSprite(96, 0, Eye02L);
        m.writeSprite(8, 0, Eye02);
        m.writeSprite(0, 0, Eye01);
        setColor(0, 32, 0); 
        if (digitalRead(3) == 0) { 
    m.writeSprite(88, 0, icon01L);          //Icons for the mouth and nose are being turned on here
    m.writeSprite(80, 0, icon02L);
    m.writeSprite(72, 0, icon03L);
    m.writeSprite(64, 0, icon04L);
    m.writeSprite(56, 0, noseLeft);
    m.writeSprite(48, 0, noseRight);   
    m.writeSprite(40, 0, icon04);
    m.writeSprite(32, 0, icon03);
    m.writeSprite(24, 0, icon02);
    m.writeSprite(16, 0, icon01);
        }
        if (digitalRead(3) == 1) {
          m.writeSprite(64, 0, Glitch04L);
          m.writeSprite(72, 0, Glitch03L);
          m.writeSprite(80, 0, Glitch02L);
          m.writeSprite(88, 0, Glitch01L);
          m.writeSprite(16, 0, Glitch01);
          m.writeSprite(24, 0, Glitch02);
          m.writeSprite(32, 0, Glitch03);
          m.writeSprite(40, 0, Glitch04);
  }
        break;

      case 1:                             //Second button press: Surprised
        m.writeSprite(104, 0, Spooked2L);
        m.writeSprite(96, 0, Spooked1L);
        m.writeSprite(8, 0, Spooked1);
        m.writeSprite(0, 0, Spooked2);
        setColor(0, 0, 8);              
        if (digitalRead(3) == 0) {
            m.writeSprite(88, 0, icon01L);          //Icons for the mouth and nose are being turned on here
    m.writeSprite(80, 0, icon02L);
    m.writeSprite(72, 0, icon03L);
    m.writeSprite(64, 0, icon04L);
    m.writeSprite(56, 0, noseLeft);
    m.writeSprite(48, 0, noseRight);
    
    m.writeSprite(40, 0, icon04);
    m.writeSprite(32, 0, icon03);
    m.writeSprite(24, 0, icon02);
    m.writeSprite(16, 0, icon01);
        }
        if (digitalRead(3) == 1) {
    m.writeSprite(64, 0, Glitch04L);
          m.writeSprite(72, 0, Glitch03L);
          m.writeSprite(80, 0, Glitch02L);
          m.writeSprite(88, 0, Glitch01L);
          m.writeSprite(16, 0, Glitch01);
          m.writeSprite(24, 0, Glitch02);
          m.writeSprite(32, 0, Glitch03);
          m.writeSprite(40, 0, Glitch04);
  }
        break;

        case 2:
        m.writeSprite(104, 0, HAP01L);
        m.writeSprite(96, 0, HAP02L);
        m.writeSprite(8, 0, HAP02);
        m.writeSprite(0, 0, HAP01);
        setColor(255, 242, 0); 
         if (digitalRead(3) == 0) {
            m.writeSprite(88, 0, icon01L);          //Icons for the mouth and nose are being turned on here
    m.writeSprite(80, 0, icon02L);
    m.writeSprite(72, 0, icon03L);
    m.writeSprite(64, 0, icon04L);
    m.writeSprite(56, 0, noseLeft);
    m.writeSprite(48, 0, noseRight);
    
    m.writeSprite(40, 0, icon04);
    m.writeSprite(32, 0, icon03);
    m.writeSprite(24, 0, icon02);
    m.writeSprite(16, 0, icon01);
         }
        if (digitalRead(3) == 1) {
    m.writeSprite(64, 0, Glitch04L);
          m.writeSprite(72, 0, Glitch03L);
          m.writeSprite(80, 0, Glitch02L);
          m.writeSprite(88, 0, Glitch01L);
          m.writeSprite(16, 0, Glitch01);
          m.writeSprite(24, 0, Glitch02);
          m.writeSprite(32, 0, Glitch03);
          m.writeSprite(40, 0, Glitch04);
  }
        break;

      case 3:                             //Third button press: zzz expression
        m.writeSprite(104, 0, ZZZ1L);
        m.writeSprite(96, 0, ZZZ2L);
        m.writeSprite(8, 0, ZZZ1);
        m.writeSprite(0, 0, ZZZ2);
        setColor(255, 128, 64); 
         if (digitalRead(3) == 0) {
            m.writeSprite(88, 0, icon01L);          //Icons for the mouth and nose are being turned on here
    m.writeSprite(80, 0, icon02L);
    m.writeSprite(72, 0, icon03L);
    m.writeSprite(64, 0, icon04L);
    m.writeSprite(56, 0, noseLeft);
    m.writeSprite(48, 0, noseRight);
    
    m.writeSprite(40, 0, icon04);
    m.writeSprite(32, 0, icon03);
    m.writeSprite(24, 0, icon02);
    m.writeSprite(16, 0, icon01);
         }
        if (digitalRead(3) == 1) {
    m.writeSprite(64, 0, Glitch04L);
          m.writeSprite(72, 0, Glitch03L);
          m.writeSprite(80, 0, Glitch02L);
          m.writeSprite(88, 0, Glitch01L);
          m.writeSprite(16, 0, Glitch01);
          m.writeSprite(24, 0, Glitch02);
          m.writeSprite(32, 0, Glitch03);
          m.writeSprite(40, 0, Glitch04);
  }
        break;

         case 4:                             //Third button press: Angry expression
        m.writeSprite(104, 0, Angry1L);
        m.writeSprite(96, 0, Angry2L);
        m.writeSprite(8, 0, Angry2);
        m.writeSprite(0, 0, Angry1);
        setColor(16, 0, 0);   
         if (digitalRead(3) == 0) {
            m.writeSprite(88, 0, icon01L);          //Icons for the mouth and nose are being turned on here
    m.writeSprite(80, 0, icon02L);
    m.writeSprite(72, 0, icon03L);
    m.writeSprite(64, 0, icon04L);
    m.writeSprite(56, 0, noseLeft);
    m.writeSprite(48, 0, noseRight);
    
    m.writeSprite(40, 0, icon04);
    m.writeSprite(32, 0, icon03);
    m.writeSprite(24, 0, icon02);
    m.writeSprite(16, 0, icon01); 
         }
        if (digitalRead(3) == 1) {
    m.writeSprite(64, 0, Glitch04L);
          m.writeSprite(72, 0, Glitch03L);
          m.writeSprite(80, 0, Glitch02L);
          m.writeSprite(88, 0, Glitch01L);
          m.writeSprite(16, 0, Glitch01);
          m.writeSprite(24, 0, Glitch02);
          m.writeSprite(32, 0, Glitch03);
          m.writeSprite(40, 0, Glitch04);
  }
        break;
    }
}
void ISR_button() {                               //Stuff you shouldn‘t touch :P
  currentTime = millis();
  if ((currentTime - debounceTime) > 250) {
    if (state < 4) {
      state++;
    }
    else {
      state = 0;
    }
  }
  debounceTime = currentTime;
}

void hallSensor() {                              //Stuff you shouldn‘t touch :P
  currentTime = millis();
  if ((currentTime - debounceTime) > 25) {
    if (digitalRead(3) == 0) {
      state2 = 1;
    }
    else {
      state2 = 0;
    }
  }
  debounceTime = currentTime;
}

void setColor(int redValue, int greenValue, int blueValue) {
  analogWrite(redPin, redValue);
  analogWrite(greenPin, greenValue);
  analogWrite(bluePin, blueValue);
}

  

由YT大佬的开源代码改来,主要是觉得太单调加了口型同步与其他表情

开发板:arduino nano

 

protogen面罩LED点阵代码

原文:https://www.cnblogs.com/ElecHex/p/14443119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!