c++ - Arduino 的 3D 阵列

标签 c++ c arrays 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() 下,您在 中声明了 xSeedySeedzSeed >if block ,它使变量成为该 if block 的局部变量,这意味着当您退出 if block 时它们会超出范围。在 if block 之前(外部)声明它们,而不是在 ledBuffer 之前,在 void loop() 函数的开头,因为您在尝试使用这些变量之前告诉编译器它们存在,因此编译器的消息是它们“未在此范围内声明”

编辑

此外,您似乎希望所有这些函数都在同一个 ledBuffer 3D 数组上运行。您应该考虑将其声明为全局变量(如果您使用的是 C),或者如果您使用的是 C++,或许可以考虑将其设为类,并将 ledBuffer 作为属性/字段。

关于c++ - Arduino 的 3D 阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29662007/

相关文章:

c++ - 如何更改 shared_ptr 中的指针而不失去删除内存的能力?

c++ - 以编程方式设置 MSVC 和 Clang 上的堆栈指针

C 数据类型现实生活示例

vb.net - 调整二维数组的大小

python - 使用 python 和 numpy 创建三阶张量

c++ - 从txt文件C++读取浮点错误值

c++ - 为什么我可以使用类型别名声明一个 const 引用?

c++ - 在 C++ 中,我认为你可以做 "string times 2"= string string?

python - sqlite3_mutex_enter() 上的访问冲突。为什么?

c# - 从字符串中读取字符并计算每个字符