//#include <SevenSeg.h>
#include "SevenSeg.h"
const byte ledPin = 13;
#define led 7
#define seg3 40
#define seg2 41
#define seg1 42
const int Gnd = 6;
const int trig_led = 2;
volatile byte state = false;
//Defines the segments A-G: SevenSeg(A, B, C, D, E, F, G);
SevenSeg disp (30,31,32,33,34,35,36);
//Number of 7 segments
const int numOfDigits =3;
//CC(or CA) pins of segment
int digitPins [numOfDigits]={40,41,42};
/****Variables*****/
char number;
int flag=0;
int cSer=0;
int iX=0;
int iY=0; // Jumlah digit yang akan ditampilkan
int iEks=0;
int i;
int x;
String data="";
//void segmen ();
//void bling();
/****Array*****/
int tmpArr[4]={255,255,255,255}; // yg data dari serial tampung sini
int dsegArr[4]={255,255,255,255}; // data yang ditampilkan di 7 segmen tampung disini
void setup()
{
Serial.begin(9600);
//Defines the number of digits to be "numOfDigits" and the digit pins to be the elements of the array "digitPins"
disp.setDigitPins ( numOfDigits , digitPins );
//Only for common cathode 7segments
disp.setCommonAnode();
//Control brightness (values 0-100);
disp.setDutyCycle(50);
pinMode(Gnd, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(2, INPUT);
pinMode(seg1,OUTPUT);
pinMode(seg2,OUTPUT);
pinMode(seg3,OUTPUT);
pinMode(led,OUTPUT);
// attachInterrupt(digitalPinToInterrupt(2), segmen, CHANGE);
}
/*number=Serial.read();
*/
/*
---- ALUR PROCEDURE MENERIMA DATA SERIAL ----
1. Tampung Data Serial ke Var Number
2. Kurangi isi data number dengan 0x30 , hasilnya adalah index ke table segment
3. Pindahakan data ke array table tmpArr[]
4. Cek data serial apakah data terakhir 0x0A atau 0x0D
Y : Update data segmen , copy tmpArr[] -> dsegArr[]
Debug Diserial Monitor , memastikan data benar
Variable Counter iX di Nolkan
Catat nilai variable iY
N : Keluar Prosedure , Next Prosedure
*/
void loop(){
if(Serial.available() > 0)
{
number=Serial.read();
int inChar = number;
if(isDigit(inChar))data += (char)inChar;
if(inChar=='\n'|| inChar=='\r'){
x=data.toInt();
Serial.print("value");
Serial.println(x);
Serial.println(x);
for(i=0; i<x; i++){
digitalWrite(ledPin, state);
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
delay(100);
}
data="";
}
/*
---- ALUR PROCEDURE MENERIMA DATA SERIAL ----
1. Tampung Data Serial ke Var Number
2. Kurangi isi data number dengan 0x30 , hasilnya adalah index ke table segment
3. Pindahakan data ke array table tmpArr[]
4. Cek data serial apakah data terakhir 0x0A atau 0x0D
Y : Update data segmen , copy tmpArr[] -> dsegArr[]
Debug Diserial Monitor , memastikan data benar
Variable Counter iX di Nolkan
Catat nilai variable iY
N : Keluar Prosedure , Next Prosedure
*/
tmpArr[iX++] = number-48;
if (number==13 || number==10)
{
for(iY=0; iY<iX; iY++){dsegArr[iY]=tmpArr[iY];}
if(iY==4)
{
Serial.print("Ratusan segment display:");
Serial.println(dsegArr[0]);
Serial.print("Puluhan segment display:");
Serial.println(dsegArr[1]);
Serial.print("Satuan segment display:");
Serial.println(dsegArr[2]);
}
if(iY==3)
{
Serial.print("Ratusan segment display:");
Serial.println('0');
Serial.print("Puluhan segment display:");
Serial.println(dsegArr[0]);
Serial.print("Satuan segment display:");
Serial.println(dsegArr[1]);
}
if(iY==2)
{
Serial.print("Ratusan segment display:");
Serial.println('0');
Serial.print("Puluhan segment display:");
Serial.println('0');
Serial.print("Satuan segment display:");
Serial.println(dsegArr[0]);
/*iEks = dsegArr[0];
for (int ex = 0; ex < iEks; ex++){
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
}*/
}
iX=0;
}
}
/*
---- ALUR PROCEDURE MENERIMA DATA SERIAL ----
1. Cek Nilai Variable iY
2. iY==4 -> 3 digit segmen ON, PROCEDURE satuan dan puluhan dan ratusan
2. iY==3 -> 2 digit segmen ON, PROCEDURE satuan dan puluhan
2. iY==2 -> 1 digit segmen ON, PROCEDURE hanya satuan
3. Atur Delay scanning ON/OFF 7 segmen
4. Keluar PROCEDURE kembali ke program utama
*/
if(iY==4)
{
disp.writeDigit(dsegArr[0]);
digitalWrite(seg3, LOW);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, HIGH);
delayMicroseconds(100);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, HIGH);
/*iEks = dsegArr[0] * 100;
for (int q = 0; q < iEks; q++){
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
}*/
disp.writeDigit(dsegArr[1]);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, LOW);
digitalWrite(seg1, HIGH);
delayMicroseconds(100);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, HIGH);
delayMicroseconds(100);
/*iEks = dsegArr[1] * 10;
for (int q = 0; q < iEks; q++){
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
}*/
disp.writeDigit(dsegArr[2]);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, LOW);
delayMicroseconds(100);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, HIGH);
delayMicroseconds(100);
/*iEks = dsegArr[2];
for (int q = 0; q < iEks; q++){
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
}*/
}
if(iY==3)
{
disp.writeDigit(dsegArr[0]);
digitalWrite(seg2, LOW);
digitalWrite(seg1, HIGH);
delayMicroseconds(100);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, HIGH);
/*iEks = dsegArr[0] * 10;
for (int q = 0; q < iEks; q++){
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
}*/
disp.writeDigit(dsegArr[1]);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, LOW);
delayMicroseconds(100);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, HIGH);
delayMicroseconds(100);
/*iEks = dsegArr[1];
for (int q = 0; q < iEks; q++){
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
}*/
}
if(iY==2)
{
disp.writeDigit(dsegArr[0]);
digitalWrite(seg1, LOW);
delayMicroseconds(100);
digitalWrite(seg3, HIGH);
digitalWrite(seg2, HIGH);
digitalWrite(seg1, HIGH);
//delayMicroseconds(100);
/*iEks = tmpArr[0];
for (int q = 0; q < iEks; q++){
digitalWrite(led, LOW);
delay(500);
digitalWrite(led, HIGH);
delay(500);
}*/
}
}