Arduino buzzer ve 7 segment display çalışmıyor

Yazdıklarımı dikkatli okumamışsınız.
Her segment için bir direnç olmak üzere,
sekiz adet direnç kullanmalısınız.
150R-330R arası olabilir.
Bunun haricinde display üzerinde görülecek
rakamları yeniden düzenlemelisiniz.

Her iki ortak uçtan iki direnç kullanmışsınız.
Bu dirençler paralel olmuş olur ve daha fazla
akım geçmesine neden olur. Belki de ilgili
segment bozulmuş olabilir. En fazla 20mA
hesaplamalısınız.
 

Sayın mehmet.bey

7 segment ekranda segment ledlerinin eşit parlaklıkta yanmayıp farklı şiddette yanmalarının sebebi nedir? Ve eşit parlaklıkta yanması için ne yapılabilir? Benim uygulamamda ortak pinlere iki adet 220R direnç takıp birleştirip ilgili arduıno pinine öyle bağlıyorum. Bu şekilde bazı internet sitelerindeki 7segment uygulama örneklerinde tam bir homojenlik varken, aynı Ekran ile bir başka uygulama örneğinde ise örn. 1 rakamının üst çubuğu kuvvetli yanarken alt bölümü belirgin şekilde zayıf yanıyor. Ben de yukarıda belirttiğiniz gibi ortak pinler yerine diğer her pine direnç mi bağlamalıyım? Lütfen yardımcı olabilir misiniz?
 
Digit denen kısma tek direnç konduğunda;
oluşan prensip şemasını düşünün.
Tek led olduğunda geçen akım 10mA
iken üç led olduğunda, bu 10mA üçe
bölünecek.
Bu nedenle her segmente yani her led
için bir direnç olmak üzere, sekiz direnç
kullanmalıyız.
Bunun testini mcu olmadan direkt 5V
ve direnç kullanarak jumper ile deneyin.
Gerekirse akım ve gerilim ölçün.
Ama displayı dirençsiz kullanmayın.
 

mehmet.bey,​

Anladım galiba, yeri geldiğinde kablolardan biri daha uzun olunca ilave direnç değeri oluşur ve daha sönük yanabilir de..

İzniniz olursa bir sorum daha olabilir mi? Aşağıda linkini verdiğim iki haneli ortak katot ile iki haneli sabit sayı yazdırma kodlamasını ben ortak anotla çalıştırmak istedim. Hazırlayanın tarif ettiği bütün değişiklikleri yapmama rağmen sonuç alamadım. Ama dikkatimi çeken şu oldu. yanması gereken segmentler sönük, sönük olanlar yanıyor. HIGH- LOW değişikliklerini yapmama rağmen başaramadım.
İLGİLİ LİNK: https://www.cronyos.com/cara-menamp...rduino-pada-7-segment-dengan-metode-scanning/

ANOT İÇİN DEĞİŞİKLİK YAPTIĞIM HALİ
Kod:
#define segment1 A1
#define segment2 A0
/* Program untuk seven segment Common Katoda */
byte digit[10] = {
 //abcdefg dp
  B11111100, // 0
  B01100000, // 1
  B11011010, // 2
  B11110010, // 3
  B01100110, // 4
  B10110110, // 5
  B10111110, // 6
  B11100000, // 7
  B11111110, // 8
  B11110110, // 9
};
byte pinSegment[] = {A2,2,3,A5,A4,A3,5,4}; // pin yang digunakan untuk seven segment (pin dp,g,f,e,d,c,b,a)

long angka ;

void setup()
  {
    for(int i=0; i < 8; i++)
    {
        pinMode(pinSegment[i], OUTPUT);
    }

    pinMode(segment1,OUTPUT);
    pinMode(segment2,OUTPUT);
  }
 
void loop()
  {
     /* ---------------- kirim angka 5----------------------- */
     digitalWrite(segment2,LOW); // matikan 7 segment 2
    
       for ( byte segment = 0; segment < 8; segment++)
        {
          boolean Status = bitRead(digit[5],segment);
          digitalWrite(pinSegment[segment],Status);
        }
        
     digitalWrite(segment1, HIGH); // hidupkan 7 segment 1
     delay(5);


      /* --------------- kirim angka 1 ------------------------*/
       digitalWrite(segment1, LOW); // matikan 7 segment 1
      
      for ( byte segment = 0; segment < 8; segment++)
        {
          boolean Status = bitRead(digit[1],segment);
          digitalWrite(pinSegment[segment],Status);
        }
        
      digitalWrite(segment2,HIGH); // hidupkan 7 segment 2
      delay(5); 
  }
 
Teşekkür ederim. Aslında benim amacım iki haneli ortak anot display ile şarta bağlı (if veya case gibi) iki haneli sayı yazdırabilmek. kütüphaneli veya kütüphanesiz fark etmez. bir çok ortak anot örnek var ama ya tek haneli, ya da iki hanelilerin en azından benim araştırdıklarım ortak katot. sabit sayı yazdırma amaçlı iki haneli ortak anot örnek bulamadım. ya da çoğu 0-99 saydırma üzerine örnekler.
 

@mehmet.bey,​

Yukarıdaki kodlama ile sizi meşgul etmeme adına, sadece aşağıdaki kodlama konusunda yardımcı olursanız sevinirim.
Verdiğiniz linkteki uygulamayla biraz çalıştım. Epey yol aldım. Arkadaşımdan iki adet ortak katod ödünç aldım. Aşağıdaki kodlama ile amacıma kısmen ulaştım.
Ancak;

a-ekranda 12 sayısı çok kısa süreli yanıp yanıp sönüyor. delay uygulaması ile belirlediğim süre kadar devamlı yanması işini beceremedim. rf vericiye bir kere basıldığı zaman örn. 10 saniye sürekli yanması için nasıl bir satır yazmalıyım?

b-Ekran parlaklık ayarını 90 yapmama rağmen zayıf yanıyorlar. çok kuvvetli yanması için bağladığım yedi adet 220R dirençleri 100R dirençler ile değiştirmeli miyim? Ya da daha başka kodlama satırı ile sorun çözülebilir mi?

c- bu kodlamada gereksiz, fazlalık satır var ise, veya üç-beş satırın işini tek bir satır ile yaptırabileceğim durumlar var mıdır?
Şimdiden teşekkürler.


Kod:
#include "SevenSeg.h"
#include <RCSwitch.h>
int counter = 0;
int vericikodu;

unsigned long int num;
RCSwitch mySwitch = RCSwitch();
SevenSeg disp (10,9,8,7,6,11,12); //Defines the segments A-G: SevenSeg(A, B, C, D, E, F, G);
const int numOfDigits =2;       //number of 7 segments
int digitPins [numOfDigits]={3,4};  //CC(or CA) pins of segment

const int buzzer = 13; //buzzer - arduino pin 13

void setup()
{
 
  //Defines the number of digits to be "numOfDigits" and the digit pins to be the elements of the array "digitPins"
  disp.setDigitPins ( numOfDigits , digitPins );
  //Only for common cathode 7segments
  disp.setCommonCathode();
  //Control brightness (values 0-100);
  disp.setDutyCycle(90);
  mySwitch.enableReceive(0);
  disp.setDigitPins ( numOfDigits , digitPins );
 
 
}

void loop()
{
  mySwitch.enableReceive(0);
  if (mySwitch.available())
  {
    num = mySwitch.getReceivedValue();
    Serial.println("vericikodu;" + String(num));

    switch (num)
    {
case 7201636:
     
      mySwitch.disableReceive();
        disp.write("12");
        tone(buzzer, 600); //play tone
        delay(600);
        noTone(buzzer);
 
      default:
        break;

    }

    mySwitch.resetAvailable();
    mySwitch.enableReceive(0);
  }
}
 
Son düzenleme:
milis() fonksiyonu kullanarak "state machine"
yaparak çözmek daha uygun sanki.
Ekran tarama ve buzzer beklemesi için ya bu şekilde
kullanmalısınız ya da timer kesmesi.
 
Mehmet bey, ben bu satır ve kodlama işlev ve emirlerin yapısı hakkında çok zayıfım. Sanki bir okyanus benim için. Bende ingilizce de sıfır vs. vs. vs.
Beni en çok zorlayan husus kullandığım yazılım ve kütüphanesi ile ilgili, örn ekrana yazdırma satırının biçimi ile başka bir kütüphanenin istediği yazdırma biçimi çok farklı olabiliyor. Tıkanıp kalıyorum.
Yukarıda bahsettiğiniz fonksiyon ve uygulamalar hakkında sadece kulak dolgunluğu var. Nasıl olduğu ve işlevleri hakkında hiç bir fikrim yok. İnternetten araştırsam bile layıkı ile becerebileceğimi sanmıyorum. Size zahmet verdiğimin farkındayım, Yukarıdaki kodlamaya eklemlendirilebilecek bir kaç satır rica etsem olabilir mi?
 
Her displayı bir HC595 ile sürün. İki HC595 seri olacak
şekilde bağlayın.
Siz data göndermezseniz enerji kapanana kadar
displaydaki değerler değişmez.

Bunu yapamazsanız bakalım kodlarınıza.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…