Changing values of array

I initialized my array as

int line[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x07,0x0F};

I would like to change the 64 values of this array in my program. All the 64 values are previously known.

Something like this to change all values in that array. Is it possible?

line = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x1E,0x1E,0x3E,0x38,0x38,0x38,0x3C,0x1C,0x1C,0x1C,0x1C,0x1E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0F,0x0F,0x1F,0x3E,0x7E,0xFC,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x01,0x83,0xC7,0xCF};

Thanks for any help.

All the 64 values are previously known.

memcpy_P

If the values are all known in advance, a copy may not even be necessary.

I dont want to create another variable. The values are changing 6-10 different values.

Tell us what you want to do, not how you think it should be done.

muralysunam:
I dont want to create another variable. The values are changing 6-10 different values.

Then maybe memset() is for you.

I am using 128x64 display. It is using two chipselect pins and activating two 64x64 display.
I am now using

int line1L[64] = {0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x30,0x18,0x1C,0x0C,0x0C,0x0C,0x1C,0x18,0x30,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x18,0x98,0x98,0x98,0x98,0x98,0x98,0x18,0x18,0x3C,0x24,0x24,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line2L[64] = {0x00,0x00,0x00,0x03,0x07,0x0E,0x0C,0x18,0x38,0x30,0x00,0x00,0x00,0x30,0x38,0x18,0x0C,0x0E,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xBE,0xE7,0xE3,0xE3,0xE1,0xE1,0xE3,0xE3,0xE7,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line3L[64] = {0x00,0x00,0x00,0x00,0xF0,0xB8,0x1C,0xCE,0xC6,0xC6,0xE2,0x62,0x62,0x66,0xC6,0xCC,0xCC,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0xDF,0x76,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line4L[64] = {0x00,0x00,0x00,0x00,0xF1,0xBB,0x1F,0x71,0x60,0x60,0xE0,0xC0,0xC0,0xC0,0x60,0x60,0x71,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC7,0xC6,0xCC,0xDC,0xD8,0xD8,0xDC,0xCC,0xC6,0xC7,0xE0,0x20,0x20,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line5L[64] = {0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x8F,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xC6,0x86,0x03,0x03,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE1,0xF0,0x30,0x38,0x18,0x18,0x18,0x30,0x30,0xE0,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line6L[64] = {0x00,0x00,0x00,0x00,0x3C,0x7E,0xE7,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x07,0xFE,0xFC,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1C,0x19,0x33,0x77,0x66,0x66,0x36,0x33,0x1B,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line7L[64] = {0x00,0x00,0x00,0x00,0xF8,0xFC,0x7F,0x3B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x7B,0xE3,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xE3,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x7F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line8L[64] = {0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x0C,0x0C,0x0C,0x0C,0x0C,0x0E,0x07,0x03,0x00,0x07,0x0F,0x1C,0x1E,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};


int line1R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x30,0x18,0x1C,0x0C,0x0C,0x0C,0x1C,0x18,0x30,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x18,0x98,0x98,0x98,0x98,0x98,0x98,0x18,0x18,0x3C,0x24,0x24,0x3C,0x00,0x00,0x00,0x00};
int line2R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0E,0x0C,0x18,0x38,0x30,0x00,0x00,0x00,0x30,0x38,0x18,0x0C,0x0E,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xBE,0xE7,0xE3,0xE3,0xE1,0xE1,0xE3,0xE3,0xE7,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line3R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xB8,0x1C,0xCE,0xC6,0xC6,0xE2,0x62,0x62,0x66,0xC6,0xCC,0xCC,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0xDF,0x76,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line4R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xBB,0x1F,0x71,0x60,0x60,0xE0,0xC0,0xC0,0xC0,0x60,0x60,0x71,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC7,0xC6,0xCC,0xDC,0xD8,0xD8,0xDC,0xCC,0xC6,0xC7,0xE0,0x20,0x20,0xE0,0x00,0x00,0x00,0x00};
int line5R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x8F,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xC6,0x86,0x03,0x03,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE1,0xF0,0x30,0x38,0x18,0x18,0x18,0x30,0x30,0xE0,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00};
int line6R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x7E,0xE7,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x07,0xFE,0xFC,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1C,0x19,0x33,0x77,0x66,0x66,0x36,0x33,0x1B,0x1D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line7R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x7F,0x3B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x7B,0xE3,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xE3,0x63,0x33,0x33,0x33,0x33,0x33,0x33,0x7F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int line8R[64] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x0C,0x0C,0x0C,0x0C,0x0C,0x0E,0x07,0x03,0x00,0x07,0x0F,0x1C,0x1E,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

L1 to L8 are for left side display and R1 to R8 are for right side display.
I need to reload these arrays with other values for display different images.
If I use different named arrays, I can't use same function for displaying image.

Thanks in advance

Do you know about arrays and indexes?

int my_array[ 100 ] = { ......whatever......... };

for ( byte i = 0; i < 64; i++ ) // adds 10 to the first 64 elements of my_array
{
my_array[ i ] += 10;
}

What are you running this on? You have 16 int arrays with 64 elements each, which takes 2K just for the arrays.

C has no notion of array assignment - you have to copy one element at a time with a for loop
or use something like memcpy which directly acts on memory at a low level.

AVR is an 8 bit CPU with no DMA. No matter how short the source, it's going to move 1 byte at a time.

Change your function to:

  • take a pointer to the image you want to display- read image data from PROGMEM
    Then put your images in PROGMEM because Arduino doesn't have enough RAM to hold all of those images.

Try with two dimensional arrays. I made a code for displaying animations on a 4 digits display. I think it might look a lot like what you are trying to do.

#include "TM1637Display.h"
#define CLK 5
#define DIO 6
TM1637Display tm1637(CLK,DIO);
uint8_t TimeDisp[] = {0x00,0x00,0x00,0x00};

unsigned long previousDaHold;
int daPos;
int daCurrent;
int daRepetition;
int daHold;
int daLenght;

int da[][32] = {
	{1, 0, 0, 8, 0, 1, 8, 0, 0, 2, 16, 0, 0, 4, 32, 0, 0, 8, 1, 0, 8, 0, 0, 1, 16, 0, 0, 2, 32, 0, 0, 4}, //1= L&R half circles
	{9, 4, 16, 9, 9, 4, 16, 9, 93, 4, 16, 93}, //blink little eyes
	{192, 4, 16, 192, 191, 4, 16, 191, 191, 4, 16, 191} //blink big eyes
};

void setup() {
	Serial.begin(9600);
	tm1637.setBrightness(0x08);
	daPlay(0, 5, 100, false); delay(1000); //circles
	daPlay(1, 3, 700, false); delay(1000); //small eyes
	daPlay(2, 4, 300, false); delay(1000); //big eyes
}

void loop() { daLoop(); }

void daPlay(int n, int r, int d, boolean bg = true) { // daPlay(array, repetition, delay, background);
	daLenght = sizeof(da[n]) / sizeof(int);
	if (bg) {
		daCurrent = n;
		daPos = 0;
		daRepetition = r;
		daHold = d;
	} else {
		for (int x = 0; x < r; x++) {
			for (int i = 0; i < daLenght; i += 4) {
				if (!da[n][i]) { break; }
				TimeDisp[0] = da[n][i];
				TimeDisp[1] = da[n][i+1];
				TimeDisp[2] = da[n][i+2];
				TimeDisp[3] = da[n][i+3];
				tm1637.setSegments(TimeDisp);
				delay(d);
			}
		}
		TimeDisp[0] = TimeDisp[1] = TimeDisp[2] = TimeDisp[3] = false;
		tm1637.setSegments(TimeDisp);
	}
}

void daLoop() {
	if (daRepetition && (millis() - previousDaHold >= daHold)) {
		if ((daPos < daLenght) && da[daCurrent][daPos]) {
			TimeDisp[0] = da[daCurrent][daPos];
			TimeDisp[1] = da[daCurrent][daPos+1];
			TimeDisp[2] = da[daCurrent][daPos+2];
			TimeDisp[3] = da[daCurrent][daPos+3];
			tm1637.setSegments(TimeDisp);
			previousDaHold = millis();
			daPos += 4;
		} else if ((daPos = daLenght && daRepetition) || !da[daCurrent][daPos]) {
			daRepetition -= 1;
			daPos = 0;
		}
	} else if (daHold && !daRepetition) { 
			daHold = 0; 
			TimeDisp[0] = TimeDisp[1] = TimeDisp[2] = TimeDisp[3] = false;
			tm1637.setSegments(TimeDisp);
		}
}