Merhaba arkadaşlar. Bugün sizlerle beraber Arduino ve 74HC595 entegresini kullanarak seri iletişim ile bilgisayar kontrollü LED uygulaması yapacağız.
Gerekli malzemelerimiz:
- Arduino UNO
- Breadboard
- 74HC595 shift register entegresi
- 8 adet LED
- 8 adet 220 Ω
- İki ucu erkek jumper kablo
Bir önceki dersimizden hatırlayacak olursak 74HC595 entegresini 8 adet LED’i yakıp söndürmekte kullanmıştık. Bu sefer LED’lerimizi bilgisayarımızdan vereceğimiz komutlar ile yakıp söndürebileceğiz.
Seri Haberleşme
Hatırlarsak Arduino’muz bilgisayarımıza tanıtıldığında COM portu olarak tanınmıştı. Bu COM portu, seri haberleşme (UART) dediğimiz bir bağlantı türü için kullanılmaktadır. Bilgisayarımızla Arduino’muzu haberleştirmek için Arduino yazılımında bulunan “Seri Port Ekranı”nı kullanacağız.
Devremizin bağlantı şeması bir önceki dersimizdekiyle aynı:
Kodumuz ise şu şekilde:
int latchPin = 5; int clockPin = 6; int dataPin = 4; byte leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); registeraYaz(); Serial.begin(9600); while (! Serial); Serial.print("1 ile 8 arasinda bir LED numarasi girin veya "); Serial.println("x ile hepsini sondurun"); } void loop() { if (Serial.available()) { char ch = Serial.read(); if (ch >= '1' && ch <= '8') { int led = ch - '1'; bitSet(leds, led); registeraYaz(); Serial.print(led +1); Serial.println(" numarali LED yandi"); } if (ch == 'x') { leds = 0; registeraYaz(); Serial.println("Tum LED'ler sondu"); } } } void registeraYaz() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
Kodumuzun setup kısmında yer alan Serial.begin(9600) komutu, Arduino’muzun seri portunu 9600 baud’da (seri iletişim hızı) çalışacak şekilde ayarlıyor. Serial.print komutu ise Arduino’nun seri porttan bilgisayarla iletişime geçerek tırnak içinde yazan yazının seri port ekranında görünmesini sağlıyor.
ya ben yeni başlayacağımda acaba bilgisayarıma kuracağım programları bana söylermisiniz ?
arduinonun kendi sitesinden arduinonun yazılım programını indirebilirsin
‘registeraYaz’ was not declared in this scope hatası aldım. Burda bi sorun var sanırım.
ben denedim herhangi bir sorun yok. kaydederken c: altına arduino isimli klasör oluşturup ilgili dosyayı içine kaydetmeye özen gösterin. d: altına kaydederken bende aynı hatayı almıştım.
74HC595 Shift Register Kullanımı devresini kurdum doğru çalışıyor. Aynı devreyi Seri Haberleşme (UART)’ta kullanıyorum. Ancak sönmesi gerekirken x tuşuna bastığımda hepsi yanıyor. 1’den 8’e kadar tuşlarla da yakması gerekirken söndürüyor. Yardımlarınızı bekliyorum.
hıgh YAZAN yereler LOW, low yazan yerelere HIGH yaz dene bir bakalım.
bir pine şunun gibi bir kod yazcaksın
digitalWrite(12,HIGH)
delay(100)
digitalWrite(12,LOW)
ve hepsinde kullanacaksın.
Slm ben yeni baslayacagım. 20 tuslu ve haberlesmeli button box yapabilirmiyim?
Yapabilirsiniz.
Hic aciklayici bir ders olmamis her fonksiyonun her islevin tek tek ne anlama geldigini ne ise yaradigini bilmemiz gerek. Kopyala yapistir yaparak birsey ogrenemeyiz. İsterdim ki dersler yavas yavas kademeli artsin. Biranda serial led +1 ch -1 o tirnaklarin bile ne icin kullanildigini anlatmaliydiniz
Kod satırları ile ilgili anlatıma da girerseniz daha faydalı olacak. İlk derslerde bu vardı. Teşekkürler
// özetle detayına girmeden, usb ile bilgisayar ardunioya bağlı olana kadar bekle demek.
while (! Serial);
…
// eğer seri bağlantıda okuma sinyali varsa…
if (Serial.available())
…
// seri bağlantıdan gelen bir bayt lık değer i al, ch isimli değişkende tut.
char ch = Serial.read();
// eğer okunan karakter ‘1’ ile ‘8’ arasında metin değerinde ise,
if (ch >= ‘1’ && ch sağdan sola doğru gonder demek. yani eğer değer (00000001) ise önce 1 i sonra diğer lerini gönder diyoruz çünkü her seferinde sadece bir elektrik sinyali verebiliyoruz.
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
Yani bu programda aynı anda birkaç kanala 1 sinyali alamıyor muyuz
arduinyo ile tek buton ve cift tık yaparak ileri ve geri sayıcı yapmak için programda yardımcı olabılecek arkadas var mı .butona 5 sanıye ıcınde ıkı kez basarsa cıkıs verıp saydırcam 4 kere ileri tekrar bastıkcada geri gelecek bı sayıcı bunu eklıcem bı gırıs pını ıkı de cıkıs olacak
İki ledin aynı anda yanmamasını nasıl sağlarım.
Birde ledlerin sürekli olarak değilde yanıp sönmesi istiyorum blink uygulaması gibi
merhaba,
Seri haberleşmedeki bufferi nasıl silebilirim