erhankubat@hotmail.com
digital technology

Arduino 7 segment 4 digit sayaç

// 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);
}
Arduino para formatlama kütüphanesi
// paraFormat.h
#ifndef paraFormat_h
#define paraFormat_h
#include "Arduino.h"
class paraFormat {
  private:
    String format, ondalik;
    int tur, x, virgul;
  public:
    String cevir(double _sayi);
    String _str;
};
#endif
// paraFormat.cpp
#include "Arduino.h"
#include "paraFormat.h"
String paraFormat::cevir(double sayi) {
  _str = (String)sayi;
  _str.replace("." , ",");
  virgul = _str.indexOf(',');
  ondalik = _str.substring(virgul + 1, _str.length() - 1 - _str.indexOf(virgul));
  for (x = virgul; x > 0; x--) {
    if (tur++ == 3) {
      format = "." + format;
      tur = 1;
    }
    format = _str.substring(x - 1, x) + format;
  }
  _str = format + "," + ondalik + " TL";
  return _str;
}
// paraFormat.ino
#include "paraFormat.h"
paraFormat pf;
double sayi = 10206.12;
void setup() {
  Serial.begin(9600);
  Serial.println(sayi);
  Serial.println(pf.cevir(sayi) );
}
void loop() {
  // put your main code here, to run repeatedly:

}
Arduino CNC Handwheel ile LCD ekrana sayıcı uygulaması elCarki_LCD
  • // Developer Erhan Kubat
  • // 24.01.2021
  • // CNC Handwheel ile Lcd ekrana sayıcı uygulaması
  • #include <LiquidCrystal.h>
  • LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
  • #define led 13
  • int encoderPin1 = 2;
  • int encoderPin2 = 3;
  • volatile int lastEncoded = 0;
  • volatile long encoderValue = 0;
  • long lastencoderValue = 0;
  • int lastMSB = 0;
  • int lastLSB = 0;
  • int ledvalue = 0;
  • void setup() {
  • lcd.begin(16, 2);
  • lcd.clear();
  • lcd.setCursor(0, 0);
  • lcd.print("Handwheel Demo");
  • pinMode(encoderPin1, INPUT_PULLUP);
  • pinMode(encoderPin2, INPUT_PULLUP);
  • digitalWrite(encoderPin1, HIGH);
  • digitalWrite(encoderPin2, HIGH);
  • attachInterrupt(0, updateEncoder, CHANGE);
  • attachInterrupt(1, updateEncoder, CHANGE);
  • pinMode(led, OUTPUT);
  • digitalWrite(led, HIGH);
  • }
  • void loop() {
  • digitalWrite(led, LOW);
  • ledvalue = digitalRead(led);
  • lcd.setCursor(0, 1);
  • lcd.print(encoderValue / 4);lcd.print(" Pulse ");
  • delay(250);
  • }
  • void updateEncoder() {
  • int MSB = digitalRead(encoderPin1);
  • int LSB = digitalRead(encoderPin2);
  • int encoded = (MSB << 1) | LSB;
  • int sum = (lastEncoded << 2) | encoded;
  • if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue --;
  • if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue ++;
  • if (ledvalue == 0) lastEncoded = encoded;
  • }
Arduino programlamada kısa ve hızlı kodlama arduinoHizliKod_1
  • #define CLR(x,y) (x&=(~(1<<y)));
  • #define SET(x,y) (x|=(1<<y));
  • Bu kodlar "void setup()" satırının üstüne yazılır.
  • "void setup()" satırına "pinMode(x, OUTPUT);" olarak girilmeli.
  • "documentWrite(x, DURUM);" komutunu hızlı şekilde yerine getirir.
  • "SET(PORTB, 0);" komutu ile 8.pin HIGH durumuna gelir.
  • "CLR(PORTB, 0);" komutu ile 8.pin LOW durumuna gelir.
  • PORTB ise digital pinlerden 8-9-10-11-12 ve 13 pinler anlamına gelir.