a common cathode seven segment display library

Hi guys! I have made an improvement to the seven segment library I made a while ago.
The library works for common cathode ssds. You can copy the below code in a new tab for your sketch:

#include<Arduino.h>
int a;
int b;
int c;
int d;
int e;
int f;
int g;
void sevensegpins(int z, int y, int x, int w, int v, int u, int t){
  a=z;
  b=y;
  c=x;
  d=w;
  e=v;
  f=u;
  g=t;
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}
void clearall(){
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}
void zero(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void one(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void two(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(d, HIGH);
}
void three(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void four(){
  clearall();
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void five(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void six(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void seven(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void eight(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void nine(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
/*void a(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void b(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(g, HIGH);
}
void d(){
  clearall();
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void f(){  
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(g, HIGH);
  }
void h(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
}
void l(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void p(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void q(){
  nine()
}
void s(){
  five();
}
void u(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
}*/
void sevenseg(int val){
  if(val==0){
    zero();
  }
  if(val==1){
    one();
  }
  if(val==2){
    two();
  }
  if(val==3){
    three();
  }
  if(val==4){
    four();
  }
  if(val==5){
    five();
  }
  if(val==6){
    six();
  }
  if(val==7){
    seven();
  }
  if(val==8){
    eight();
  }
  if(val==9){
    nine();
  }
}


The sevensegpins()function will do the pinModes for you. Put the pins the segments A to G are connected in the brackets in order.
The sevensegfunction displays. Example: sevenseg(5);
This is a sample:

#include"sevenseg.h" //include the library
int val=0; //integer to store analog readings
void setup(){
  sevensegpins(13, 12, 11, 10, 9, 8, 7); //initialize the segment pins
}
void loop(){
  val=(analogRead(0));
  val=map(val, 0, 1023, 0, 9); //remap the sensor readings to 0-9
  sevenseg(val); //display the sensor readings on seven segment display
}

Thank you for looking at this! Please comment!

Why this line?

  pinMode(0, INPUT);

This will cause come ambiguity

void q(){
  nine()
}
void s(){
  five();
}

Why don't you do C, E, G, J, t, y

Congratulations!

What kind of comments are you looking for?

Now that you've posted that I'll post this one; compiles but otherwise untested.

#define ENTRY_COUNT(ARRAY)  (sizeof(ARRAY) / sizeof(ARRAY[0]))

class digit_t
{
    union {
        uint8_t _pins[7];
        struct  { uint8_t _A, _B, _C, _D, _E, _F, _G; };
    };

    digit_t();

public:
    digit_t(uint8_t pinA, uint8_t pinB, uint8_t pinC, uint8_t pinD, uint8_t pinE, uint8_t pinF, uint8_t pinG)
        : _A(pinA), _B(pinB), _C(pinC), _D(pinD), _E(pinE), _F(pinF), _G(pinG)
    {
        for ( int i = ENTRY_COUNT(_pins); i--; )
        {
            pinMode(_pins[i], OUTPUT);
        }
    }

    void display(uint8_t const value)
    {
        const uint8_t   segments[] =
        {
          //     ABCDEFG
              0b01111110    // 0
            , 0b00110000    // 1
            , 0b01101101    // 2
            , 0b01111001    // 3
            , 0b00110011    // 4
            , 0b01011011    // 5
            , 0b01011111    // 6
            , 0b01110000    // 7
            , 0b01111111    // 8
            , 0b01110011    // 9
        };

        for ( uint8_t mask = 0b01000000, i = 0; mask; mask>>= 1, i++ )
        {
            digitalWrite(_pins[i], ((segments[value] & mask) ? HIGH : LOW));
        }
    }
};

digit_t     digit(13, 12, 11, 10, 9, 8, 7);

void loop()
{
    int     value;
    value = analogRead(0);
    value = map(value, 0, 1023, 0, 9);  // remap the sensor readings to 0-9
    digit.display(value);               // display the sensor readings on seven segment display
}

void setup()
{}

Thank you @Riva! I fixed those mistakes and slightly changed the code:

#include<Arduino.h>
int a;
int b;
int c;
int d;
int e;
int f;
int g;
void sevensegpins(int z, int y, int x, int w, int v, int u, int t){
  a=z;
  b=y;
  c=x;
  d=w;
  e=v;
  f=u;
  g=t;
  pinMode(0, INPUT);
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}
void clearall(){
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}
void zero(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void one(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void two(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(d, HIGH);
}
void three(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void four(){
  clearall();
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void five(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void six(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void seven(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void eight(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void nine(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
}
void lettera(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void letterb(){
  clearall();
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(g, HIGH);
}
void letterc(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
}
void letterd(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
}
void lettere(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void letterf(){  
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(g, HIGH);
  }
void letterh(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
}
void letterl(){
  clearall();
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(d, HIGH);
}
void letterp(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void letterq(){
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}
void letters(){
  clearall();
  digitalWrite(a, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
}
void letteru(){
  clearall();
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
}
void sevenseg(int val){
  if(val==0){
    zero();
  }
  if(val==1){
    one();
  }
  if(val==2){
    two();
  }
  if(val==3){
    three();
  }
  if(val==4){
    four();
  }
  if(val==5){
    five();
  }
  if(val==6){
    six();
  }
  if(val==7){
    seven();
  }
  if(val==8){
    eight();
  }
  if(val==9){
    nine();
  }
}

Thank you @lloyddean for the encouragement! Your code is fabulous, but I don't really understand it. For instance, what does

0b01111110    // 0
            , 0b00110000    // 1
            , 0b01101101    // 2
            , 0b01111001    // 3
            , 0b00110011    // 4
            , 0b01011011    // 5
            , 0b01011111    // 6
            , 0b01110000    // 7
            , 0b01111111    // 8
            , 0b01110011    // 9

mean?

Ask all the questions you need.

Collectively they are and array of literal values in binary specification, note the leading '0b'. Specifying them in binary form allows then to be visualized easier.

As to the rest of it it is very worth learning how it works.

Please see this reference page http://www.cplusplus.com/doc/tutorial/operators/ and read about

'?:' conditional operator
',' comma operator
'&' bitwise operator, specifically 'and'
'>>' bitwise operators, shift-right
'>>=' compound assignment operator

and finally this page http://www.cplusplus.com/doc/tutorial/control/ and the section "The for loop"

Oh I get it! The digits beginning with 0b--each digit represents segments g to a! 0 is of, 1 is on. Am I right?
Also, some of the language looks like C or visual basic. How come it compiles with Arduino?
Thank you for being so helpful.
Habib

Correct! Read from left to right the left most bit is unused with the other 'A', 'B', 'C', etc. to 'G' as the right most bit.

The secret (not really secret) is that the 'Arduino Language' is in fact, surprise, C++! And the compiler is in fact a version of the GNU C++ compiler.

The jump from copy-n-paste code to classes might be too long...

I think you could start improving by learning how to use arrays. Also, avoid using single letter variables, use more meaningful names, e.g. pin_a, pin_b, ... pin_dp.

And that was what his very first question of the posted code was also concerned with.

A little advanced? Yes, surely, but I threw it out there to see how receptive he was to learning based on smaller version of the same code he had implemented.

Let's see how things go from here ...

EDIT: Oh, and I agree with you concerning more meaningful symbol names, but we had to start somewhere and I chose something along the lines of those he was using.

Just to clarify: my reply was not intended to be a criticism on your comment or (good) code. :slight_smile:

a common cathode seven segment display library

All you do differently (from the common anode routines) is to reverse the segment information sent to the segment pins.

You can easily use conditional compilation to drive both displays from one library.

Hi guys! I've given more meaningful names to the variables AND I've set a function so you can choose between common cathode and and common anode! Thanks everybody for the help and support!

#include<Arduino.h>
int pin_a;
int pin_b;
int pin_c;
int pin_d;
int pin_e;
int pin_f;
int pin_g;
int ON;
int OFF;
void sevensegpins(int z, int y, int x, int w, int v, int u, int t){
  pin_a=z;
  pin_b=y;
  pin_c=x;
  pin_d=w;
  pin_e=v;
  pin_f=u;
  pin_g=t;
  pinMode(pin_a, OUTPUT);
  pinMode(pin_b, OUTPUT);
  pinMode(pin_c, OUTPUT);
  pinMode(pin_d, OUTPUT);
  pinMode(pin_e, OUTPUT);
  pinMode(pin_f, OUTPUT);
  pinMode(pin_g, OUTPUT);
}
void common_cathode(boolean cathode){
  if(cathode==true){
    ON=HIGH;
    OFF=LOW;
  }
  else{
    ON=LOW;
    OFF=HIGH;
  }
}
void clearall(){
  digitalWrite(pin_a, OFF);
  digitalWrite(pin_b, OFF);
  digitalWrite(pin_c, OFF);
  digitalWrite(pin_d, OFF);
  digitalWrite(pin_e, OFF);
  digitalWrite(pin_f, OFF);
  digitalWrite(pin_g, OFF);
}
void zero(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
}
void one(){
  clearall();
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
}
void two(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_d, ON);
}
void three(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
}
void four(){
  clearall();
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
}
void five(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
}
void six(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
}
void seven(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
}
void eight(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void nine(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
}
void lettera(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void letterb(){
  clearall();
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_g, ON);
}
void letterB(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void letterc(){
  clearall();
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_g, ON);
}
void letterC(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
}
void letterd(){
  clearall();
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_g, ON);
}
void letterD(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
}
void lettere(){
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void letterE(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void letterf(){  
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_g, ON);
  }
void letterh(){
  clearall();
  digitalWrite(pin_c, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void letterH(){
  clearall();
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
}
void letterl(){
  clearall();
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
}
void letterL(){
  clearall();
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_d, ON);
}
void letterp(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void letterq(){
  digitalWrite(pin_a, ON);
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
}
void letters(){
  clearall();
  digitalWrite(pin_a, ON);
  digitalWrite(pin_f, ON);
  digitalWrite(pin_g, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
}
void letteru(){
  clearall();
  digitalWrite(pin_b, ON);
  digitalWrite(pin_c, ON);
  digitalWrite(pin_d, ON);
  digitalWrite(pin_e, ON);
  digitalWrite(pin_f, ON);
}
void sevenseg(int val){
  if(val==0){
    zero();
  }
  if(val==1){
    one();
  }
  if(val==2){
    two();
  }
  if(val==3){
    three();
  }
  if(val==4){
    four();
  }
  if(val==5){
    five();
  }
  if(val==6){
    six();
  }
  if(val==7){
    seven();
  }
  if(val==8){
    eight();
  }
  if(val==9){
    nine();
  }
}

this is a sample program:

#include"sevenseg.h"
int val=0;
void setup(){
  sevensegpins(13, 12, 11, 10, 9, 8, 7);
  common_cathode(true);
}
void loop(){
  val=(analogRead(0));
  val=map(val, 0, 1023, 0, 9);
  sevenseg(val);
}

Habib

Look at this line:

void sevensegpins(int z, int y, int x, int w, int v, int u, int t){

it's very hard (well, impossible in fact) to tell which letter relates to which display segment.

A library user (which could be you in a few months) should not have to read the code to understand how to call a function.

I think a better signature could be:

void sevensegpins(int a, int b, int c, int d, int e, int f, int g, int dp){

Yes, those are single letter variable names, that you should avoid. But I think they're pretty harmless in this context.

You're right! Than you so much!

:slight_smile:

And don't forget to learn arrays:

http://www.cplusplus.com/doc/tutorial/

Using 'switch' can simplify your code slightly,

void sevenseg(int val)
{
    switch ( val )
    {
        case 0:     zero();     break;
        case 1:     one();      break;
        case 2:     two();      break;
        case 3:     three();    break;
        case 4:     four();     break;
        case 5:     five();     break;
        case 6:     six();      break;
        case 7:     seven();    break;
        case 8:     eight();    break;
        case 9:     nine();     break;
    }
}

that beauty ctrl-t can't produce :smiley:

Further ...

void display(int pattern)
{
    digitalWrite(pin_a, ((0b01000000 & pattern) ? ON : OFF));
    digitalWrite(pin_b, ((0b00100000 & pattern) ? ON : OFF));
    digitalWrite(pin_c, ((0b00010000 & pattern) ? ON : OFF));
    digitalWrite(pin_d, ((0b00001000 & pattern) ? ON : OFF));
    digitalWrite(pin_e, ((0b00000100 & pattern) ? ON : OFF));
    digitalWrite(pin_f, ((0b00000010 & pattern) ? ON : OFF));
    digitalWrite(pin_g, ((0b00000001 & pattern) ? ON : OFF));
}

void sevenseg(int val)
{
    switch ( val )
    {
        case 0:  display(0b01111110);   break;    // 0
        case 1:  display(0b00110000);   break;    // 1
        case 2:  display(0b01101101);   break;    // 2
        case 3:  display(0b01111001);   break;    // 3
        case 4:  display(0b00110011);   break;    // 4
        case 5:  display(0b01011011);   break;    // 5
        case 6:  display(0b01011111);   break;    // 6
        case 7:  display(0b01110000);   break;    // 7
        case 8:  display(0b01111111);   break;    // 8
        case 9:  display(0b01110011);   break;    // 9
    }
}

tuxduino,

http://universalindent.sourceforge.net

thank you!