I just got my Arduino this week and this was also my first library. Mine is a little lighter and may help other beginners seeing another implementation. One note is that I do not have a variable for common anode/cathode. I was assuming the user would wire that pin accordingly themselves. It does have a variable for right hand decimal point (RHDP).
Initialize the class by passing your pin numbers as arguments. The write function takes an integer argument 0-9 and prints out the readable version on the seven segment display.
SevenSegment.h
/*
SevenSegment.h - Seven Segment Display Library
These functions print readable numbers to seven segment display
Created 1 August 2010
By NanoDano
nanodano@ph33d.us
*/
#ifndef _SevenSegment_h
#define _SevenSegment_h
#include "WProgram.h"
/*************************************************
* Definitions
*************************************************/
class SevenSegment {
public:
SevenSegment(int anodeA, int anodeB, int anodeC, int anodeD, int anodeE, int anodeF, int anodeG, int RHDP); // Pass NULL for RHDP if unavailable
void write(int input);
private:
int _anodeA;
int _anodeB;
int _anodeC;
int _anodeD;
int _anodeE;
int _anodeF;
int _anodeG;
int _RHDP;
};
#endif
SevenSegment.cpp
/*
SevenSegment.cpp - Seven Segment Display Library
These functions print readable numbers to seven segment display
The circuit:
* Seven segment display hooked to Arduino
Created 1 August 2010
By NanoDano
nanodano@ph33d.us
*/
#include "SevenSegment.h"
SevenSegment::SevenSegment(int anodeA, int anodeB, int anodeC, int anodeD, int anodeE, int anodeF, int anodeG, int RHDP) {
pinMode(anodeA, OUTPUT);
pinMode(anodeB, OUTPUT);
pinMode(anodeC, OUTPUT);
pinMode(anodeD, OUTPUT);
pinMode(anodeE, OUTPUT);
pinMode(anodeF, OUTPUT);
pinMode(anodeG, OUTPUT);
_anodeA = anodeA;
_anodeB = anodeB;
_anodeC = anodeC;
_anodeD = anodeD;
_anodeE = anodeE;
_anodeF = anodeF;
_anodeG = anodeG;
if (RHDP) {
pinMode(RHDP, OUTPUT);
_RHDP = RHDP;
}
}
void SevenSegment::write(int input) {
switch (input) {
case 0:
digitalWrite(_anodeF, HIGH);
digitalWrite(_anodeG, LOW);
digitalWrite(_anodeE, HIGH);
digitalWrite(_anodeD, HIGH);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, HIGH);
break;
case 1:
digitalWrite(_anodeF, LOW);
digitalWrite(_anodeG, LOW);
digitalWrite(_anodeE, LOW);
digitalWrite(_anodeD, LOW);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, LOW);
break;
case 2:
digitalWrite(_anodeF, LOW);
digitalWrite(_anodeG, HIGH);
digitalWrite(_anodeE, HIGH);
digitalWrite(_anodeD, HIGH);
digitalWrite(_anodeC, LOW);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, HIGH);
break;
case 3:
digitalWrite(_anodeF, LOW);
digitalWrite(_anodeG, HIGH);
digitalWrite(_anodeE, LOW);
digitalWrite(_anodeD, HIGH);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, HIGH);
break;
case 4:
digitalWrite(_anodeF, HIGH);
digitalWrite(_anodeG, HIGH);
digitalWrite(_anodeE, LOW);
digitalWrite(_anodeD, LOW);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, LOW);
break;
case 5:
digitalWrite(_anodeF, HIGH);
digitalWrite(_anodeG, HIGH);
digitalWrite(_anodeE, LOW);
digitalWrite(_anodeD, HIGH);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, LOW);
digitalWrite(_anodeA, HIGH);
break;
case 6:
digitalWrite(_anodeF, HIGH);
digitalWrite(_anodeG, HIGH);
digitalWrite(_anodeE, HIGH);
digitalWrite(_anodeD, HIGH);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, LOW);
digitalWrite(_anodeA, HIGH);
break;
case 7:
digitalWrite(_anodeF, LOW);
digitalWrite(_anodeG, LOW);
digitalWrite(_anodeE, LOW);
digitalWrite(_anodeD, LOW);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, HIGH);
break;
case 8:
digitalWrite(_anodeF, HIGH);
digitalWrite(_anodeG, HIGH);
digitalWrite(_anodeE, HIGH);
digitalWrite(_anodeD, HIGH);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, HIGH);
break;
case 9:
digitalWrite(_anodeF, HIGH);
digitalWrite(_anodeG, HIGH);
digitalWrite(_anodeE, LOW);
digitalWrite(_anodeD, HIGH);
digitalWrite(_anodeC, HIGH);
digitalWrite(_anodeB, HIGH);
digitalWrite(_anodeA, HIGH);
break;
}
}
Sketch Example
/*
SevenSegCount
This sketch shows how to use the SevenSegment class to easily
print readable numbers 0-9 on a seven segment display
The circuit:
* Seven Segment display hooked up to Arduino
Created 1 August 2010
By NanoDano
nanadano@ph33d.us
*/
#include <SevenSegment.h>
void setup() {
}
void loop() {
//Initialize a SevenSegment class named ss
SevenSegment ss(7, 8, 9, 10, 11, 13, 12, 6);
// Print out each number from 0 to 9
for (int i = 0; i < 10; i++) {
ss.write(i);
delay(250);
}
}
A couple final remarks: my code in this post is unrelated to the original posters code. I made this independently and they aren't meant to be used together. I felt it was unnecessary to create a new thread for the same topic though. This is my first library too so it is meant to be lightweight. (This is my first post, too!)