ESP8266-01 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ESP8266-01 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Mayıs 2017 Pazar

Mini RGB

Bu projenin asıl  çıkış noktası "PIC16F1824 ve ESP8266-01 ile WiFi RGBW LED sürücü (Android telefon desteği ile)" projesidir. Özellikle projenin alüminyum  çubuk LED'lerin kullanımı (alüminyum çubuk led kutularının) öngörüldüğü ve özellikle küçük bir yapı olarak tasarlandı. O kadar ki, Serit LED için bağlantı noktaları klemens yerine LED çubuk doğrudan lehimlenecek şekilde ve besleme girişi olarak adaptör girişi kullanılacak şekilde tasarlandı. Bir Alüminyum kutu içine yerleştirilecekse zaten bu gereklidir.
Projedeki PCB üzerinde bağlantıların isim ve tanımları Piyasada yer alan LED bağlantıları değişiklik gösterebilmektedir. Bu nedenle bağlantı yapılmadan önce  kontrol edilmesi yerinde olur.

Temelde bu projedeki her bir kanal kendi başına mini mono gibi davranır. Ama 3 renk olarak bağlayıp birleştirildiği zaman sonuç RGB olarak bilinen birlikte yandığı zaman beyaz (ideal şartlarda) ışığı oluşturan kırmızı, yeşil ve mavi renkleri sürmektedir.
Tablet ile birlikte projedeki devre

Devreye besleme verilip LED'ler ışık verdiği zaman %50 ile ışık verecektir. Temel düşünce ilk anda kullanıcı yanında cep telefonu olmayabileceği veya ilk anda aktif olmayacağı yönünde idi. Daha sonra istenildiği gibi cep telefonu veya tablet üzerinden ayarlanması mümkündür.

Şerit LED üzerinde gösterilmiş değişik renkler

Alüminyum tüp içine konmuş Şerit LED görünümleri.


Projeye yukarıdaki gibi bir şerit LED bağlanarak da kullanımı mümkündür. 5 metre kadar olan ürün ile kullanım durumunda devre küçük bir kutuya konması yerinde olacaktır.
Sözü edilen kutu buna benzer bir ürün olabilir.. 

