Androıd ile Arduıno. Nazir Doğan



Benzer belgeler
BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi YAYIN ALICILARI. BLM401 Dr.Refik SAMET

MOBİL UYGULAMA GELİŞTİRME

Proje 1. Arayüz Tasarımı

MOBİL UYGULAMA GELİŞTİRME

MOBİL UYGULAMA GELİŞTİRME

1 - Button Kontrolu Nasıl Yapılır?

ANDROID AÇIK AKSESUAR API & AKSESUAR GELİŞTİRME. Dr. Fatma Cemile Serçe

Android Cep Telefonu Programlama

BİLGİSAYAR BİLİMİ DERSİ (KUR-2)

UYGULA İÇİ SATIN ALMA. <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="com.android.vending.

Listview Kullanımı. Aşağıdaki örnekte bir ListView'ı birkaç ülke ismiyle dolduracağız.

Android Ders Notları

Android Nedir? Google'ın Android Inc şirketini alışı

Activity Context.startActivity Activity, AndroidManifest

Android Kaynakları (Resources)

Bazı Akıllı Telefon Sensörleri

İÇİNDEKİLER VII İÇİNDEKİLER 1 ARDUINONUN TEMELLERİ 1

Android ile SQLLite Veri Tabanı

Bu Kitap Kime Hitap Eder? 2 Kitapta Nelerden Bahsedilmiştir? 3 Kitabı Takip Edebilmek için Nelere İhtiyaç Duyacaksınız?

Makey Oz Modülünü Bilgisayardan Programlamak Uygulama Kurulumu

1 GİRİŞ 1 Bu Kitap Kime Hitap Eder? 2 Kitapta Nelerden Bahsedilmiştir? 3 Kitabı Takip Edebilmek için Nelere İhtiyaç Duyacaksınız?

Adım 1: Bileşenler 1. Bir adet Arduino board 2. Bir adet DHT11 Sensör Modülü 3. 3 adet Dişi-Dişi jumper kablo

Arduino Uno ile Hc-Sr04 ve Lcd Ekran Kullanarak Mesafe Ölçmek

e-imzatr Kurulum Klavuzu

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Android Platformunda Uygulama Geliştirme.

ILI9341 TFT Dokunmatik Ekranda Kalemle Çizim Yapmak için Visuino ile Arduino Programlama

Online Elektronik Devre Simülasyonu 123D Circuits

2. ADIM : Sim Kart Yerleştirildikten sonra Açma-Kapama (1) Tuşu İle Kol Saatini Açınız.

Bu yazımızda arduinodaki mpu6050(6 eksenli jiroskop-ivme sensörü), hc-05(bluetooth sensörü) aracılığıyla c# taki serialport1 i haberleştireceğiz.

1- KULLANILACAK DEVRE ELEMANLARININ TANITILMASI

IOT UYGULAMALARINA GİRİŞ

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

CUSTOMSLİDİNG KULLANIMI

Melih Hilmi ULUDAĞ. Yazılım Mühendisi Mekatronik Mühendisi. a aittir.


MOBİL UYGULAMA GELİŞTİRME

UFUK ÜNİVERSİTESİ MERKEZ KÜTÜPHANESİ MENDELEY KULLANIM KILAVUZU

Arduino nedir? Arduino donanım ve yazılımın kolayca kullanılmasına dayalı bir açık kaynak elektronik platformdur.

VTIY DERS-4 YARDIMCI NOTLARI -2018

Espresso ile Android Uygulama Testi

WiFiBELL kablolu veya kablosuz olarak internete bağlanarak akıllı telefonunuzla çift yönlü görüntülü ve sesli bağlantı sağlar.

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

KARADENİZ TEKNİK ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ TASARIM PROJESİ

Terminal Üzerinden Led Kontrol Uygulaması

Örnek. int analogpin = 3; int val = 0; void setup() { Serial.begin(9600); } void loop() { val = analogread(analogpin); Serial.

e-imzatr Kurulum Klavuzu

Horoz Programlanabilir Zaman Rölesi

LED YAKMAK. Circuit 2. Kablo LED. Direnç. Arduino LED. Direnç (330ohm)

HESAP MAKİNASI YAPIMI

Mobil Uygulama Kullanma Kılavuzu

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

Flash ile Etkileşimli Öğretim Materyali Hazırlama Semineri

Erzurum Teknik Üniversitesi RobETÜ Kulübü Robot Eğitimleri. ARDUİNO EĞİTİMLERİ I Arş. Gör. Nurullah Gülmüş

Grove Parmak İzi Okuyucu Sensör ile Arduino Uno

Wolvox Kapı Ekranı. AKINSOFT Wolvox Kapı Ekranı Yardım Dosyası. Doküman Versiyon :

BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi SERVİS BİLEŞENLERİ. BLM401 Dr.Refik SAMET

PHOTO STORY ÖĞRENİYORUM. Emine DEĞİRMENCİ Hilal KAYA Sevim DEMİR

BİL132 Bilgisayar Programlama II

void setup() fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız.

PORT HABERLEŞME SERİ PORT FARUK BOZAN

BİL-141 Bilgisayar Programlama I (Java)

Nevşehir Hacı Bektaş Veli Üniversitesi Moodle Uzaktan Eğitim Sistemi Öğretim Elemanı Bilgilendirme Kılavuzu

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

Android Studio Dersleri

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ GÖMÜLÜ SİSTEMLER DENEY FÖYÜ

T.C. KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

Q-scout ne işe yarar?

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların

Progress Barlı, FTP Dosya Upload Appleti

HALI SÜPÜRMEK UYGULAMASI KULLANIM KILAVUZU ÖĞRETMENLER VE VELİLER İÇİN

RSA ANAHTAR DAĞITIMI VE RSA İLE DİJİTAL İMZA OLUŞTURMA

V Daq Kurulum adımları

2.Eclipse açıldıktan sonra Workspace alanı seçilmesi gerekir. Workspace alanı projelerinizin fiziksel olarak bulunduğu kısımdır.

MOBİL UYGULAMA GELİŞTİRME

Bİ L 131 Hafta 2. 1) Bilgisayara Java SE Development Kit 7 kurulması

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

İçindekiler. Akıllı Tahta Uygulaması (ATU) Kullanma Kılavuzu. İçindekiler. Bölüm 1: Uygulama Hakkında Genel bilgi 2

UniGSM Arduino SHIELD (UniGSM-A) KURULUM ve KULLANIM KİTAPÇIĞI

JAVA API v2.0 Belge sürümü: 2.0.2

MEBİS Kullanım Kılavuzu. Öğrenci İstanbul Medipol Üniversitesi

Nevşehir Hacı Bektaş Veli Üniversitesi. Moodle Uzaktan Eğitim Sistemi. Öğretim Elemanı Bilgilendirme Kılavuzu

Raspberry Pi 3 ile Snort Entegrasyonu

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

ARDUINO NEXTION UYGULAMASI. Bu makale, Arduino UNO kartı ile Nextion HMI ekranlarının nasıl kontrol edildiğini anlatmaktadır.

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

e-imzatr Kurulum Klavuzu

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

Bilgiyolu Yayıncılık Elektronik Sunum Programı Kurulum Kılavuzu

TARİHÇE. Versiyon Tarih Düzenleyen Açıklama Engin DURMAZ İlk versiyon

WORDPRESS İLE BLOG TASARLAMA REHBERİ İçindekiler

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Kayan Yazı LED Tabela Kullanım Klavuzu

İ İŞİ BÖLÜM ROBOTİK KODLAMA ÖĞRENME ALANLARI BASİT ELEKTRONİK DEVRELERE GİRİŞ AKILLI CİHAZ TASARIMINA GİRİŞ ROBOTİĞE GİRİŞ

Adım 1: Bileşenler 1. Bir adet Arduino board 2. Bir adet kızılötesi engel kaçış Sensör modülü 3. 4 adet Dişi-Dişi jumper kablo

OKUL HABER EKLEME MODÜLÜ TANITIM DOSYASI. Okul haberlerinizi ilçemiz web sitesinde yayınlayabilmek için aşağıdaki adımları uygulamanız gerekmektedir.

Elif İLİKSİZ. Keziban TURAN. Radio Frekanslarla Hareket Eden Araç

MERHABA BENİM ADIM BULUT :)

Transkript:

Androıd ile Arduıno Nazir Doğan

