I’m making a a software display subroutine with assignable effects for six shift registered seven segment diplays. You can set the effect with the variable “effect” (0,1,2,3,4). I am having trouble compiling the “void writeDisp(int d)” line. It doesn’t seem to want to parse the input into an array. And i need a persistent array that survives the function (disp) for the wipe/shutter effect, hence the first copy of the array. The other two copies of the array get destroyed by the wipe/shutter. I’m still in ATARI BASIC programming mode. Here is the whole test code so far (the setup is just sending test display info).
int datPIN = 2;
int latPIN = 3;
int clkPIN = 4;
int disp[6];
int effect;
int effdel;
static int alphnum[] = {192, 249, 164, 176, 153, 146, 131, 248, 128, 144, 127};
void setup(){
pinMode(datPIN, OUTPUT);
pinMode(latPIN, OUTPUT);
pinMode(clkPIN, OUTPUT);
digitalWrite(latPIN, 0);
effdel = 50;
effect = 4;
writeDisp(255, 255, 255, 255, 255, 255); //blank
delay(1000);
writeDisp(191, 198, 199, 192, 198, 138); //title "-CLOCK"
}
void loop(){
}
// -------------------------------------------------------------
// writeDisp (digit 1, 2, 3, 4, 5, 6)
// effect 0 = pop on, 1 = left to right, 2 = right to left
// effect 3 = shutter left right left, 4 shutter left right left
// -------------------------------------------------------------
void writeDisp(int d1, int d2, int d3, int d4, int d5, int d6){
int nowdisp[6] = {d1, d2, d3, d4, d5, d6};
int voldisp[6];
for (int i = 5; i >= 0; i--) {
voldisp[i] = disp[i];
disp[i] = nowdisp[i];
}
// POP ON
if (effect == 0) {
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, nowdisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
}
// WIPE LEFT TO RIGHT
else if (effect == 1) {
int blkdisp[6] = {255,255,255,255,255,255};
for (int g = 0; g <= 5; g++) {
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, voldisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
voldisp[g] = 255;
delay(effdel);
}
for (int g = 0; g <= 5; g++) {
blkdisp[g] = nowdisp[g];
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, blkdisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
delay(effdel);
}
}
// WIPE RIGHT TO LEFT
else if (effect == 2) {
int blkdisp[6] = {255,255,255,255,255,255};
for (int g = 5; g >= 0; g--) {
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, voldisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
voldisp[g] = 255;
delay(effdel);
}
for (int g = 5; g >= 0; g--) {
blkdisp[g] = nowdisp[g];
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, blkdisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
delay(effdel);
}
}
// SHUTTER LEFT TO RIGHT TO LEFT
else if (effect == 3) {
int blkdisp[6] = {255,255,255,255,255,255};
for (int g = 0; g <= 5; g++) {
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, voldisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
voldisp[g] = 255;
delay(effdel);
}
for (int g = 5; g >= 0; g--) {
blkdisp[g] = nowdisp[g];
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, blkdisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
delay(effdel);
}
}
// SHUTTER RIGHT TO LEFT TO RIGHT
else if (effect == 4) {
int blkdisp[6] = {255,255,255,255,255,255};
for (int g = 5; g >= 0; g--) {
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, voldisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
voldisp[g] = 255;
delay(effdel);
}
for (int g = 0; g <= 5; g++) {
blkdisp[g] = nowdisp[g];
for (int i = 5; i >= 0; i--) {
shiftOut(datPIN, clkPIN, MSBFIRST, blkdisp[i]);
}
digitalWrite(latPIN, 1);
digitalWrite(latPIN, 0);
delay(effdel);
}
}
}