/*
 * Digital I/O (dual 7-segment display board) lab sketch.
 *
 * This sketch demonstrates the use of a 7-segment display using direct-access to
 * each of the digit's segments.  The function of this program is left as an exercise
 * to the lab student.
 *
 * The arrangement of the digit's LED segments "a" through "g" are documented in the
 * datasheet for the display.  This display is a common-anode type unit.
 *
 * v1.00 Eric B. Wertz 2011/09/19 00:03 - Initial revision
 */

// Arduino digital pin numbers for left-digit direct segment access
#define LDIGIT_DIRECT_A  8
#define LDIGIT_DIRECT_B  7
#define LDIGIT_DIRECT_C  6
#define LDIGIT_DIRECT_D  5
#define LDIGIT_DIRECT_E  4
#define LDIGIT_DIRECT_F  3
#define LDIGIT_DIRECT_G  2

// min/max pin numbers for looping through all the digit's pins (assumes contiguous pin numbers!)
#define LDIGIT_DIRECT_MIN 2
#define LDIGIT_DIRECT_MAX 8

#define DELAY_BLINK_MSECS 500 // milliseconds between blinks

void leftDigitOff()
{
  byte pin;
  
  for (pin=LDIGIT_DIRECT_MIN; pin<=LDIGIT_DIRECT_MAX; pin++) {
    digitalWrite(pin, HIGH);
  }
}
 
void setup()
{
  byte pin;
  
  for (pin=LDIGIT_DIRECT_MIN; pin<=LDIGIT_DIRECT_MAX; pin++) {
    pinMode(pin, OUTPUT);
  }
}

void loop()
{
  leftDigitOff();
  
  delay(DELAY_BLINK_MSECS);
  
  digitalWrite(LDIGIT_DIRECT_A, LOW);
  digitalWrite(LDIGIT_DIRECT_B, LOW);
  digitalWrite(LDIGIT_DIRECT_C, LOW);
  digitalWrite(LDIGIT_DIRECT_D, LOW);
  digitalWrite(LDIGIT_DIRECT_E, HIGH);
  digitalWrite(LDIGIT_DIRECT_F, HIGH);
  digitalWrite(LDIGIT_DIRECT_G, LOW);
  
  delay(DELAY_BLINK_MSECS);
}