Android İke Dot Matrix’e Mesaj Gönderme

0
3051
Android İke Dot Matrix'e Mesaj Gönderme
Android İke Dot Matrix'e Mesaj Gönderme

Android İke Dot Matrix’e Mesaj Gönderme

Bu projemizde Arduino ile Android arasında bluetooth haberleşme gerçekleştirip, Arduino’ya bağlı olan Dot Matrix Display‘de gönderilen mesajı görüntüleyeceğiz. Konuyla ilgili gereken öncül bilgiler Arduino HC-05 Bluetooth Modül – Android eşleşmesidir. Bunu da zaten daha önceki projelerimizde yapmıştık. Android uygulamayı kendimiz tasarlamayıp apk uygulaması olarak indireceğiz.

Kullanılan Malzemeler

  • Bir adet Arduino Uno kartı,
  • Bir adet 32×16 Dot Matrix Display,
  • Bir adet bluetooh modülü HC-05,
  • Bir adet akıllı telefon/tablet.

Tasarım

32×16 Dot Matrix Display yanında Arduino karta bağlanan konektörü ile gelmektedir. Martix konusunda yapılması gereken şey konektörü Arduino kartın dijital uçlarına bağlamak. 512 adet led’e sahip olan bu display 5 volt ile çalışabilmektedir.

Android İke Dot Matrix'e Mesaj Gönderme
Android İke Dot Matrix’e Mesaj Gönderme

HC-05 Bluetooth modülünü eski projelerimizden hatırlıyorsunuzdur. Bizim için önemli 4 adet ucu vardı. Bunlar VCC, GND, TX ve RX. VCC, Uno kartın 5 volt girişine, GND ise GND girişine bağlanacaktır. Seri haberleşme uçları arasında ise çaprazlama tekniğini kullanıyorduk: TX-RXD (dijital-O), RX-TXD (dijital-1).

Devre aşamasında yapılması gereken sadece bu kadar. Aşağıda devre resmi gösterilmektedir.

Kodlama

Kodlama bölümünde yapacağımız işler sırasıyla Dot Matrix Display kütüphanesini Arduino’ya eklemek. Sonra Arduino kodunu yazmak ve en son olarak da Android mesaj gönderme uygulamasını indirip kullanmak.

Dot Matrix Display kütüphanesine https://github.com/freetronics/DMD adresinden erişebilirsiniz. Ekranın sağında bulunan “Download ZIP” butonu ile kütüphaneyi indirip Arduino/libraries klasörünün içine taşıyınız.

Arduino kod bloğu aşağıdaki gibidir:

//aşağıdaki kütüphaneler

//Arduino-libraries dosyanızda yoksa

//mutlaka internetten indiriniz. 

#include <SPI.h>        //dot matrix'e yazdırmak için gerekli olan kütüphane

#include <DMD.h>        //dot matrix kütüphanesi

#include <TimerOne.h>   // zamanlayıcı/kesme kütüphanesi

#include "SystemFont5x7.h" // 5x7 display font kütüphanesi

#include "Arial_black_16.h" // Ardial fontunda siyah 16 boyut yazı kütüphanesi

 

//display bağlantıları

#define DISPLAYS_ACROSS 1

#define DISPLAYS_DOWN 1

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

//mesajın maksimum kareketer sayısı

#define max_char 100

char message[max_char];    // mesaj kaydı

char r_char;               // mesajdaki her bir karekteri okuyacak değişken

byte index = 0;            // mesaj dizinideki karekterleri konumu

int i;            

 

/*--------------------------------------------------------------------------------------

  displayi yenileyip her seferinde tarama yapan komut

--------------------------------------------------------------------------------------*/

void ScanDMD()

{ 

  dmd.scanDisplayBySPI();

}

 

void setup(void)

{

 

   //timer kesmesi kuruluyor

   Timer1.initialize( 5000 );           //display tarama periyodu

   Timer1.attachInterrupt( ScanDMD );   //ScanDMD timer'a ekleniyor

 

   //display pikselleri temizleniyor

   dmd.clearScreen( true );   

   Serial.begin(9600);

}

void loop(void)

{

   //yeni mesaj geldiğinde eski mesajın silinmesi

   if(Serial.available()){       

        for(i=0; i<99; i++){

            message[i] = '\0';

        } 

        //index temizlenmesi    

        index=0;

    }

    //seri iletişim olduğu sürece

    while(Serial.available() > 0){

       

       if(index < (max_char-1)) 

       {         

           r_char = Serial.read();      // karakterler okunur

           message[index] = r_char;     // mesaj dizisinde saklanır

           index++;                     // her bir okumada poziyson artırılır

           message[index] = '\0';       // eski pozisyonlar silinir

       }

   }

   //display mesajı görüntülemek için hazırlanıyor

   dmd.clearScreen( true );

   dmd.selectFont(Arial_Black_16);

   //mesaj gösteriliyor

   dmd.drawMarquee(message, max_char,(32*DISPLAYS_ACROSS)-1 ,0);

   long start=millis();

   long timer=start;

   boolean ret=false;

   while(!ret){

     if ((timer+30) < millis()) {

       ret=dmd.stepMarquee(-1,0);

       timer=millis();

     }

   }

}

CEVAP VER

Please enter your comment!
Please enter your name here