/*
//SEGMENT TANIMLAMA
#define pinA 6
#define pinB 7
#define pinC 8
#define pinD 9
#define pinE 10
#define pinF 11
#define pinG 12
#define pinDP 13
//SEGMENT DİGİT TANIMLAMA
#define D1 2
#define D2 3
#define D3 4
#define D4 5
const int sseg[] = {pinA, pinB, pinC, pinD, pinE, pinF, pinG, pinDP};
const int digitpins[] = {D4,D3,D2,D1};
int currentDigitPin = 0;
//keypad tanımlama
#define R1 14
#define R2 15
#define R3 16
#define R4 17
#define C1 18
#define C2 19
#define C3 20
#define C4 21
int rows = 4;
int cols = 4;
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'},
};
const int krows[] = {R1, R2, R3, R4};
const int kcols[] = {C1, C2, C3, C4};
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(sseg[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(digitpins[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(krows[i], OUTPUT);
digitalWrite(krows[i], HIGH);
}
for (int i = 0; i < 4; i++) {
pinMode(kcols[i], INPUT_PULLUP);
}
}
void loop() {
char key = getKey();
if (key != '\0') {
// Burada tuşa basıldığında yapılması gereken diğer işlemleri ekleyebilirsiniz.
// Sadece ilgili digit pin'i yak
digitalWrite(digitpins[currentDigitPin], LOW);
// 7 segment display'e değeri gönder
displayNumberOnSegment(key);
// Bekleme süresi
delay(10);
// 7 segment display'inin bulunduğu digit pin'ini kapat
digitalWrite(digitpins[currentDigitPin], HIGH);
// Bir sonraki digit pin'ini seç
currentDigitPin++;
// Eğer son digit pin'ine ulaşıldıysa sıfıra döndür
if (currentDigitPin >= 4) {
currentDigitPin = 0;
}
}
}
char getKey() {
for (int i = 0; i < 4; i++) {
digitalWrite(krows[i], LOW);
for (int k = 0; k < 4; k++) {
if (digitalRead(kcols[k]) == LOW) {
delay(50); // Debounce süresi
while (digitalRead(kcols[k]) == LOW)
; // Tuş bırakılana kadar bekle
digitalWrite(krows[i], HIGH);
return keys[i][k];
}
}
digitalWrite(krows[i], HIGH);
}
return '\0'; // Hiçbir tuşa basılmadı
}
void displayNumberOnSegment(char number) {
const byte numbers[][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 0, 0, 1, 1} // 9
};
for (int i = 0; i < 7; i++) {
digitalWrite(sseg[i], numbers[number - '0'][i] ? HIGH : LOW);
}
}
*/
// SEGMENT TANIMLAMA
#define pinA 6
#define pinB 7
#define pinC 8
#define pinD 9
#define pinE 10
#define pinF 11
#define pinG 12
#define pinDP 13
// SEGMENT DİGİT TANIMLAMA
#define D1 2
#define D2 3
#define D3 4
#define D4 5
const int sseg[] = {pinA, pinB, pinC, pinD, pinE, pinF, pinG, pinDP};
const int digitpins[] = {D1, D2, D3, D4};
int currentDigitPin = 0;
// KEYPAD TANIMLAMA
#define R1 14
#define R2 15
#define R3 16
#define R4 17
#define C1 18
#define C2 19
#define C3 20
#define C4 21
int rows = 4;
int cols = 4;
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'},
};
const int krows[] = {R1, R2, R3, R4};
const int kcols[] = {C1, C2, C3, C4};
void setup() {
for (int i = 0; i < 8; i++) {
pinMode(sseg[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(digitpins[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(krows[i], OUTPUT);
digitalWrite(krows[i], HIGH);
}
for (int i = 0; i < 4; i++) {
pinMode(kcols[i], INPUT_PULLUP);
}
Serial.begin(115200);
}
char key = '\0';
void loop() {
// key = getKey();
digitalWrite(digitpins[currentDigitPin], HIGH);
// 7 segment display'e değeri gönder
displayNumberOnSegment('1');
// Bekleme süresi
delay(10);
// Mevcut digit pin'ini kapat
digitalWrite(digitpins[currentDigitPin], LOW);
// Bir sonraki digit pin'ini seç
currentDigitPin++;
// Eğer son digit pin'ine ulaşıldıysa sıfıra döndür
if (currentDigitPin >= 4) {
currentDigitPin = 0;
}
if (key != '\0') {
// Sadece ilgili digit pin'i yak
digitalWrite(digitpins[currentDigitPin], HIGH);
// 7 segment display'e değeri gönder
displayNumberOnSegment(key);
Serial.println(key);
// Bekleme süresi
delay(10);
// Mevcut digit pin'ini kapat
digitalWrite(digitpins[currentDigitPin], LOW);
// Bir sonraki digit pin'ini seç
currentDigitPin++;
// Eğer son digit pin'ine ulaşıldıysa sıfıra döndür
if (currentDigitPin >= 4) {
currentDigitPin = 0;
}
}
}
char getKey() {
for (int i = 0; i < 4; i++) {
digitalWrite(krows[i], LOW);
for (int k = 0; k < 4; k++) {
if (digitalRead(kcols[k]) == LOW) {
delay(50); // Debounce süresi
while (digitalRead(kcols[k]) == LOW)
; // Tuş bırakılana kadar bekle
digitalWrite(krows[i], HIGH);
return keys[i][k];
}
}
digitalWrite(krows[i], HIGH);
}
return '\0'; // Hiçbir tuşa basılmadı
}
//şu algoritma kısmında sıkıntı var bak
//teker teker ayarla
void displayNumberOnSegment(char number) {
const byte numbers[][7] = {
{0, 0, 0, 0, 0, 0, 0}, // 0
{1, 0, 0, 1, 1, 1, 1}, // 1
{0, 1, 1, 1, 0, 1, 0}, // 2
{0, 1, 1, 1, 1, 1, 0}, // 3
{1, 1, 0, 0, 1, 1, 0}, // 4
{0, 0, 1, 1, 1, 1, 0}, // 5
{0, 0, 1, 1, 0, 1, 0}, // 6
{0, 1, 1, 0, 0, 0, 0}, // 7
{0, 1, 1, 1, 1, 1, 0}, // 8
{0, 1, 1, 0, 1, 1, 0} // 9
};
for (int i = 0; i < 7; i++) {
digitalWrite(sseg[i], numbers[number - '0'][i] ? HIGH : LOW);
}
}