İçindekiler Bölüm 1: Başlarken 1 ADK Nedir? 2 Donanım Geliştirme Kartları 4 Google ADK 2011 4 Arduino ADK 6 Google ADK 2012 6 Arduino DUE 7 IOIO 8 Desteklenen Android Cihazlar 9 Bölüm 2: Geliştirme Ortamının Kurulumu 11 Java Geliştirme Kiti (JDK) 12 Windows için Kurulum 13 Linux için Kurulum 16 Mac OSX için Kurulum 17 Android SDK 17 Arduino IDE 19 Windows Kurulumu 21 Windows 8 Kurulumu 24 Linux Kurulumu 26 Mac OSX Kurulumu 27 Fritzing Nedir? 28 Processing 28 Bölüm 3: Androıd ve Arduıno yu tanıştırma 31 Merhaba Arduino Uygulaması 32 Merhaba Android Uygulaması 35 Uygulama Bileşenleri 36

viii Androıd ile Arduıno İçindekiler ADK için Arduino Merhaba Dünya Uygulaması 38 ADK için Arduino Merhaba Dünya Uygulaması 49 Arduino ya Kütüphane Eklemek 49 Windows ve Mac 49 Linux 50 Arduino Kodları 54 Arduino ADK ile Android i Konuşturma 54 Bölüm 4: Çıkışlar (Outputs) 71 Proje 1 - Led Yakma 72 Devre Kurulumu 72 Yazılım 74 Android Uygulaması 75 Proje 2 - Led in Işık Şiddetini Ayarlama 82 Devre Kurulumu 83 Yazılım 83 Android Uygulaması 85 Bölüm 5: Girişler (Inputs) 93 Buton Durumu Okuma 94 Kurulum 94 Android Uygulaması 96 Kurulum 103 Yazılım 104 Android 106 Bölüm 6: Işık Şiddeti Ölçme 113 Proje 5 - Foto Direnç (LDR) ile Işık Şiddeti Ölçme 114 Devre Kurulumu 116

ix Androıd ile Arduıno İçindekiler Yazılım 116 Arduino 116 Android Uygulaması 118 Bölüm 7: Arduıno ve Arduıno ile Bluetooth İletişimi 125 Processing ile Android 126 Processing e Android Modu Ekleme 126 Ketai Kütüphanesi 127 Proje 5 Bluetooth ile Led Yakma ve Seri Haberleşme 128 HC-06 Bluetooth Modülü 128 Kurulum 129 Yazılım 129 Kitapta Kullanılan Malzemeler 135 Indeks 136

4 Çıkışlar (Outputs) Bu Bölümde Proje 1 - Led Yakma 72 Proje 2 - Led in Işık Şiddetini Ayarlama 82 Orjinal Arduino tasarımından türetilmiş bir ADK kartının bir çok pine ve konnektöre sahip olduğunu önceki bölümlerde söylemiştik. ADK kartının büyük kısmı dijital pinlerden oluşmaktadır. Bu dijital pinler dijital giriş veya çıkış olarak kullanılma yeteneğine sahiptir. Bu bölümde dijital çıkış pinlerini nasıl kullanacağımızı öğreneceğiz. Bu Bölümde Kullanılan Malzemeler» Arduino Mega ADK (Android Geliştirme Kartı)» Asus Memo Pad 7» Devre Tahtası» USB B tipi kablo (Yazıcı kablosu olarakta bilinir)» Micro USB kablo» Devre Tahtası (BreadBoard)» Jumper Kablolar» LED

