[英]3D array for Arduino
目前,我正在开发4x4x4 led多维数据集,我想为其编写自己的代码,但目前仍在使用3D阵列。 我在void setup()中声明了几个数组,并且尝试将它们也放入void loop()中。 尽管如此,在尝试编译时仍会返回错误。
简而言之,该代码应生成具有XYZ值的随机点。 然后,它必须将其写入缓冲区,此缓冲区必须投影并将其多路复用到led多维数据集。
我将返回错误的行设为粗体。
错误是:
LedCube1.0.ino: In function 'void loop()':
LedCube1.0.ino:41:3: error: 'ledBuffer' was not declared in this scope
LedCube1.0.ino:41:13: error: 'xSeed' was not declared in this scope
LedCube1.0.ino:41:20: error: 'ySeed' was not declared in this scope
LedCube1.0.ino:41:27: error: 'zSeed' was not declared in this scope
LedCube1.0.ino:42:7: error: 'rainstep' was not declared in this scope
LedCube1.0.ino: In function 'int allOff()':
LedCube1.0.ino:76:9: error: 'ledBuffer' was not declared in this scope
LedCube1.0.ino: In function 'int allOn()':
LedCube1.0.ino:86:9: error: 'ledBuffer' was not declared in this scope
Error compiling.
编码:
void setup() {
//sets all pins as output
for(int a=22;a<53;a++){
pinMode(a, OUTPUT);
}
//declares the sizes of the cube
int width = 4;
int depth = 4;
int height = 4;
int ledBuffer[4][4][4] = { //creates a buffer that can store values generated by a function
{
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}
},
{
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}
},
{
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0},
},
{
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0},
}
};
//defines to which connector each layer is connected
int ledXY[4][4] = {
{22,24,26,28} ,
{30,32,34,36},
{23,25,27,29},
{31,33,35,37}
};
int ledZ[4] = {38,40,42,44};
//create variables to start generating raindrops
int rainstep = 0;
int xSeed = 0;
int ySeed = 0;
int zSeed = 0;
}
void loop() {
//generatedrop
ledBuffer[xSeed][ySeed][zSeed] = 0;
if (rainstep == 0)
{
int xSeed=random(0,3);
int ySeed=random(0,3);
int zSeed=random(0,3);
}
else
{
zSeed = zSeed - rainstep;
}
ledBuffer[xSeed][ySeed][zSeed] = 1;
//updatecube
for(int i=0; i<80;i++){
int currentZ = i%4;
allOff;
for(int j=0;j<4;j++){
for(int k=0; i<4;i++){
if(ledBuffer[i][j][k]==0){
digitalWrite(ledBuffer[i][j][k],HIGH);
}else{
digitalWrite(ledBuffer[i][j][k],LOW);
}
}
}
}
}
//function declares entire array 0
int allOff(){
for(int c=0;c<4;c++){
for(int d=0;d<4;d++){
for(int e=0;e<4;e++){
ledBuffer[c][d][e]=0;
}
}
}
};
//function declares entire array 1
int allOn(){
for(int c=0;c<4;c++){
for(int d=0;d<4;d++){
for(int e=0;e<4;e++){
ledBuffer[c][d][e]=1;
}
}
}
};
I re
有人可以帮助我,或者至少可以指出正确的方向。
在void loop()
,您在if
块内声明xSeed
, ySeed
和zSeed
,这使变量成为该if块的局部变量,这意味着在退出if块时它们超出范围。 在void loop()
函数的开始之前,在if块之前(在ledBuffer
外部)声明它们,然后在ledBuffer
之前声明它们,因为您试图在告诉编译器它们存在之前就使用这些变量,因此,编译器发出的消息是“未在此范围内声明”
编辑
另外,似乎您希望所有这些功能都在同一ledBuffer
3D阵列上运行。 您应该考虑将其声明为全局变量(如果使用的是C),或者如果您使用的是C ++,则可以考虑将其声明为类,并使用ledBuffer
作为属性/字段。
我试图拆分您的代码并将其分解。 我没有Arduino构建系统,无法测试我的代码。 我不了解您将x,y,z映射到我尝试过的引脚号。
/* Struct for global conf */
static struct {
int ledBuffer[4][4][4];
int ledXY[4][4];
int ledZ[4];
} _G;
void setup() {
_G.ledXY = {
{22, 24, 26, 28} ,
{30, 32, 34, 36},
{23, 25, 27, 29},
{31, 33, 35, 37}
};
_G.ledZ = {38,40,42,44};
//sets all used pins as output
for(int i = 0; i < 4; i++){
pinMode(_G.ledZ[i], OUTPUT);
for (int j = 0; j < 4; j++) {
pinMode(_G.ledXY[i][j], OUTPUT);
}
}
allOn(); /* switch on all led*/
allOff(); /* switch off all led */
}
void loop() {
static int xSeed;
static int ySeed;
static int zSeed;
_G.ledBuffer[xSeed][ySeed][zSeed] = 0;
if (zSeed == 0)
{
xSeed = random(0, 3);
ySeed = random(0, 3);
zSeed = random(0, 3);
} else {
zSeed--;
}
_G.ledBuffer[xSeed][ySeed][zSeed] = 1;
doLight();
}
static void doLight();
for (int step = 0; step < 80; step++) { /* Perhaps use sleep instead */
allOff();
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
for(int k = 0; i < 4; i++){
digitalSwitch(i, j, k, ledBuffer[i][j][k]);
}
}
}
}
}
static void digitalSwitch(int x, int y, int z, int on) {
/* convert x y z to the correct pin*/
digitalWrite(_G.ledXY[x][y], _G.[ledZ[z]], on ? HIGH : LOW);
}
static void _all(int on) {
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
for(int k = 0; i < 4; i++){
digitalSwitch(i, j, k, on);
}
}
}
}
int allOff(){
_all(0);
};
int allOn(){
_all(1);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.