they dont seem to work.
trying to make custom symbols to led screen matrix display;
byte pen= {B00111110};
byte ketap={B00111010};
byte ketvir={B00101110};
byte vidurys={B00101010};
byte centras={B00001000};
byte sep={B00100000};
byte ket={B00111000};
byte krastai={B00100010};
byte vien={B00010000};
byte mdevyni[3]={ketap,vidurys,pen};
byte mastuoni[3]={pen,vidurys,pen};
byte mseptyni[3]={sep,sep,pen};
byte msesi[3]={pen,vidurys,ketvir};
byte mpenki[3]={ketap,vidurys,ketvir};
byte mketuri[3]={ket,centras,pen};
byte mtrys[3]={vidurys,vidurys,pen};
byte mdu[3]={ketvir,vidurys,ketap};
byte mvienas[3]={centras,vien,pen};
byte mnulis[3]={pen,krastai,pen};
byte mskaiciai[10][3]={mnulis[3],mvienas[3],mdu[3],mtrys[3],mketuri[3],mpenki[3],msesi[3],mseptyni[3],mastuoni[3],mdevyni[3]};
Serial.print(mskaiciai[2][2]);
every element i try to access result by "000" in serial.
i have tried oldshool declaration of byte, byte* and byte** as final array but compiler doesnt even compile it, wtf?
gfvalvo
November 27, 2017, 8:33pm
2
Please post a complete sketch that compiles so we can copy / paste it into the IDE.
#include "LedControl.h"
#include "binary.h"
LedControl lc=LedControl(13,14,12,1);// din clk cs
byte pen= {B00111110};
byte ketap={B00111010};
byte ketvir={B00101110};
byte vidurys={B00101010};
byte centras={B00001000};
byte sep={B00100000};
byte ket={B00111000};
byte krastai={B00100010};
byte vien={B00010000};
byte mdevyni[3]={ketap,vidurys,pen};
byte mastuoni[3]={pen,vidurys,pen};
byte mseptyni[3]={sep,sep,pen};
byte msesi[3]={pen,vidurys,ketvir};
byte mpenki[3]={ketap,vidurys,ketvir};
byte mketuri[3]={ket,centras,pen};
byte mtrys[3]={vidurys,vidurys,pen};
byte mdu[3]={ketvir,vidurys,ketap};
byte mvienas[3]={centras,vien,pen};
byte mnulis[3]={pen,krastai,pen};
byte mskaiciai[10][3]={mnulis[3],mvienas[3],mdu[3],mtrys[3],mketuri[3],mpenki[3],msesi[3],mseptyni[3],mastuoni[3],mdevyni[3]};
void setup(){
Serial.begin(9600);
lc.shutdown(0,false);
lc.setIntensity(0,1);
lc.clearDisplay(0);
}
void loop() {
lc.clearDisplay(0);
delay(1000);
Serial.print(mskaiciai[2][2]);
delay(1000);
}
system
November 27, 2017, 8:46pm
4
byte mskaiciai[10][3]={mnulis[3]
mnulis is three element array - it doesn't have an element with an index of three.
This seems to work.
byte pen = B00111110;
byte ketap = B00111010;
byte ketvir = {B00101110};
byte vidurys = B00101010;
byte centras = B00001000;
byte sep = B00100000;
byte ket = B00111000;
byte krastai = B00100010;
byte vien = B00010000;
byte mdevyni[3] = {ketap, vidurys, pen};
byte mastuoni[3] = {pen, vidurys, pen};
byte mseptyni[3] = {sep, sep, pen};
byte msesi[3] = {pen, vidurys, ketvir};
byte mpenki[3] = {ketap, vidurys, ketvir};
byte mketuri[3] = {ket, centras, pen};
byte mtrys[3] = {vidurys, vidurys, pen};
byte mdu[3] = {ketvir, vidurys, ketap};
byte mvienas[3] = {centras, vien, pen};
byte mnulis[3] = {pen, krastai, pen};
byte *(mskaiciai[10]) = {mnulis, mvienas, mdu, mtrys, mketuri, mpenki, msesi, mseptyni, mastuoni, mdevyni };
void setup()
{
Serial.begin(9600);
Serial.println("Start");
for (int i = 0; i < sizeof(mskaiciai) / sizeof(mskaiciai[0]); i++)
{
for (int j = 0; j <= sizeof(mskaiciai[i]); j++ ) Serial.println(*(mskaiciai[i] + j), BIN);
} // for
}
void loop() {}
Serial output:
Start
111110
100010
111110
1000
10000
111110
101110
101010
111010
101010
101010
111110
111000
1000
111110
111010
101010
101110
111110
101010
101110
100000
100000
111110
111110
101010
111110
111010
101010
111110
gfvalvo
November 27, 2017, 9:06pm
6
I don't have hardware in front of me to test this now. But, you could also try:
byte mdevyni[]={ketap,vidurys,pen};
byte mastuoni[]={pen,vidurys,pen};
byte mseptyni[]={sep,sep,pen};
byte msesi[]={pen,vidurys,ketvir};
byte mpenki[]={ketap,vidurys,ketvir};
byte mketuri[]={ket,centras,pen};
byte mtrys[]={vidurys,vidurys,pen};
byte mdu[]={ketvir,vidurys,ketap};
byte mvienas[]={centras,vien,pen};
byte mnulis[]={pen,krastai,pen};
byte mskaiciai[][3]={{mnulis}, {mvienas}, {mdu}, {mtrys}, {mketuri}, {mpenki}, {msesi}, {mseptyni}, {mastuoni}, {mdevyni}};
Also, why not make them all 'const byte'?
gfvalvo
November 27, 2017, 9:19pm
7
BTW, it’s an awfully bold statement to say multi-dimensional arrays “don’t seem to work”. Given how long the C language has been around and how many billions of lines of code have been written, don’t you think it’s much more likely that YOU are doing something wrong?
Jimmus
November 27, 2017, 9:30pm
8
You should be aware, that is not a multidimensional array. It is an array of pointers to arrays. If you really want a multidimensional array, you can initialize it like this:
byte mskaiciai[10][3]= {{pen,krastai,pen}, {centras,vien,pen}, {ketvir,vidurys,ketap}, ...
{pen,vidurys,pen}, {ketap,vidurys,pen}};