Wifi ile devrenin PCB genişlikleri aynıdır. Dolayısı ile  her ikisi de aynı kutuya birlikte girebilirler.
Şerit LED ucuna takılmış miniRGB devresi. Tek yapılması gereken şerit LED konumlanıp miniRGB ucuna besleme adaptörü bağlamak.
Şerit LED bu şekilde çalıştırmak pek iyi olmasa da (LED'ler ısınmaya başlıyor, nomalde yerleştirildikleri yerlerde ısıyı yapıştırıldıkları yüzeye aktarıyorlar) görülmesi açısından önemli idi.
Bilindik 3 renkte ayarlanmış görünümlerin birleştirilmiş hali..



Malzeme Listesi
Eleman
Tanımı
Miktarı
10uF elektrolitik
radyal (çap 5mm, yükseklik 7.5mm)
2
470uF elektrolitik
radyal
1
100nF
SMD 805
2
2x4 sıra pin dişi
bacak arası 2.54mm
1
adaptor girişi
90 derece adaptor girişi
1
PJA3406
Sot23 N kanal lojik level mosfet
3
1k
SMD 805
1
2k2
SMD 805
1
10R
SMD 805
3
10k
SMD 805
4
680R
SMD 805
1
220R
SMD 805
1
LM317
SOT223 ayarlı regülatör
1
PIC16F1824
Soic 14 /150mil
1
LM1117-3V3
SOT223 3.3V regülator
1
3A sigorta
kart tipi 3A sigorta
1
5'lı sıra pin
bacak arası 2.54mm erkek
1
RGB modül
RGB için 12V LED modül (*)
1
12Volt Adaptör
Adaptör girişine uygun fişi olan 12Volt adaptör(*)
1
Devre için kutu
PCB yapısına uygun kutu(*)
1

Aynı zamanda işin içinde cep telefonu veya tablet olduğu için App inventor kitabının bir konusudur.

Android cep telefonu veya tablet için programlar sayfasından erişilebilir.



4 Mayıs 2017 Perşembe

Cep telefonu ve ESP8266-01 ile 2 Röle Çıkış Kontrolu (2 Tık Röle)


Daha önceki uygulamalarda Arduino PLC ve 4 tık röle yanında daha az sayıda röle bulunan uygulamalarda kullanılmak üzere bu devre tasarımına gidildi. Devre tasarımanda özellikle 220V ile besleme kullanılabilmesi ve wifi haberleşme desteği ile doğrudan evin kapı otomatiği gibi bir yapıyı kontrol etmek için ideal hale getirmektedir.(Ev otomasyon sisteminin bir parçası olarak hayata geçen bir projeydi.)

Devrenin üzerindeki çoğu elemanın yüzey montaj olması kaçınılmaz. Ne de olsa,küçültmek gibi bir hedefimiz vardı.

Örneğin vantilatörünüz var, ama çoğu durumda elle kontrol edilir yapıdadır.(Yeni modellerde kızılaltı ışık ile kumanda edilebilir sistemler eklenmiş olarak piyasada yer almaktadır.) Bu durumda vantilatörü biraz olsun akıllandırmak istersek, tek yapılması gereken, bu devrenin röle uçlarını doğrudan anahtar olarak bağlamaktır.

Peki aleti nasıl kontrol edeceğiz?

İşin o kısmını akıllı cep telefonunuz hallediyor. Wifi desteği ile cep telefonu veya tablet bu projede anlatılan devre ile iletişim kurarken (tabii röle aç/kapa düzeyinde) devre üzerindeki röle kontakları da kontrol edilmek istenen devrenin aç/kapa durumunu yönetecektir.

Her ne kadar, vantilatör örneği verildi ise de, abajur, mutfak fanı, her hangi bir lamba veya lamba grubu, kapı otomatiği gibi ev ortamında kullanılabildiği gibi, çok yüksek güçlü olmayan herhangi bir aleti çalıştırmak mümkün. (ütü, fırın veya elektrik sobası gibi cihazları çalıştırmak için röle kontak ve bağlantılarının gücü yeterli gelmeyecektir).

Bazen bilgisayar başında çalışırken,bilgisayar ve masa lambası açık olarak 5 dakika kestirmek ister insan, kafayı yastığa koyduktan sonra, uyku tatlı gelir, uyansak bile, kakıp lambayı kapatmak insana zor gelir. İşte böyle durumlar için, en azından cep telefonunu kullanarak masa lambasını olsun kapat istenebilir. İşte proje de anlatılan devre, böyle bir sorunun çözümü için uygundur.

Yaz geliyor, balkonda oturuyorsun, akşam karalığı çökmekte, sohbet koyuluğu keyfinde isen. Şimdi kalk da, lambayı yak. Cep telefonunun alıyorsun, bir- iki tık, balkon ışıl ışıl. Sohbete devam...(eh artık lamba düğmesini, balkona girip çıkarken, önceden açmış ol artık.)
Kullanılacak bağlantı uçları mümkün olduğunca az tutuldu. 220V ile çalışırken dikkatli olmak gerekiyor.  Gerekiyorsa konu ile ilgili tecrübeli birisinden yardım alın!

Hani şöyle bir gümüşlüğün var ve kristallerini misafirlere göstereceksin, Ne yani lambasını yakmak için düğmeye basmak mı gerekiyor? Şimdi yerinden kim kalkacak? Alıyorsun cep telefonunu eline, bir- iki tık, vitrin gayet güzel ışıldamakta. Birileri çatladı mı ne?

Test önemlidir. üretilen ürünün testi için oluşturulan küçük devre üzerinde LED'ler var. Bunlar röle çalışmasına göre yanıyor veya sönüyor.

Bunları tabii ki başka uzaktan kumanda içeren sistemler ile de yapılabilir, ama cep telefonu her daim elinizin altında. Uzaktan kumandalar, kaybolma durumları yaşanabilen aletler, Cep telefonunu neredeyse hayatımızın vazgeçilmez bir parçası olmuşken, kaybolması pek iyi değil!
Cep telefonu ekran resmi.


Proje 2. kitap olan app inventor için destek olarak sunuldu. Cep telefonu olarak, android sistemini destekleyen cep telefonu veya tabletlerde kullanılmak üzere sunuldu. Elbette şu an için. İsterseniz, kendiniz başka bir işletim sistemine sahip cihaz için uygulama oluşturabilirsiniz. Sonuçta yapılması gereken wifi üzerinden haberleşme için kod oluşturmak.

Malzeme Listesi
Malzeme
Tanımı
Miktarı
1000u
5.1mm bacak arası
1
10u
2.54mm bacak aralıklı
2
100n
805
4
1k
805
1
2k2
805
4
10k
805
2
220R
805
1
360R
805
1
BC817
SOT23
2
3mm LED
3mm LED
1
W10M
köprü diyot
1
1N4148
Melf
2
LM317
SOT223
1
PIC16F1824
soic14/150mil
1
3A
direnç tipi sigorta
1
buton
6x6 tact buton
1
S3-12 röle
Stoi,12Volt röle
2
6'li klemens
5.08mm  klemens
1
2'li klemens
5.08mm  klemens
1
2x4 sıra pin
2.54mm bacak aralıklı sıra pin
1
Transformatör
2x6Volt 2VA transformatör
1
ESP8266-01
wifi modül
1

Devre tasarımını elbette wifi için yaptık ise de , küçük ek bir kart ile HC05 veya HC06 gibi bluetooth modüllerin kullanımı mümkün. İşlemci devre üzerindeki yazılımda bir değişikli yapmak gerekli değildir, ama cep telefonu uygulamasının yeniden, bluetooth modüle göre yazılması gereklidir.

Proje de kullanılan wifi modül. ESP8266-01.

Android cep telefonu veya tablet için programlar sayfasından erişilebilir.


24 Nisan 2017 Pazartesi

Haydi Başla



Kitapları ortaya piyasaya sürünce, Arduino öğrenmek isteyen kullanıcılarlardan, set olarak ürünümüzün olup olmadığı öğrenmek istedikler. Set olarak bir Arduino ürünümüz olmadığı için bu yönde bir tasarıma yöneldik.

İlk olarak Arduino UNO olarak bilinen modelin işlemcisi üzerinden gitmek istediğimizde gördük ki bacak sayısı oldukça yetersizdi ve birçok donanım yerleştirmek istediğimizde anahtarla uğrammaız gerekiyordu. Tabii bu donanımları bir arada kullanmak istediğimizde oldukça sınırlayıcı olacaktı. Bunun üzerine bizde Arduino Mega (ATMEGA2560) işlemcisi üzerine yönelmeyi tercih ettik. Donanımın geniş olanaklarına rağmen bazı noktalarda yine de anahtar kullanmak durumunda kaldık. Çünkü aynı anda iki donanım takılı ise iletişim sorunlarına yol açacaktı. Anahtar kullanılan modüllerden biri RGB sürücüsü, diğeri ise Wifi modüllerin bulunduğu bölüm idi.

Proje üzerine eklenen modüllere ek olarak, İşlemcinin bulunduğu bölüm Arduino UNO bacak bağlantılarına eş değer olarak yerleştirilmiş olarak (elbette MEGA formatında) düzenlenmiştir.

Modülleri

  • Rotay encoder
  • Buzer
  • DS18B20 dijital ısı sensörü 
  • DHT11 Dijital nem sensörü 
  • NTC ısı ile direnci değişen eleman 
  • PTC ısı ile direnci değişen eleman
  • LDR ışık ile direnci değişen eleman 
  • Hall manyetik alan sensör 
  • Potansiyometre
  • 4 adek LED çıkış izleme 
  • 4 Adet buton giriş 
  • LCD ekran için bağlantı (arkaplan aydınlatma aç/kapa seçeneği ile)
  • 2x16 Karakter LCD için bağlantı ( boyutları farklı olsa da, 1x8,1x16,1x20,2x8, 2x20 gibi karakter LCD'ler de kullanılabilir. Fakat soket farklılığı olabilir.)
  •  24C04 EEPROM bağlantı. (aynı sokete diğerinin yerine 24C02 de takılabilir.)
  •  7x4 seman LED ekran DS1307 gerçek zaman saati. (yedekleme pili desteği ile) 
  • MikroSD kart yuvası 
  • HC06 veya HC05 için bağlantı. (5V ile beslenen modeller için) 
  • ESP8266-01 için bağlantı klemensi 
  • ESP8266-07 bağlantı klemensleri 
  • NRF24C01 Mesh bağlantı 
  • RGB LED modül. 
  • Nextion bağlantı için port 
  • Kendi devrenizi kurabileceğiniz BreadBord Arduino 
  • UNO bacak bağlantısıyla uyumlu konnektörler. 
  • Tüm kartı besleyebilecek ve gerektiğinde dışarı besleme verebilen modül.(Doğru akım ile beslenmesi girilse de bağlantı yönü önemli değildir.) 


Dikkatinizi çekmiştir, kartın alt tarafında eklenti gibi duran bir bölümü var. Bu bölümdekiler gerektiğinde veya istediniz de, ayrı bir yerde kullanmak üzere eklenmiş devrelerdir. İstediğiniz zaman bu bölümleri ana devre üzerinden kırıp kullanabilirsiniz.
Bu devreler soldan sağa doğru olmak üzere;

  • wifi üzerinden haberleşmeli Anne zili;
  • bipolar step motor sürücü;
  • wifi veya bluetooth haberleşmeli oyuncak araba kontrol devresi;
  • wifi modül programlama devresi;
Wifi Programlama
Bu modül USB – ESP Wİ-Fİ - Arduino Programlayıcı başlığı ile paylaşılan modül ile aynı olup temelde 1. kitap (Sen de Yap Arduino) konusu içinde yer almaktadır.

wifi üzerinden haberleşmeli Anne Zili

Bu modül aslında bebeğin olan annelerin en büyük sorunu üzerine oluşturuldu.

Bir bebeğiniz var ve onu uyuttunuz.  Kimse uyandırmasın diye de zilin üzerine "bebek uyuyor, lütfen zile basmayın" yazdınız. Peki insanlar sizin bu uyarınızı dikkate alır mı?  (Hiç sanmıyorum) Pek çok hanımın sıkıntısı işte bu noktada  ortaya çıkıyor. "Lütfen zile basmayın bebek uyuyor"uyarısının dikkate almaması sonucu, bebeğin uyanması garanti. (Anlatıldığına göre bu çok yaşanılan bir sorunmuş)
İşte bu noktada kapı zilini devre dışı bırakıp  devreye  bu modül alınıyor, telefonunuza yöneldirilmiş zili isterseniz, telefonunuzun sesini kısıp, titreşim ile de kapıda birinin varlığını anlayabilirsiniz.

Kod örnekleri

Karakter LCD

Kart üzerindeki 2x16, 2x20 ,4x16 veya 4x20 karakter LCD bağlantısı için kullanılabilecek kod örneği aşağıda verilmiştir. (örnek 2x16 LCD üzerinde gösterilmiştir)


  • LCD kart üzerine uygun şekilde yerleştirilir . 
  • USB kablosu bilgisayar ile bağlantısı yapılır
  • Program yüklenir,
  • trimpot yardımı ile ekrandaki görüntü kontrastı ayarlanır.

KOD:
const int LCD_LED = 13;

#include <LiquidCrystal.h>
const int LCD_RW = 11;
//RS,E,D4,D5,D6,D7
LiquidCrystal lcd(12, 10, 43, 44, 45, 46);//lcd bacak tanımları

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(38, OUTPUT);
  pinMode(LCD_LED, OUTPUT); //lcd arkplan aydınlatma bacağı
  pinMode(LCD_RW, OUTPUT);//lcd yazma izni kontrol hep lojik-low

  digitalWrite(LCD_LED, HIGH); //arka plan aydınlatması açılır

  digitalWrite(LCD_RW, LOW);
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Elektronik");
  lcd.setCursor(0, 1);
  lcd.print("Kontrol");
}

// the loop function runs over and over again forever
void loop() {
 ;
}

Yukarıda verilen kodun 2x16 karakter LCD üzerindeki görünümü

Karakter LCD üzerinde sayıcı
Haydi Başla projesinde Karakter LCD ile ilgi örnek bir önceki başlık altında verilmişti.
Burada LCD üzerinde 1 saniyelik adımlarla sayan bir sayıcının değerini ekran üzerinde görüntülenmesi örneği verilecektir. İlk satırda "Saniye Sayaci:" (LCD üzerinde "ı" karakteri yer almadığı için) gösterilirken, ikinci satırda sayılan değer gösterilmektedir.

KOD:
//1 saniyelik LCD sayıcı
//Arduino sürümü:1.6

const int LCD_LED = 13;

#include <LiquidCrystal.h>
const int LCD_RW = 11;
//RS,E,D4,D5,D6,D7
LiquidCrystal lcd(12, 10, 43, 44, 45, 46);//lcd bacak tanımları

unsigned long EskiSaat=0;   //mills() için sayaç
const long interval = 1000;   //1 saniye için zamanlayıcı aralığı
int sayac = 0; //sayıcı için

            // the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(38, OUTPUT);
  pinMode(LCD_LED, OUTPUT); //lcd arkplan aydınlatma bacağı
  pinMode(LCD_RW, OUTPUT);//lcd yazma izni kontrol hep lojik-low

  digitalWrite(LCD_LED, HIGH);

  digitalWrite(LCD_RW, LOW);
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Saniye Sayaci:");
  lcd.setCursor(0, 1);
  lcd.print("0");
}
// the loop function runs over and over again forever
void loop() {
  unsigned long Saat = millis();
  if (Saat - EskiSaat >= interval) {
    // son saati kaydet
    EskiSaat = Saat;
    sayac++;//sayıcı değerini 1 artır
    if (sayac == 1000)
    {
      sayac = 0;
    }
    lcd.setCursor(0, 1);
    lcd.print(sayac);
  }

}


şeklinde bir koddur.

LCD'nin örnek görünümü. Alttaki satırda görülen değer sayıcının o anki değerini göstermektedir.


programın çalışması esnasında ekranda görüler birkaç değeri kapsamaktadır.

Karakter LCD üzerinde Scratch programı ile "Kontrol Cepte" yazdırma
Scratch programı görsel olarak (blokların sürüklenme ile)  ve düzenlenerek  programlama yapabilme imkanına sahiptir. Dolayısı ile kullanıcı olarak temel kodlama dili bilinmese de bloklar yardımı ile istenilen işlemin gerçekleştirilmesi mümkündür.

Scratch üzerindeki program için bu grup yeterlidir. Program 1. satırda "Kontrol" yazdırırken, 2. satırda "Cepte" yazdıracaktır. Görünüm sürekli yenilenecektir. (istenirse son satıra bir tanede 5 saniyelik gecikme eklenebilir.
 Programın nasıl yapıldığı ve Haydi başla üzerinde çalışmasını gösterir.

LED Ekran (4x7 segman) üzerinde bir değer gösterme
2x7 segman ekran üzerinde rakamları gösteren iki örnek içerir. 
Birincisi rakamlar doğrudan registerlere yazılır.
KOD:

//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 1,2,3,4 gösterilmesi
//arduino sürüm: 1.6 
//MAX7219 için hazır kütüphane kullanılmamıştır.

#include <SPI.h>
const int max7219_en = 47; //max7219 çip izni
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(max7219_en, OUTPUT);    //max7219 çip enable bacağına çıkış
  //max7219 başlangıç kodları
  digitalWrite(max7219_en, HIGH); //max7219 izin yok
  //spi başlangıç rutinleri
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  // MAX7219 başlama rutinleri
  SPI.begin();
    MAX7219Transfer(0x0F, 0x01);  //tüm segmanlar aktif
  delay(500);
  MAX7219Transfer(0x0F, 0x00);  //tüm segmenler sönük..
  // Enable mode B
  MAX7219Transfer(0x09, 0xFF);//rakamsal kodlama.
  // Use lowest intensity
  MAX7219Transfer(0x0A, 0x01);//LED ışık yoğunluğu
  // Only scan one digit
  MAX7219Transfer(0x0B, 0x03); //sadece a6 dijit 
  for (int i = 1; i < 5; i++) {
    MAX7219Transfer(i, 0x7F);
  }
  // Turn on chip
  MAX7219Transfer(0x0C, 0x01);
  MAX7219Transfer(0x01, 0x00);
  MAX7219Transfer(0x02, 0x00);
  MAX7219Transfer(0x03, 0x00);
  MAX7219Transfer(0x04, 0x00);

//ekrana yazılan değerler
  MAX7219Transfer(0x01, 1);
  MAX7219Transfer(0x02, 2);
  MAX7219Transfer(0x03, 3);
  MAX7219Transfer(0x04, 4);
}
// the loop function runs over and over again forever
void loop() {
;
}

void MAX7219Transfer(uint8_t address, uint8_t value) {
  //max7219'a veri gönderme adımları
  // max7219 izni ver
  digitalWrite(max7219_en, LOW);
  // register adresi gönder
  SPI.transfer(address);
  // değeri gönder
  SPI.transfer(value);
  // max7219 erişime kapalı.
  digitalWrite(max7219_en, HIGH);
}


Registerler doğrudan 1,2,3,4 yazılır ve program yüklendiğinde ekranda görülen.
 
ikincisinde registerlere yazma işi bir fonksiyon üzerinden çağrılır. (kendi programını geliştirenler için daha kolay)
KOD:
//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 1,2,3,4 gösterilmesi
//arduino sürüm: 1.6
//MAX7219 için hazır kütüphane kullanılmamıştır.

#include <SPI.h>
const int max7219_en = 47; //max7219 çip izni
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(max7219_en, OUTPUT);    //max7219 çip enable bacağına çıkış
  //max7219 başlangıç kodları
  digitalWrite(max7219_en, HIGH); //max7219 izin yok
  //spi başlangıç rutinleri
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  // MAX7219 başlama rutinleri
  SPI.begin();
  MAX7219Transfer(0x0F, 0x01);  //tüm segmanlar aktif
  delay(500);
  MAX7219Transfer(0x0F, 0x00);  //tüm segmenler sönük..
  // Enable mode B
  MAX7219Transfer(0x09, 0xFF);//rakamsal kodlama.
  // Use lowest intensity
  MAX7219Transfer(0x0A, 0x01);//LED ışık yoğunluğu
  // Only scan one digit
  MAX7219Transfer(0x0B, 0x03); //sadece a6 dijit
  for (int i = 1; i < 5; i++) {
    MAX7219Transfer(i, 0x7F);
  }
  // Turn on chip
  MAX7219Transfer(0x0C, 0x01);
  MAX7219Transfer(0x01, 0x00);
  MAX7219Transfer(0x02, 0x00);
  MAX7219Transfer(0x03, 0x00);
  MAX7219Transfer(0x04, 0x00);

  //ekrana yazılan değerler
  LEDekrana_yaz (5,6, 7, 8);
}
// the loop function runs over and over again forever
void loop() {
  ;
}

void LEDekrana_yaz (uint8_t hane1, uint8_t hane2, uint8_t hane3, uint8_t hane4)
{
  //ekrana değerleri yazdırmak için...
  MAX7219Transfer(0x01, hane1);
  MAX7219Transfer(0x02, hane2);
  MAX7219Transfer(0x03, hane3);
  MAX7219Transfer(0x04, hane4);
}

void MAX7219Transfer(uint8_t address, uint8_t value) {
  //max7219'a veri gönderme adımları
  // max7219 izni ver
  digitalWrite(max7219_en, LOW);
  // register adresi gönder
  SPI.transfer(address);
  // değeri gönder
  SPI.transfer(value);
  // max7219 erişime kapalı.
  digitalWrite(max7219_en, HIGH);
}
Register fonksiyon üzerinden yazılır. LEDekrana_yaz (5,6, 7, 8);


LED ekran üzerinde sayıcı
Burada önceki örnekte yer alan LED ekranda gösterilen rakamların 1 saniyelik adımlarla sayan sayıcının (0 ile 9999 aralığı) değerinin LED ekranda gösterilmesi hedeflenmektedir.
Ekran üzerindeki hanelerin soldaki değer 0 olduğu zaman hane söndürülmektkedir.
KOD:

//Haydi başla üzerinden MAX7219 ile LED ekran üzerinde 4 hane sayıcı gösterilmesi
//arduino sürüm: 1.6
//MAX7219 için hazır kütüphane kullanılmamıştır.

