// 4 digit 7 segment ANOT display Hazırlayan Erhan Kubat 07.02.2021
int dongu = 0;
#define A 2
#define B 3
#define C 4
#define D 5
#define E 7
#define F 8
#define G 12
#define DP 13
byte parlaklik = 255;
byte digi[] = {4, 11, 10, 9, 6};
bool biraktimiA0 = true;
bool biraktimiA1 = true;
float dly = 2;
int tur = 50;
int sayi, binler, yuzler, onlar, birler, sayac;
void setup() {
Serial.begin(9600);
pinMode(digi[4], OUTPUT);
pinMode(digi[3], OUTPUT);
pinMode(digi[2], OUTPUT);
pinMode(digi[1], OUTPUT);
pinMode(A, OUTPUT); // A
pinMode(B, OUTPUT); // B
pinMode(C, OUTPUT); // C
pinMode(D, OUTPUT); // D
pinMode(E, OUTPUT); // E
pinMode(F, OUTPUT); // F
pinMode(G, OUTPUT); // G
pinMode(DP, OUTPUT); // DP
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
analogWrite(digi[4], 0);
analogWrite(digi[3], 0);
analogWrite(digi[2], 0);
analogWrite(digi[1], 0);
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
sayi = 0;
}
void loop() {
timer_1(); delay(dly);
timer_2(); delay(dly);
timer_3(); delay(dly);
timer_4(); delay(dly);
if (digitalRead(A0) == LOW && biraktimiA0) {
tur++; biraktimiA0 = false;
}
if (digitalRead(A0) == HIGH) biraktimiA0 = true;
if (digitalRead(A1) == LOW && biraktimiA1) {
tur--; biraktimiA1 = false;
}
if (digitalRead(A1) == HIGH) biraktimiA1 = true;
if (tur < 0) tur = 0;
Serial.println(tur);
if (sayac++ >= tur) {
sayi++;
sayac = 0;
}
if (sayi > 9999) sayi = 0;
}
void timer_1() {
basamaklaraAyir();
analogWrite(digi[1], parlaklik);
analogWrite(digi[2], 0);
analogWrite(digi[3], 0);
analogWrite(digi[4], 0);
switch (birler) {
case 0: sifir(); break;
case 1: bir(); break;
case 2: iki(); break;
case 3: uc(); break;
case 4: dort(); break;
case 5: bes(); break;
case 6: alti(); break;
case 7: yedi(); break;
case 8: sekiz(); break;
case 9: dokuz(); break;
}
}
void timer_2() {
basamaklaraAyir();
analogWrite(digi[1], 0);
analogWrite(digi[2], parlaklik);
analogWrite(digi[3], 0);
analogWrite(digi[4], 0);
switch (onlar) {
case 0: if (sayi > 99) {
sifir(); break;
} else {
bos(); break;
}
case 1: bir(); break;
case 2: iki(); break;
case 3: uc(); break;
case 4: dort(); break;
case 5: bes(); break;
case 6: alti(); break;
case 7: yedi(); break;
case 8: sekiz(); break;
case 9: dokuz(); break;
}
}
void timer_3() {
basamaklaraAyir();
analogWrite(digi[1], 0);
analogWrite(digi[2], 0);
analogWrite(digi[3], parlaklik);
analogWrite(digi[4], 0);
switch (yuzler) {
case 0: if (sayi > 999) {
sifir(); break;
} else {
bos(); break;
}
case 1: bir(); break;
case 2: iki(); break;
case 3: uc(); break;
case 4: dort(); break;
case 5: bes(); break;
case 6: alti(); break;
case 7: yedi(); break;
case 8: sekiz(); break;
case 9: dokuz(); break;
}
}
void timer_4() {
basamaklaraAyir();
analogWrite(digi[1], 0);
analogWrite(digi[2], 0);
analogWrite(digi[3], 0);
analogWrite(digi[4], parlaklik);
switch (binler) {
case 0: bos(); break;
case 1: bir(); digitalWrite(DP, LOW); break;
case 2: iki(); digitalWrite(DP, LOW); break;
case 3: uc(); digitalWrite(DP, LOW); break;
case 4: dort(); digitalWrite(DP, LOW); break;
case 5: bes(); digitalWrite(DP, LOW); break;
case 6: alti(); digitalWrite(DP, LOW); break;
case 7: yedi(); digitalWrite(DP, LOW); break;
case 8: sekiz(); digitalWrite(DP, LOW); break;
case 9: dokuz(); digitalWrite(DP, LOW); break;
}
}
void basamaklaraAyir() {
int gsayi = sayi;
if (gsayi < 100) gsayi = gsayi + 100;
binler = (sayi >= 1000) ? gsayi / 1000 : 0;
yuzler = (gsayi / 100) % 10 ;
onlar = (gsayi / 10) % 10;
birler = gsayi % 10;
if (sayi < 100) yuzler = 0;
if (sayi < 10) onlar = 0;
}
void bos() {
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void sifir() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void bir() {
digitalWrite(A, HIGH);
digitalWrite(B, LOW );
digitalWrite(C, LOW );
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void iki() {
digitalWrite(A, LOW );
digitalWrite(B, LOW );
digitalWrite(C, HIGH);
digitalWrite(D, LOW );
digitalWrite(E, LOW );
digitalWrite(F, HIGH);
digitalWrite(G, LOW );
digitalWrite(DP, HIGH);
}
void uc() {
digitalWrite(A, LOW );
digitalWrite(B, LOW );
digitalWrite(C, LOW );
digitalWrite(D, LOW );
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, LOW );
digitalWrite(DP, HIGH);
}
void dort() {
digitalWrite(A, HIGH);
digitalWrite(B, LOW );
digitalWrite(C, LOW );
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW );
digitalWrite(G, LOW );
digitalWrite(DP, HIGH);
}
void bes() {
digitalWrite(A, LOW );
digitalWrite(B, HIGH);
digitalWrite(C, LOW );
digitalWrite(D, LOW );
digitalWrite(E, HIGH);
digitalWrite(F, LOW );
digitalWrite(G, LOW );
digitalWrite(DP, HIGH);
}
void alti() {
digitalWrite(A, LOW );
digitalWrite(B, HIGH);
digitalWrite(C, LOW );
digitalWrite(D, LOW );
digitalWrite(E, LOW );
digitalWrite(F, LOW );
digitalWrite(G, LOW );
digitalWrite(DP, HIGH);
}
void yedi() {
digitalWrite(A, LOW );
digitalWrite(B, LOW );
digitalWrite(C, LOW );
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, LOW );
digitalWrite(G, HIGH);
digitalWrite(DP, HIGH);
}
void sekiz() {
digitalWrite(A, LOW );
digitalWrite(B, LOW );
digitalWrite(C, LOW );
digitalWrite(D, LOW );
digitalWrite(E, LOW );
digitalWrite(F, LOW );
digitalWrite(G, LOW );
digitalWrite(DP, HIGH);
}
void dokuz() {
digitalWrite(A, LOW );
digitalWrite(B, LOW );
digitalWrite(C, LOW );
digitalWrite(D, LOW );
digitalWrite(E, HIGH);
digitalWrite(F, LOW );
digitalWrite(G, LOW );
digitalWrite(DP, HIGH);
}