7 segment display 2 li

Mericzafer

Üye
Katılım
2 Haz 2021
Mesajlar
28
Puanları
1
Yaş
37
mrb hayırlı işler. kendim ledlerle 2 li 7 segment display yaptım. her segmentte 10 ad. led kullandım. gelen 0.10 voltu 0.80 arasında bir hız göstersin dedim. kodu atıyorum sizlere. ama AO ya gelen voltajı 2 li çarptım. yanlız AO ya gelen 2.5 voltu 40 hız göstermesi lazım. ama 52 gösteriyor dışardan 5 voltluk ğüç kaynagıyla baglıyorum. nasıl yardımcı olabilirsiniz acaba

#include <avr/wdt.h> // Watchdog kullanımı

// 14 segment pini (2x7 segment)
const int segmentPins[14] = {
2, 3, 4, 5, 6, 7, 8, // Sol display (A-G)
9, 10, 11, 12, 13, A1, A2 // Sağ display (A-G)
};

// Rakamların segment karşılıkları (A–G)
const bool digitSegments[10][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, 1, 0, 1, 1} // 9
};

int previousSpeed = -1; // Önceki hız değeri

void setup() {
wdt_enable(WDTO_4S); // 4 saniyelik watchdog

// Segment pinlerini çıkış olarak ayarla
for (int i = 0; i < 14; i++) {
pinMode(segmentPins, OUTPUT);
digitalWrite(segmentPins, LOW);
}

analogReference(EXTERNAL); // AREF pininden harici 5V referans al

Serial.begin(9600);
Serial.println("AREF ile çalışan hız göstergesi başlatıldı...");
}

// A0’dan sabit ortalamalı analog okuma
int readStableAnalog(int pin, int sampleCount = 20) {
long total = 0;
for (int i = 0; i < sampleCount; i++) {
total += analogRead(pin);
delay(2);
}
return total / sampleCount;
}

void loop() {
wdt_reset(); // Watchdog sıfırla

int raw = readStableAnalog(A0); // Analog değer 0–1023
float voltage = raw * (5.0 / 1023.0); // A0 gerçek voltajı
float inputVoltage = voltage * 2.0; // Voltaj bölücü oranı (0–10V)

int speed = inputVoltage * 8.0; // 10V → 80 km/h
speed = constrain(speed, 0, 80);

if (abs(speed - previousSpeed) >= 1) {
previousSpeed = speed;

Serial.print("A0: ");
Serial.print(voltage, 3);
Serial.print(" V | Giriş: ");
Serial.print(inputVoltage, 3);
Serial.print(" V | Hız: ");
Serial.print(speed);
Serial.println(" km/h");

displaySpeed(speed);
}

delay(400); // Yenileme süresi
}

// 2 haneli hızı göster
void displaySpeed(int number) {
int tens = number / 10;
int ones = number % 10;

showDigit(tens, 0); // Sol
showDigit(ones, 1); // Sağ
}

// Digit yazdır
void showDigit(int digit, int displayIndex) {
if (digit < 0 || digit > 9 || displayIndex < 0 || displayIndex > 1) return;

int baseIndex = displayIndex * 7;
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[baseIndex + i], digitSegments[digit] ? HIGH : LOW);
}
}
 

Forum istatistikleri

Konular
133,380
Mesajlar
971,000
Kullanıcılar
459,228
Son üye
saidkaradogu

Yeni konular

Çevrimiçi üyeler

Geri
Üst