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);
}
}
#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);
}
}
