Arduino Esplora’da Otomatik LCD Döndürme
M. Hamit YANIK // 25 Eylül 2013 // 4 yorum // kategori: Arduino ProgramlamaHerkese tekrar merhaba. Bir başka Arduino yazısı ile sizlerleyim.
Yazımda Arduino Esplora‘nın dahili ivme sensörünü kullanarak LCD’nin yönünü otomatik olarak nasıl çevirebileceÄŸimize deÄŸinmek istiyorum.
Arduino Esplora’nın ivme sensörü hakkındaki detaylı bilgi için Arduino Esplora’ya GiriÅŸ baÅŸlıklı önceki yazımı inceleyebilirsiniz.
Bu çalışmayı yaparken Adafruit’in ST7735 ve GFX LCD kütüphanelerini kullandım. EÄŸer Arduino yazılımınıza bu kütüphaneler kurulu deÄŸilse bir önceki yazımı incelemenizi tavsiye ediyorum:
Arduino Esplora ile Güzel Bir Termometre Projesi
LCD döndürmenin mantığını az çok akıllı telefonlardan biliyorsunuzdur. Üzerlerindeki ivme sensörünü kullanarak, kullanıcının cihazı tutuş yönünü algılıyorlar ve ekranı uygun yöne döndürerek kullanım kolaylığı sağlıyorlar.
Burada da buna benzer bir mantıkta ivme sensöründen aldığım bilgiyi birkaç if – else if yapısından geçirerek Arduino Esplora‘nın konumunu belirlemeye çalıştım.
Mutlaka daha iyi ve hızlı bir algoritması vardır bu işlemin ama aşağıdaki kod da fevkalade iş görüyor.
Katkılarınız ve sorularınız için aşağıdaki yorum bölümünü kullanmaktan çekinmeyin. 🙂
Ä°ÅŸte video’su:
/**  * @file Esplora_LCD_Otomatik_Dondurme.ino  * @author M. Hamit YANIK (hamityanik@hotmail.com)  * @date Eylül, 2013  * @brief Arduino Esplora'nın LCD'sinin iPhone benzeri  * otomatik döndürülmesi  *  * Arduino Esplora + TFT LCD ile üzerindeki ivme sensörü kullanılarak  * yapılmış otomatik LCD döndürme uygulaması.  * www.arduinoturkiye.com  */ #include <Esplora.h>// Esplora hazır fonksiyonlarını kullanmak için #include <Adafruit_GFX.h>// Çekirdek grafik kütüphanemizi dahil edelim #include <Adafruit_ST7735.h>// Esplora LCD'sinin sürücüsünü dahil edelim #include <SPI.h>// Esplora LCD'sini SPI haberleşme kullanarak daha hızlı // kullanmak için SPI.h dosyasını dahil edelim // Esplora LCD'sinin pin bağlantılarını ayarlıyoruz #define sclk 15 // Arduino'nun 15. pini: SCK clock pini #define mosi 16 // Arduino'nun 16. pini: Master Output Slave Input (MOSI) data pini #define cs 7 #define dc 0 #define rst 1 // RGB565CONVERT fonksiyonu 32 bit rgb renk kodunu 16 bit rgb renk koduna cevirir // Photoshop, Adobe Fireworks gibi tasarım programları 32bit rgb renk kodları ile çalışır. // Parlak kırmızı renk kodu bilgisayarda #FF3300 iken, bunu 16 bit renk koduna çevirmek // için RGB565CONVERT fonksiyonundan geçirmeliyiz: RGB565CONVERT(0xFF, 0x33, 0x00) #define RGB565CONVERT(red, green, blue)\ (uint16_t)((( red >> 3 )<< 11 )| \ (( green >> 2 )<< 5 )| \ ( blue >> 3 )) // Renk tanımlaması: Arduino mavisi. #define mavi RGB565CONVERT(0x00, 0x97, 0x9C) int yon = 0; int eski_yon = 0; bool donduruldu = false; long previousMillis = 0; // Seçenek 1: herhangi bir giriş-çıkış pinini kullanarak LCD ile haberleşebiliriz. // ama bu biraz yavaş olacak. //Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst); // Seçenek 2: SPI donanım pinlerini kullanarak LCD ile haberleşelim. // İşte bu LCD'yi kullanmanın en hızlı yolu! Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); void setup(void) { // Eğer LCD'niz düzgün çalışmıyorsa aşağıdaki farklı tanımlamaları deneyin. // If your TFT's plastic wrap has a Black Tab, use the following: tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab // If your TFT's plastic wrap has a Red Tab, use the following: //tft.initR(INITR_REDTAB); // initialize a ST7735R chip, red tab // If your TFT's plastic wrap has a Green Tab, use the following: //tft.initR(INITR_GREENTAB); // initialize a ST7735R chip, green tab tft.setTextWrap(false); // Yazı kaydırma kapalı tft.fillScreen(mavi); // Ekranı mavi renk ile doldur } void loop(void) { unsigned long currentMillis = millis(); int saniye = (currentMillis/1000); // Saniyede bir yönü kontrol et // İşlemciyi çok meşgul etmemek için bunu saniyede bir defa yapmamız yeterli if(currentMillis - previousMillis > 1000) { previousMillis = currentMillis; // X Eksenini oku ve bilgiyi "x_ekseni" değişkenine aktar int x_ekseni = Esplora.readAccelerometer(X_AXIS); // Y Eksenini oku ve bilgiyi "y_ekseni" değişkenine aktar int y_ekseni = Esplora.readAccelerometer(Y_AXIS); /*     // İvme sensörü verilerini LCD'ye yazdırmak için     tft.fillRect(0, 0, 50, 30, ST7735_BLACK);     tft.setCursor(0, 0);     tft.print("X: ");     tft.println(x_ekseni);     tft.print("Y: ");     tft.println(y_ekseni);     tft.print("Z: ");     tft.println(z_ekseni);     */ // İvme sensörü verisinin değerlendirilmesi if( (x_ekseni < -75) && (y_ekseni > -80 ) ) { donduruldu = true; yon = 0; } else if( (x_ekseni > 150) && (y_ekseni > -80 ) ) { donduruldu = true; yon = 2; } else if( (x_ekseni > -75) && (x_ekseni < 75 ) && (y_ekseni > 110) ) { donduruldu = true; yon = 1; } else if( (x_ekseni > -75) && (x_ekseni < 75 ) && (y_ekseni < -90) ) { donduruldu = true; yon = 3; } // saniyede bir saniyeyi ekrana yaz tft.setTextSize(3); tft.setCursor(10, 80); // sanye yazılacak yeri önce mavi ile doldur (yani ekranı temizle) tft.fillRect(10, 80, 150, 21, mavi); tft.println(saniye); } // Eğer Esplora'nın yönü değiştirildiyse bu işlemleri yap if( donduruldu == true && yon != eski_yon ) { // LCD'yi temizle tft.fillScreen(mavi); // LCD yönünü değiştir tft.setRotation(yon); // değişkenleri güncelle donduruldu = false; eski_yon = yon; } tft.setCursor(6, 6); tft.setTextSize(2); tft.println("Arduino"); tft.setCursor(18, 22); tft.println("Turkiye"); tft.setCursor(76, 34); tft.println(".com"); }Etiketler:
illa alacağım bir esplora!
güzel bir örnek daha, eline sağlık.
Vakit kaybetmeyin derim. eBay üzerinden yaklaşık 30-40$ fiyata edinmek mümkün 🙂
İyi günler. Sanırsam bu uygulamada bir problem var çalıştırmayı denedik ama hata veriyor biraz yeniyiz arduinoda çözemedikte sorunu yardımcı olursanız mutlu olucaz 🙂
eplora ile ekran döndürme yaptım kodları gönderdim ekran 4 tane uzun kalın cizgiler cıktı proplem nedir acaba yardımcı olursanız sevinirim