【问题标题】:Arduino LED Cube 4x4x4 Any Ideas how to FixArduino LED Cube 4x4x4 任何解决方法的想法
【发布时间】:2020-06-05 20:13:05
【问题描述】:
// 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 继续我按下按钮的位置,运行 1x 波谷,之后模式 2 正常重复。任何想法如何解决它?就像当我按下按钮时,第一个 Pattern1 会重复无穷大。但是当我再次按下它时,当 Pattern1 正在运行时,它会按原样转到 Pattern2,但它只会重复 Pattern2 1 次,然后它会恢复 Pattern1,我按下按钮,然后它应该重复 Pattern2。

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

感谢帮助

【问题讨论】:

  • 问题是你在pattern1()中有那个while循环,你检查按钮,增加a,然后调用pattern2()。它调用 pattern2 一次,然后返回到该点以完成模式 1。我认为您无法修复此代码。如果您希望能够处理模式中间的按钮按下,您将不得不重写整个内容,以便模式不会阻塞。与其让函数调用一次并贯穿整个模式,不如想象一个函数被一遍又一遍地调用,并且只在模式中迈出一小步。
  • (millis()

标签: pandas arduino cube led


【解决方案1】:

我通过返回来修复它;在模式()2之后; ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2011-04-11
    • 2022-07-21
    • 2010-11-28
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多