ro e 1 ed akma 75 Android y ulaması Android için daha önce yaptığımız gibi AndroidManifest.xml i düzenlemek gerekir. Hatırlayacağınız üzere Android cihazımızın USB özelliğini kullanabilmek için bu düzenlemeye şiddetle ihtiyacımız vardır. Aksi takdirde hiçbir uygulamamız çalışmayacaktır. Ayrıca veri protokolünü ayarlayıp ve LED i açıp kapatacak bir Arayüz elemanı olan ToggleButton u eklemek lazımdır. Şimdi koda bakalım: NOT Android uygulamaları için kullandığımız kaynak kodları uzun olduğundan, bu kodları kitabın başında verdiğim GitHub adresinden indirip kullanabilirsiniz. package com.example.projeled; import android.support.v7.app.actionbaractivity; import android.os.bundle; import java.io.filedescriptor; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; import android.app.pendingintent; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.intentfilter; import android.os.asynctask; import android.os.parcelfiledescriptor; import android.util.log; import android.widget.compoundbutton; import android.widget.compoundbutton.oncheckedchangelistener; import android.widget.togglebutton; import com.android.future.usb.usbaccessory; import com.android.future.usb.usbmanager; public class MainActivity extends ActionBarActivity { private static final String TAG = MainActivity.class.getSimpleName(); private PendingIntent mpermissionintent; private static final String ACTION_USB_PERMISSION = com.android.example.usb_permission ; private boolean mpermissionrequestpending; private UsbManager musbmanager; private UsbAccessory maccessory; private ParcelFileDescriptor mfiledescriptor; private FileInputStream minputstream; private FileOutputStream moutputstream;

78 Bölüm 4 Çıkışlar (Outputs) maccessory = accessory; FileDescriptor fd = mfiledescriptor.getfiledescriptor(); minputstream = new FileInputStream(fd); moutputstream = new FileOutputStream(fd); Log.d(TAG, Aksesuar açıldı ); else { Log.d(TAG, Aksesuar açılamadı ); private void closeaccessory() { try { if (mfiledescriptor!= null) { mfiledescriptor.close(); catch (IOException e) { finally { mfiledescriptor = null; maccessory = null; public void sendledswitchcommand(byte target, boolean isswitchedon) { byte[] buffer = new byte[3]; buffer[0] = COMMAND_LED; buffer[1] = target; if (isswitchedon) { buffer[2] = VALUE_ON; else { buffer[2] = VALUE_OFF; if (moutputstream!= null) { try { moutputstream.write(buffer); catch (IOException e) { Log.e(TAG, Yazma başarısız oldu, e); LED i kontrol etmek için Arduino Sketch inde bulunan sabitleri Android uygulama tarafındada tanımlamamız gerekmektedir.

ro e 1 ed akma 79 private static final byte COMMAND_LED = 0x2; private static final byte TARGET_PIN_2 = 0x2; private static final byte VALUE_ON = 0x1; private static final byte VALUE_OFF = 0x0; Bu projemizde herhangi bir metin görüntülemeye ihtiyacımız olmadığı için Projenin oluşturduğu textview i silip LED i açıp kapatmak için bir tane ToggleButton u ekledik. private ToggleButton ledtogglebutton; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); musbmanager = UsbManager.getInstance(this); mpermissionintent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); filter.addaction(usbmanager.action_usb_accessory_detached); registerreceiver(musbreceiver, filter); setcontentview(r.layout.activity_main); ledtogglebutton = (ToggleButton) findviewbyid(r.id.led_toggle_button); ledtogglebutton.setoncheckedchangelistener(togglebuttoncheckedlistener); ledtogglebutton una eklediğimiz OnCheckedChangeListener olayı butona her basıldığında tetiklenir. ToggleButton, Button elementinin özelleşmiş halidir. Seçili mi değil mi, kontrolünü yapabilirsiniz. OnCheckedChangeListener olayı içerisinde bulunan oncheckedchange adında iki tane parametre alan bir metod bulunmaktadır. Butonun durumu kontrol edilerek yeni durum ona göre ayarlanır. OnCheckedChangeListener togglebuttoncheckedlistener = new OnCheckedChangeListener() { @Override public void oncheckedchanged(compoundbutton buttonview, boolean ischecked) { if (buttonview.getid() == R.id.led_toggle_button) { new AsyncTask<Boolean, Void, Void>() { @Override protected Void doinbackground(boolean... params) {

80 Bölüm 4 Çıkışlar (Outputs) sendledswitchcommand(target_pin_2, params[0]); return null;.execute(ischecked); ; sendledswitchcommand metodu daha önce yaptığımız örnekte kullandığımız sendtext metodu ile hemen hemen aynıdır. Burada ise 3 bayt data göndermektedir: public void sendledswitchcommand(byte target, boolean isswitchedon) { byte[] buffer = new byte[3]; buffer[0] = COMMAND_LED; buffer[1] = target; if (isswitchedon) { buffer[2] = VALUE_ON; else { buffer[2] = VALUE_OFF; if (moutputstream!= null) { try { moutputstream.write(buffer); catch (IOException e) { Log.e(TAG, Yazma başarısız oldu, e); Bütün bu kodları ekledikten sonra ise arayüz için değişiklik yapmamız gerekmektedir. activity_main.xml açıp Grafik Designer a geçtikten sonra bunu görmemiz lazım: NOT ADT (Android Developer Tools) uygulamalarımızın arayüzünü düzenlememiz için Grafik Designer a sahiptir. Grafik Designer da bırak ile yeni arayüz elemanları ekleyebiliriz. Bunların yerini görsel olarak görebiliriz. Bütün stil özelliklerine mühadele edip değiştirebiliriz.

84 Bölüm 4 Çıkışlar (Outputs) Arduino Sketch: #include <Max3421e.h> #include <Usb.h> #include <AndroidAccessory.h> #define COMMAND_LED 0x2 #define TARGET_PIN_2 0x2 #define PIN 2 AndroidAccessory acc( Uretici, Model, Aciklama, Versiyon, URI, Seri ); byte rcvmsg[3]; void setup() { Serial.begin(19200); acc.poweron(); pinmode(pin, OUTPUT); void loop() { if (acc.isconnected()) { // alınan veriyi bayt dizisinde okumak için int len = acc.read(rcvmsg, sizeof(rcvmsg), 1); if (len > 0) { if (rcvmsg[0] == COMMAND_LED) { if (rcvmsg[1] == TARGET_PIN_2) { // analog değeri alma byte value = rcvmsg[2]; // çıkış pinini analog değere göre ayarlamak için analogwrite(pin, value); LED in durumunu belirten (VALUE_ON/VALUE_OFF) sabitlerini sildik. Çünkü artık dijital değerlerle değil analog değerlerle uğraşıyoruz. Android uygulamasından gönderdiğimiz bayt değerleri Arduino Sketch inde bulunan analogwrite metoduna yazılır. analogwrite metodu dijital pinleri tetikleyerek kare dalgalar üretir. Bizim pinden gönderdiğimiz 0 ve 5V arası değere göre 0 ile 255 arasında değerler alır. NOT Dijital değerler ile çalışırken iki tane durumumuz vardır her zaman. Bu durumlar 1 (HIGH) ve 0 (LOW) lardan oluşmaktadır. Ama analog değerler ile çalışıyorken bu durumlar bizim ihtiyacımızı karşılamamaktadır. Çünkü analog değerler ara değerleri de içermektedir. Analog dünyamızı dijital ortamda anlamlandırmak için PWM tekniğinden faydalanmaktayız.

ro e 2 ed in Işık Şiddetini Ayarlama 85 Android y ulaması Android uygulaması Proje 1 deki uygulama ile hemen hemen aynı olmakla birlikte yeni olarak SeekBar elementi eklenmiştir. Proje 1 i biraz değiştirerek uygulamamızı yapacağız. Uygulamamızın kodu GitHub da var. Şimdi koda bir göz atalım: package project.two.adk; import java.io.filedescriptor; import java.io.fileinputstream; import java.io.fileoutputstream; import java.io.ioexception; import android.app.activity; import android.app.pendingintent; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.intentfilter; import android.os.asynctask; import android.os.bundle; import android.os.parcelfiledescriptor; import android.util.log; import android.widget.seekbar; import android.widget.seekbar.onseekbarchangelistener; import android.widget.textview; import com.android.future.usb.usbaccessory; import com.android.future.usb.usbmanager; public class ProjectTwoActivity extends Activity { private static final String TAG = ProjectTwoActivity.class.getSimpleName(); private PendingIntent mpermissionintent; private static final String ACTION_USB_PERMISSION = com.android.example.usb_permission ; private boolean mpermissionrequestpending; private UsbManager musbmanager; private UsbAccessory maccessory; private ParcelFileDescriptor mfiledescriptor; private FileInputStream minputstream; private FileOutputStream moutputstream; private static final byte COMMAND_LED = 0x2; private static final byte TARGET_PIN_2 = 0x2; private TextView ledintensitytextview; private SeekBar ledintensityseekbar; /** Activity ilk oluşturulduğunda çagrılır */@Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate);

86 Bölüm 4 Çıkışlar (Outputs) musbmanager = UsbManager.getInstance(this); mpermissionintent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); filter.addaction(usbmanager.action_usb_accessory_detached); registerreceiver(musbreceiver, filter); setcontentview(r.layout.main); ledintensitytextview = (TextView) findviewbyid(r.id.led_intensity_text_view); ledintensityseekbar = (SeekBar) findviewbyid(r.id.led_intensity_seek_bar); ledintensityseekbar.setonseekbarchangelistener(ledintensitychangelistener); ledintensitytextview.settext( LED intensity: + ledintensityseekbar.getprogress()); /** * oncreate() methodundan sonra Activity bekleme durumundan devam *ettirildiğinde çağrılır. **/@Override public void onresume() { super.onresume(); if (minputstream!= null && moutputstream!= null) { return; UsbAccessory[] accessories = musbmanager.getaccessorylist(); UsbAccessory accessory = (accessories == null? null : accessories[0]); if (accessory!= null) { if (musbmanager.haspermission(accessory)) { openaccessory(accessory); else { synchronized(musbreceiver) { if (!mpermissionrequestpending) musbmanager.requestpermission(accessory, mpermissionintent); mpermissionrequestpending = true; else { Log.d(TAG, maccessory is null ); /** Activity sistem tarafından durduluğunda çağrılır. */@Override public void onpause() { super.onpause(); closeaccessory(); // Activity e ihtiyaç duyulmadığında sistem tarafından yok edilirken çagrılır. @Override public void ondestroy() { super.ondestroy();

ro e 2 ed in Işık Şiddetini Ayarlama 87 unregisterreceiver(musbreceiver); OnSeekBarChangeListener ledintensitychangelistener = new OnSeekBarChangeListener() {@Override public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) { ledintensitytextview.settext( LED intensity: + ledintensityseekbar.getprogress()); new AsyncTask < Byte, Void, Void > () {@Override protected Void doinbackground(byte...params) { sendledintensitycommand(target_pin_2, params[0]); return null;.execute((byte) progress); @Override public void onstarttrackingtouch(seekbar seekbar) { // not implemented @Override public void onstoptrackingtouch(seekbar seekbar) { // not implemented ; private final BroadcastReceiver musbreceiver = new BroadcastReceiver() {@Override public void onreceive(context context, Intent intent) { String action = intent.getaction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized(this) { UsbAccessory accessory = UsbManager.getAccessory(intent); if (intent.getbooleanextra( UsbManager.EXTRA_PERMISSION_GRANTED, false)) { openaccessory(accessory); else { Log.d(TAG, permission denied for accessory + accessory); mpermissionrequestpending = false; else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) { UsbAccessory accessory = UsbManager.getAccessory(intent); if (accessory!= null && accessory.equals(maccessory)) { closeaccessory();

88 Bölüm 4 Çıkışlar (Outputs) ; private void openaccessory(usbaccessory accessory) { mfiledescriptor = musbmanager.openaccessory(accessory); if (mfiledescriptor!= null) { maccessory = accessory; FileDescriptor fd = mfiledescriptor.getfiledescriptor(); minputstream = new FileInputStream(fd); moutputstream = new FileOutputStream(fd); Log.d(TAG, accessory opened ); else { Log.d(TAG, accessory open fail ); private void closeaccessory() { try { if (mfiledescriptor!= null) { mfiledescriptor.close(); catch (IOException e) { finally { mfiledescriptor = null; maccessory = null; public void sendledintensitycommand(byte target, byte value) { byte[] buffer = new byte[3]; buffer[0] = COMMAND_LED; buffer[1] = target; buffer[2] = value; if (moutputstream!= null) { try { moutputstream.write(buffer); catch (IOException e) { Log.e(TAG, yazma hatasi, e);

ro e 2 ed in Işık Şiddetini Ayarlama 89 Kodu verdikten sonra ise şimdi Proje 1 e göre değişen yerlere bir göz atalım. LED in durumunu belirttiğimiz ToggleButton unu kaldırdık ve onun yerine parlaklığı ayarlamamız için SeekBar elementi ve seçtiğimiz parlaklığı göstermek için bir TextView elementi ekledik. private TextView ledintensitytextview; private SeekBar ledintensityseekbar; /** Activity ilk oluşturulduğunda çagrılır. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); musbmanager = UsbManager.getInstance(this); mpermissionintent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); filter.addaction(usbmanager.action_usb_accessory_detached); registerreceiver(musbreceiver, filter); setcontentview(r.layout.main); ledintensitytextview = (TextView) findviewbyid(r.id.led_intensity_text_view); ledintensityseekbar = (SeekBar) findviewbyid(r.id.led_intensity_seek_bar); ledintensityseekbar.setonseekbarchangelistener(ledintensitychangelistener); ledintensitytextview.settext( LED parlaklığı: + ledintensityseekbar.getprogress()); SeekBar elementine OnSeekBarChangeListener olayı ekleyerek değeri değiştiğinde Arduino tarafına gönderir. OnSeekBarChangeListener ledintensitychangelistener = new OnSeekBarChangeListener() { @Override public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) { ledintensitytextview.settext( LED intensity: + ledintensityseekbar.getprogress()); new AsyncTask < Byte, Void, Void > () {@Override protected Void doinbackground(byte...params) { sendledintensitycommand(target_pin_2, params[0]); return null;.execute((byte) progress); @Override public void onstarttrackingtouch(seekbar seekbar) { // not implemented @Override public void onstoptrackingtouch(seekbar seekbar) { // not implemented ;

7 Arduıno ve Arduıno ile Bluetooth İletişimi Bu Bölümde Processing ile Android 126 Proje 5 Bluetooth ile Led Yakma ve Seri Haberleşme 128 Bu bölümde Arduino ve Android in BlueTooth kullanarak birbiri ile haberleşmesini sağlayacağız. Örneklerimizi Processing ortamı ile geliştireceğiz. Bu bölümde uygulayacağımız örnekleri gayet basit ve anlaşılabilir tuttum. Bu sayede, kendi başınıza yapacağınız uygulamalar için iyi bir referans oluşturmasını arzu ediyorum. Bu Bölümde Kullanılan Malzemeler» Arduino Mega ADK (Android Geliştirme Kartı)» Asus Memo Pad 7» Devre Tahtası» USB B tipi kablo (Yazıcı kablosu olarakta bilinir)» Micro USB kablo» Devre Tahtası (BreadBoard)» Jumper Kablolar» HC-06 Bluetooth Modülü

126 Bölüm 7 Arduıno ve Arduıno ile Bluetooth İletişimi Bluetooth 1994 yılında Ericsson firması tarafından cep telefonları ve diğer cihazları kablosuz olarak birbirine bağlamak amacıyla geliştirilmiştir. Bugün akıllı telefonlarımızın birçoğunda bulunmaktadır. Ayrıca Bluetooth üzerinden haberleşen aksesuarlar da bulunmaktadır. Örneğin Bluetooth Hoparlörler, akıllı saatler vb.. Bu bölümde Arduino ve Android in Bluetooth kullanarak birbiri ile haberleşmesini sağlayacağız. Bluetooth teknolojisini kullanmamızın nedeni kablosuz kısa mesafeli, ses ve veri haberleşmesini sağlamak için oluşturulmuş bir standard olmasıdır. Bluetooth standardı 10 metreye kadar ses ve veri aktarımını sağlamayı öngörmektedir. Mobil cihazlarda çok önemli bir husus olan güç tüketimi açısından kıyasladığımızda ise Bluetooth, Wi-Fi a göre daha az enerji tüketmektedir. Örneğimizi diğer projelerin aksine Processing ortamı ile geliştireceğiz. Oldukça kolay bir örnek ile konuyu anlamaya çalışacağız. Processıng ile Androıd Android SDK ve Processing kurulumunu Bölüm 2 de ele almıştık. Bu bölümde Android modunu ekleyerek projelerimize başlayacağız. Processing e Android Modu Ekleme Processing de Android uygulamaları yazmak için Android modunu eklememiz gerekmektedir. Bunun için Processing ortamını açıp sağ üst köşede Java yazan kısıma tıklıyoruz. Tıkladığımızda küçük bir menü açılacak. Açılan menüde Add Mode a tıklıyoruz.

Processıng ile Androıd 127 Tıkladıktan sonra aşağıdaki menü açılacaktır. Açılan menüde Android Mode e Install butonuna tıklayarak kuruyoruz. Android Mode u indirdikten sonra Processing ortamında gözükmeyecektir. Bunun için Processing i yeniden başlatmamız gerekmektedir. Yeniden başlattıktan sonra Android Mode u sağ üst köşedeki menüye gelecektir. Menüde Android e tıkladıktan sonra kurulumu ilk defa yaptığımız için, Processing bizden Android SDK nin yerini göstermemizi isteyecektir. Locate SDK path manually diyerek Android SDK nin yolunu ayarlıyoruz. Ketaı Kütüphanesi Bu kütüphane Android telefon ve tabletlerin sensörlerini ve yerleşik donanımlarıyla çalışmayı kolaylaştırmak amacıyla yazılmıştır. Özellikle Bluetooth, Wifi ve NFC iletişimi, çoklu dokunmatik ve sensörle çalışmayı oldukça kolay bir hale