#include <SPI.h>
const int max7219_en = 47; //max7219 çip izni

unsigned long EskiSaat = 0; //mills() için sayaç
const long interval = 1000;   //1 saniye için zamanlayıcı aralığı
int sayac = 0; //sayıcı için


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(max7219_en, OUTPUT);    //max7219 çip enable bacağına çıkış
  //max7219 başlangıç kodları
  digitalWrite(max7219_en, HIGH); //max7219 izin yok
  //spi başlangıç rutinleri
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  // MAX7219 başlama rutinleri
  SPI.begin();
  MAX7219Transfer(0x0F, 0x01);  //tüm segmanlar aktif
  delay(500);
  MAX7219Transfer(0x0F, 0x00);  //tüm segmenler sönük..
  // Enable mode B
  MAX7219Transfer(0x09, 0xFF);//rakamsal kodlama.
  // Use lowest intensity
  MAX7219Transfer(0x0A, 0x01);//LED ışık yoğunluğu
  // Only scan one digit
  MAX7219Transfer(0x0B, 0x03); //sadece a6 dijit
  for (int i = 1; i < 5; i++) {
    MAX7219Transfer(i, 0x7F);
  }
  // Turn on chip
  MAX7219Transfer(0x0C, 0x01);
  MAX7219Transfer(0x01, 0x00);
  MAX7219Transfer(0x02, 0x00);
  MAX7219Transfer(0x03, 0x00);
  MAX7219Transfer(0x04, 0x00);

  //ekrana yazılan değerler
  LEDekrana_yaz (0x0f, 0x0f, 0x0f, 0);
}
// the loop function runs over and over again forever
void loop() {
  //1 saniye oluşturma
  unsigned long Saat = millis();
  if (Saat - EskiSaat >= interval) {
    // son saati kaydet
    EskiSaat = Saat;
    sayac++;//saniye sayıcı değerini 1 artır
    if (sayac == 10000)
    {
      sayac = 0;
    }
    //  haneler için değişkenler
    uint8_t h1 = 0;
    uint8_t h10 = 0;
    uint8_t h100 = 0;
    uint8_t h1000 = 0;
    //sayac değerini hanelere ayırma
    h1 = sayac % 10;
    h10 = (sayac / 10) % 10;
    h100 = (sayac / 100) % 10;
    h1000 = (sayac / 1000) % 10;
    //soldaki haneler "0" ise söndür
    if (h1000 == 0)
    {
      h1000 = 0x0f;
      if (h100 == 0)
      {
        h100 = 0x0f;
        if (h10 == 0)
        {
          h10 = 0x0f;
        }
      }
    }
    // oluşturulan değerleri LED ekrana gönderme
    LEDekrana_yaz (h1000, h100, h10, h1);
  }
}

void LEDekrana_yaz (uint8_t hane1, uint8_t hane2, uint8_t hane3, uint8_t hane4)
{
  //ekrana değerleri yazdırmak için...
  MAX7219Transfer(0x01, hane1);
  MAX7219Transfer(0x02, hane2);
  MAX7219Transfer(0x03, hane3);
  MAX7219Transfer(0x04, hane4);
}


void MAX7219Transfer(uint8_t address, uint8_t value) {
  //max7219'a veri gönderme adımları
  // max7219 izni ver
  digitalWrite(max7219_en, LOW);
  // register adresi gönder
  SPI.transfer(address);
  // değeri gönder
  SPI.transfer(value);
  // max7219 erişime kapalı.
  digitalWrite(max7219_en, HIGH);
}

sayıcı çalışırken resmi çekilmiş birkaç değer görünümü.
HaydiBaşla projesinde projesinde 1 saniye aralıkla sayan sayıcının LED ekran üzerinde görütülenmesi.