Multiplexing a multiple 7 segments with sharing anodes and common cathodes

I am trying to write my own code for multiplexing a 3 digit 7 segment display.

My sketch is unfinished, but can someone make sure that my functions actually will work if I implement them?

sorry if some of the terms I use are unclear, I am pretty new to Arduino and programming in general (but not too new ;))

int pinA = 0;
int pinB = 0;
int pinC = 0;
int pinD = 0;
int pinE = 0;
int pinF = 0;
int pinG = 0;
int blinkPin = 3;
void multiplexPins(const int pinA, const int pinB, const int pinC, const int pinD, int pinE, const int pinF, const int pinG, const int blinkPin){
  pinMode(pinA, OUTPUT);
  pinMode(pinB, OUTPUT);
  pinMode(pinC, OUTPUT);
  pinMode(pinD, OUTPUT);
  pinMode(pinE, OUTPUT);
  pinMode(pinF, OUTPUT);
  pinMode(pinG, OUTPUT);
  pinMode(blinkPin, OUTPUT);
  digitalWrite(blinkPin, HIGH);
}
void multiplex(int firstDigit, int secondDigit, int thirdDigit){
  int digits[3];
  int value = 0;
  digits[0] = firstDigit;
  digits[1] = secondDigit;
  digits[2] = thirdDigit;
  for(digits[value]; value < 3; value++){
    digitalWrite(blinkPin, LOW);
    switch(digits[value]){
      case 0:
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, LOW);
      break;
      case 1:
      digitalWrite(pinA, LOW);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, LOW);
      break;
      case 2:
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, LOW);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, HIGH);
      break;
      case 3:
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, HIGH);
      break;
      case 4:
      digitalWrite(pinA, LOW);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;
      case 5:
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, LOW);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;
      case 6:
      digitalWrite(pinA, LOW);
      digitalWrite(pinB, LOW);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;
      case 7:
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, LOW);
      digitalWrite(pinG, LOW);
      break;
      case 8:
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, HIGH);
      digitalWrite(pinE, HIGH);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;
      case 9:
      digitalWrite(pinA, HIGH);
      digitalWrite(pinB, HIGH);
      digitalWrite(pinC, HIGH);
      digitalWrite(pinD, LOW);
      digitalWrite(pinE, LOW);
      digitalWrite(pinF, HIGH);
      digitalWrite(pinG, HIGH);
      break;
    }
    delay(1);
    digitalWrite(blinkPin, HIGH);
  }

}
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Sorry! Posted this under the wrong area! I dont know how to fix it :confused:

That code is slightly muddled. The first function is passed a load of pin numbers totally unnecessarally.

The multiplex function should just do that multiplex do not mess about with setting up three arrays each time and then doing all of them. It should just refresh one digit, increment a global variable saying what digit to show next time and then exit. As it is there is not enough delay between the digits to see them.

That case statement is very turged the whole thing can be reduces to three lines if you use an array to hold your bit pattern.
http://www.thebox.myzen.co.uk/Tutorial/Arrays.html

Hi,
Do you have a circuit fr your project so you can associate sketch and hardware?

Can you please post a copy of your circuit, in CAD or a picture of a hand drawn circuit in jpg, png?

Tom.... :slight_smile: