No further response so, a possible simple (and untested) implementation.
/* =====================================================================================================================
* File - Soda.h
* ---------------------------------------------------------------------------------------------------------------------
*/
#ifndef Soda_H
#define Soda_H
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
class Soda
{
public:
enum { A, B, C, D, E, F, G, DP, PIN_COUNT, SEG_COUNT = DP };
Soda( const uint8_t segOff, const uint8_t segOn
, uint8_t segA, uint8_t segB, uint8_t segC, uint8_t segD, uint8_t segE, uint8_t segF, uint8_t segG
, uint8_t segDP);
void write(uint8_t const digit); // Display Numeral
void write(uint8_t const segment, bool const state); // Turn Segment Off, On
private:
// --- Instance Constants
const uint8_t kSEG_OFF;
const uint8_t kSEG_ON;
uint8_t _pins[PIN_COUNT];
void init(uint8_t segA, uint8_t segB, uint8_t segC, uint8_t segD, uint8_t segE, uint8_t segF, uint8_t segG
, uint8_t segDP);
Soda(); // don't allow accidental construction
};
#endif
/* =====================================================================================================================
* File - Soda.cpp
* ---------------------------------------------------------------------------------------------------------------------
*/
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include "Soda.h"
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
Soda::Soda(
const uint8_t segOff, const uint8_t segOn
, uint8_t segA, uint8_t segB, uint8_t segC, uint8_t segD, uint8_t segE, uint8_t segF, uint8_t segG, uint8_t segDP)
: kSEG_OFF(segOff), kSEG_ON(segOn)
{
init(segA, segB, segC, segD, segE, segF, segG, segDP);
}
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
void Soda::init(
uint8_t segA, uint8_t segB, uint8_t segC, uint8_t segD, uint8_t segE, uint8_t segF, uint8_t segG, uint8_t segDP)
{
uint8_t* ptrDst = _pins;
*ptrDst++ = segA;
*ptrDst++ = segB;
*ptrDst++ = segC;
*ptrDst++ = segD;
*ptrDst++ = segE;
*ptrDst++ = segF;
*ptrDst++ = segG;
*ptrDst++ = segDP;
for ( size_t i = PIN_COUNT; i--; )
{
pinMode(_pins[i], OUTPUT);
digitalWrite(_pins[i], kSEG_OFF);
}
}
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
void Soda::write(uint8_t const digit)
{
static const uint8_t _bits[] =
{
// ABCDEFG
0b01111110 // 0
, 0b00110000 // 1
, 0b01101101 // 2
, 0b01111001 // 3
, 0b00110011 // 4
, 0b01011011 // 5
, 0b01011111 // 6
, 0b01110000 // 7
, 0b01111111 // 8
, 0b01111011 // 9
};
uint8_t bits = _bits[digit];
for ( size_t i = SEG_COUNT; i--; bits >>= 1 )
{
digitalWrite(_pins[i], ((bits & 0b00000001) ? kSEG_ON : kSEG_OFF));
}
}
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
void Soda::write(uint8_t segment, bool state)
{
digitalWrite(_pins[segment], ((state) ? kSEG_ON : kSEG_OFF));
}
/* =====================================================================================================================
* File - Digit.pde
* ---------------------------------------------------------------------------------------------------------------------
*/
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include "Soda.h"
const uint8_t pinSEG_A = 2;
const uint8_t pinSEG_B = 3;
const uint8_t pinSEG_C = 4;
const uint8_t pinSEG_D = 5;
const uint8_t pinSEG_E = 6;
const uint8_t pinSEG_F = 7;
const uint8_t pinSEG_G = 8;
const uint8_t pinSEG_DP = 9;
const uint8_t SEG_OFF = LOW;
const uint8_t SEG_ON = HIGH;
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
Soda digit(SEG_OFF, SEG_ON, pinSEG_A, pinSEG_B, pinSEG_C, pinSEG_D, pinSEG_E, pinSEG_F, pinSEG_A, pinSEG_DP);
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
void loop()
{}
/* =====================================================================================================================
* ---------------------------------------------------------------------------------------------------------------------
*/
void setup()
{
digit.write(Soda::A, true); // Light Segment A
digit.write(0); // Display Numeral Zero
}
EDIT: Modified to suit your pin numbers!