/*4’ lü Segment Sayıcı: Arduino’ ya bağlı 2 adet buton ve 4’ lü 7 segment gösterge bulunacaktır.
1. butona her basmada segment üzerindeki sayı 0’ dan 9999'a kadar saymalıdır. İkinci buton ise
gösterge üzerindeki değeri azaltmalıdır. Butonlara basılı tuttukça her 50ms’ de bir segment üzerindeki
sayı artmalı ya da azalmalıdır.*/
int pinA=6;
int pinB=7;
int pinC=8;
int pinD=9;
int pinE=10;
int pinF=11;
int pinG=12;
int dig1=2;
int dig2=3;
int dig3=4;
int dig4=5;
int sw=A0;
int clk=A2;
int dt=A3;
unsigned long lastButton;
unsigned long lastEncoder = 0; // enkoder için kısa debounce
int sayi=0;
int lastClk;
void setup(){ // segment sayıcının bağlı olduğu tüm pinler OUTPUT, enkoderinkiler INPUT yapıldı.
Serial.begin(9600);
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
pinMode(pinE, OUTPUT);
pinMode(pinF, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(dig1, OUTPUT);
pinMode(dig2, OUTPUT);
pinMode(dig3, OUTPUT);
pinMode(dig4, OUTPUT);
pinMode(clk,INPUT_PULLUP);
pinMode(dt,INPUT_PULLUP);
pinMode(sw,INPUT_PULLUP);
lastClk = digitalRead(clk);
lastButton = 0;
}
void loop(){
unsigned long simdikiButton = millis();
int simdikiClk=digitalRead(clk);
if(simdikiClk!=lastClk){ //clk yönünde çevrilmişse yani önceki durumdan farklı mı diye kontrol ediyor.
// sadece yükselen kenarda sayıyı değiştirdim (çift tetiklemeyi önlemek için)
if(simdikiClk == HIGH ){
if(digitalRead(dt)==simdikiClk){ // clk yönünde sayı artıyor,dt yönünde sayı azalıyor
if(sayi>0){
sayi--;
}
} else {
if(sayi<9999){
sayi++;
}
}
}
}
lastClk=simdikiClk;
// sw butonu ile arttırma işlemi
if(digitalRead(sw) == LOW){
if(simdikiButton - lastButton > 50){ // 50 milisaniye arayla değişiyor
if(sayi < 9999){
sayi++;
}
lastButton = simdikiButton;
}
}
int basamak[4];
basamak[3]=sayi%10; //birler bsamağı
basamak[2]=(sayi/10)%10; // onlar basamağı
basamak[1]=(sayi/100)%10; //yüzler basamağı
basamak[0]=sayi/1000; // binler basamağı
for(int i=0;i<4;i++){
digitalWrite(dig1, LOW);//digitleri kapattım
digitalWrite(dig2, LOW);
digitalWrite(dig3, LOW);
digitalWrite(dig4, LOW);
digitalWrite(pinA, HIGH);//segmentleri kapattım
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
if(i==0){ // ilgili digit açılıyor
digitalWrite(dig1, HIGH);
}
if(i==1){
digitalWrite(dig2, HIGH);
}
if(i==2){
digitalWrite(dig3, HIGH);
}
if(i==3){
digitalWrite(dig4, HIGH);
}
int yak=basamak[i];
switch(yak){ // ilgili segmentler yanıyor
case 0:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, HIGH);
break;
case 1:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
break;
case 2:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW);
break;
case 3:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW);
break;
case 4:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
break;
case 5:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
break;
case 6:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
break;
case 7:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
break;
case 8:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
break;
case 9:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
break;
}
}
}