PaulRB:
I cannot open the sketch on my PC either, the file seems to be corrupt.
Yes, the file has 3617 leading 0x00's.
This is it:
#include <TimerOne.h>
//Define 74HC595 Connections with arduino
/*const int Data=A2;
const int Clock=A0;
const int Latch=A1;*/
#define Data A2
#define Clock A0
#define Latch A1
const int SEG0 = 4;
const int SEG1 = 5;
const int SEG2 = 6;
int cc = 0;
char Value[3];
//Refer Table 4.1 7-Segment Decoding
const char SegData[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
//=============================================================
// Setup
//=============================================================
void setup() {
// initialize the digital pin as an output.
//Serial.begin(9600);
pinMode(Data, OUTPUT);
pinMode(Clock, OUTPUT);
pinMode(Latch, OUTPUT);
pinMode(SEG0, OUTPUT);
pinMode(SEG1, OUTPUT);
pinMode(SEG2, OUTPUT);
//Initialize Display Scanner
cc = 0;
Timer1.initialize(4000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
Timer1.attachInterrupt( timerIsr ); // attach the service routine here
}
//=============================================================
// Loop
//=============================================================
int Voltage = 123;
void loop() {
char Volt[5];
//Display Voltage on Segments
sprintf(Volt, "%03d", Voltage); //We get ASCII array in Volt
//Serial.println(Volt);
Value[0] = Volt[0] & 0x0F; //Anding with 0x0F to remove upper nibble
Value[1] = Volt[1] & 0x0F; //Ex. number 2 in ASCII is 0x32 we want only 2
Value[2] = Volt[2] & 0x0F;
}
//=============================================================
// Generates Bargraph
//=============================================================
void DisplayDigit(char d)
{
int i;
for (i = 0; i < 8; i++) //Shift bit by bit data in shift register
{
if ((d & 0x80) == 0x80)
{
digitalWrite(Data, HIGH);
}
else
{
digitalWrite(Data, LOW);
}
d = d << 1;
//Give Clock pulse
digitalWrite(Clock, LOW);
digitalWrite(Clock, HIGH);
}
//Latch the data
digitalWrite(Latch, LOW);
digitalWrite(Latch, HIGH);
}
//===================================================================
// TIMER 1 OVERFLOW INTTERRUPT FOR DISPALY
//===================================================================
void timerIsr()
{
cc++;
if (cc == 4) //We have only 4 digits
{
cc = 1;
}
Scanner();
TCNT0 = 0xCC;
}
//===================================================================
// SCAN DISPLAY FUNCTION
//===================================================================
void Scanner()
{
switch (cc) //Depending on which digit is selcted give output
{
case 1:
digitalWrite(SEG2, HIGH);
DisplayDigit(SegData[Value[0]]);
digitalWrite(SEG0, LOW);
break;
case 2:
digitalWrite(SEG0, HIGH);
DisplayDigit(SegData[Value[1]]); //0x80 to turn on decimal point
digitalWrite(SEG1, LOW);
break;
case 3:
digitalWrite(SEG1, HIGH);
DisplayDigit(SegData[Value[2]]);
digitalWrite(SEG2, LOW);
break;
}
}
//===================================================================