Skip to content

Instantly share code, notes, and snippets.

@izzuddin91
Created September 1, 2017 14:18
Show Gist options
  • Select an option

  • Save izzuddin91/a673deb52cc819a6d4a700c14db69016 to your computer and use it in GitHub Desktop.

Select an option

Save izzuddin91/a673deb52cc819a6d4a700c14db69016 to your computer and use it in GitHub Desktop.
7 segment with decimal point light up at the first point
int segA = 3; // top
int segB = 4; // right-top
int segC = 5; // right-bottom
int segD = 6; // bottom
int segE = 7; // left-bottom
int segF = 8; // left-top
int segG = 9; // middle
int dp = 10;
int digit1 = 14; // common cathode for digit1 (i.e. A0)
int digit2 = 15; // common cathode for digit2 (i.e. A1)
int digit3 = 16; // common cathode for digit3 (i.e. A2)
int digit4 = 17; // common cathode for digit4 (i.e. A3)
// Number to display
static int number = 0;
static int ms = 0;
String inData;
int collectedNumber;
int blinkRate=0;
//==============================================================//
void setup()
{
Serial.begin(9600);
// All pins in digital mode
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(dp, OUTPUT);
}
//==============================================================//
void loop() {
if(Serial.available()){
char ch = Serial.read();
inData += ch;
Serial.println(inData);
number = inData.toInt();
}else{
inData = "";
}
digitalWrite(digit1, LOW);
// light on segments for 'thousands'
drawDigitFast( (number/1000) % 10, HIGH );
// wait 2 ms
delay(2);
// turn off all segments
drawDigitFast( -1, LOW );
// turn off cathode for digit1
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
drawDigitFast( (number/100) % 10, LOW );
delay(2);
drawDigitFast( -1, LOW );
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
drawDigitFast( (number/10) % 10, LOW );
delay(2);
drawDigitFast( -1, LOW );
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
drawDigitFast( number % 10, LOW );
delay(2);
drawDigitFast( -1, LOW );
digitalWrite(digit4, HIGH);
}
//-----------------------------------------------------//
//takes another params, dpValue untuk light up decimal point atau x
void drawDigitFast(int n, bool dpValue)
{
const byte aPins[8] = {
segA, segB, segC, segD, segE, segF, segG
};
const byte aSegments[11][8] = {
// A B C D E F G
{ HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW }, // 0
{ LOW, HIGH, HIGH, LOW, LOW, LOW, LOW }, // 1
{ HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH }, // 2
{ HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH }, // 3
{ LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH }, // 4
{ HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH }, // 5
{ HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH }, // 6
{ HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW }, // 7
{ HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH }, // 8
{ HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH }, // 9
{ LOW, LOW, LOW, LOW, LOW, LOW, LOW } // all off
};
if( n < 0 || n > 10 )
{
n = 10;
}
for( int i = 0; i < 7; i++ )
{
digitalWrite( aPins[i], aSegments[n][i] );
}
digitalWrite(dp, dpValue);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment