Arduino LED立方体4x4x4任何想法如何修复

问题描述 投票:0回答:1
// Connections
int mreset = 10;
int shift = 11;
int store = 12;
int data = 13;
int taster = 9;
int a, tasterstatus = 0;

// Delays
int tasterdelay = 250;


int fast = 5;
int stage1 = 1000;
int stage2 = 1000;


unsigned long time_now = 0;

// Pattern
int firstlevel[24]  = {1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0};
int secondlevel[24] = {0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0};
int thirdlevel[24]  = {0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0};
int fourthlevel[24] = {0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0};

int leftside[24]    = {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int ndleftside[24]  = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int ndrightside[24] = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};
int rightside[24]   = {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0};

int backside[24]    = {1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
int ndbackside[24]  = {1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0};
int ndfrontside[24] = {1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0};
int frontside[24]   = {1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0};

int cube1[24]       = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int cube2_1[24]     = {1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int cube2_2[24]     = {0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int bigcube1_1[24]  = {1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0};
int bigcube1_2[24]  = {0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0};

int cube3_1[24]     = {0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0};
int cube3_2[24]     = {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0};
int cube4[24]       = {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0};

int cube5_1[24]     = {1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};
int cube5_2[24]     = {0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0};
int cube6[24]       = {1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

int cube7_1[24]     = {0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0};
int cube7_2[24]     = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0};
int cube8[24]       = {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0};

int custom1[24]     = {1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0};
int custom2[24]     = {0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0};

void setup() {

//Set Outputs
  pinMode(shift , OUTPUT);
  pinMode(store , OUTPUT);
  pinMode(data , OUTPUT);
  pinMode(mreset , OUTPUT);
  pinMode(taster , INPUT);

// Set Shift Register Master Reset On/Off
  digitalWrite(mreset, LOW);
  digitalWrite(store, HIGH);
  digitalWrite(mreset, HIGH);
  digitalWrite(store, LOW);
}
void loop() {
//Waiting for Button PRess
  tasterstatus = digitalRead(taster);
  if (tasterstatus == HIGH) {
    a++;
    delay(tasterdelay);
  }
  //Choose Pattern
  if (a == 1) {
    pattern1();
  }
  if (a == 2) {
    pattern2();
  }
}

void pattern1() {
//Equate Millis with time_now
  time_now = millis();
  // First Sample for LED Cube
  for (int i = 0; i < 24; i++) {
    digitalWrite(shift, LOW);
    digitalWrite(data, firstlevel[i]);
    digitalWrite(shift, HIGH);

  }
  digitalWrite(store, HIGH);
  digitalWrite(store, LOW);
// "Delay"
  while (millis() < time_now + stage1) {
    tasterstatus = digitalRead(taster);
    // Checking Button State
    if (tasterstatus == HIGH) {
      delay(tasterdelay);
      a++;
      pattern2();
    }
  }
  // Clearing Shift Registers with Master Reset
  digitalWrite(mreset, LOW);
  digitalWrite(store, HIGH);
  digitalWrite(mreset, HIGH);
  digitalWrite(store, LOW);

  time_now = millis();
  for (int i = 0; i < 24; i++) {
    digitalWrite(shift, LOW);
    digitalWrite(data, secondlevel[i]);
    digitalWrite(shift, HIGH);

  }
  digitalWrite(store, HIGH);
  digitalWrite(store, LOW);

  while (millis() < time_now + stage1) {
    tasterstatus = digitalRead(taster);
    if (tasterstatus == HIGH) {
      delay(tasterdelay);
      a++;
      pattern2();
    }
  }
  digitalWrite(mreset, LOW);
  digitalWrite(store, HIGH);
  digitalWrite(mreset, HIGH);
  digitalWrite(store, LOW);

  time_now = millis();
  for (int i = 0; i < 24; i++) {
    digitalWrite(shift, LOW);
    digitalWrite(data, thirdlevel[i]);
    digitalWrite(shift, HIGH);

  }
  digitalWrite(store, HIGH);
  digitalWrite(store, LOW);

  while (millis() < time_now + stage1) {
    tasterstatus = digitalRead(taster);
    if (tasterstatus == HIGH) {
      delay(tasterdelay);
      a++;
      pattern2();
    }
  }
  digitalWrite(mreset, LOW);
  digitalWrite(store, HIGH);
  digitalWrite(mreset, HIGH);
  digitalWrite(store, LOW);
  time_now = millis();
  for (int i = 0; i < 24; i++) {
    digitalWrite(shift, LOW);
    digitalWrite(data, fourthlevel[i]);
    digitalWrite(shift, HIGH);

  }
  digitalWrite(store, HIGH);
  digitalWrite(store, LOW);

  while (millis() < time_now + stage1) {
    tasterstatus = digitalRead(taster);
    if (tasterstatus == HIGH) {
      delay(tasterdelay);
      a++;
      pattern2();
    }
  }
  digitalWrite(mreset, LOW);
  digitalWrite(store, HIGH);
  digitalWrite(mreset, HIGH);
  digitalWrite(store, LOW);

}
void pattern2() {
  time_now = millis();
  for (int i = 0; i < 24; i++) {
    digitalWrite(shift, LOW);
    digitalWrite(data, cube1[i]);
    digitalWrite(shift, HIGH);

  }
  digitalWrite(store, HIGH);
  digitalWrite(store, LOW);
}`enter code here

[我的问题是,当我在Pattern1中按下按钮时,Pattern2开始1倍的时间,在那之后Pattern1继续我按下按钮的位置,运行了1倍的低谷,然后该Pattern 2重复正常。任何想法如何解决?就像当我按下按钮时,First Pattern1会按需重复无穷大。但是,当我再次按下它时,在运行Pattern1时,它会按原样转到Pattern2,但它只重复Pattern2 1x时间,然后恢复到我按下按钮的pattern1,然后按需要重复pattern2。

所以主要问题是Pattern1在pattern2中运行1倍的时间;

感谢您的帮助

pandas arduino cube led
1个回答
0
投票

i通过退货来固定它;在pattern()2之后; ;)

© www.soinside.com 2019 - 2024. All rights reserved.