1 Nisan 2015 Çarşamba
11 Ocak 2015 Pazar
Yeni Site
8 Ocak 2015 Perşembe
Android GPS Uygulaması
Merhaba arkadaşlar, bu yazımızda android ile yaptığımız bir uygulama sayesinde anlık olarak pozisyon bilgimizi nasıl bulacağımızı öğreneceğiz. Kod ile ilgili anlatım videoda mevcuttur. Bu yüzden kodu anlatmıyacağım.
Bilindiği gibi tüm android telefonların içerisinde gps sensörü bulunmaktadır. Dolayısıyla bu sensörü kullanarak konumumuzu öğrenebiliriz. Peki konumumuzu öğrenip ne yapacağız ?
Sürekli haberdar olmak istediğimiz kişilere konumuzu gönderebilir aynı zamanda onlarında konumlarını öğrenebiliriz. Yanin kimin nerede olduğunu bu çalışma ile öğrenebiliriz. Yada araç, çocuk vs üzerine yerleştirilen telefondan alınan bu konum bilgisini internet veya sms yolu ile farklı ortamlara iletebiliriz. Böylece takip sistemi yapabilir yada çalınmalara karşı önlem almış oluruz.
Uygulama ekran görüntüsü
Uygulama ekran görüntüsü
Ders anlatım videosu : http://www.youtube.com/watch?v=v2QkwxSel44
7 Ocak 2015 Çarşamba
Android Akıllı Ev Kontrolü
Merhaba arkadaşlar, bu yazımızda android ile yazdığım bir uygulamayı inceleyeceğiz. Led Kontrol ismini verdiğim bu uygulama ile 10 farklı ledi ve 1 adet servo motoru kontrol edebilmekteyiz. Peki yayının başlığı neden akıllı ev kontrolü ?
Bunu şu şekilde açıklayayım. Birgün merak edip penceresinde SATILIK yazan evin sahibini aradım ve evin fiyatını sordum. Ev akıllı sistemlerle donatılmış ve fiyatı da oldukça fazlaydı. Daha detaylı öğrenmek için bu tarz bir evi görmeye gittim. Birçok farklı hayatı kolaylaştırıcı sistem vardı. Bunlardan bazıları şunlardı:
- Yatak odası ve oturma odasının lambaları kumanda ile kontrol ediliyordu,
- Kalorifer ısı ayarı yine uzaktan kumanda ediliyordu,
- Kapılar otomatik açılıyor ve istenilen kapı kumanda ile kilitlenebiliyordu...
Tabiki bu evlerin özellikleri bu saydıklarımdan daha fazladır ancak en azından bu uygulamaları kumanda değilde telefonla yapabiliriz diye düşünüyorum. Dolayısıyla bunları yapabileceğiniz bir uygulama yazdım. Led kontrolleri sayesinde evinizdeki tüm lambaları telefon ile kumanda edebilir, kapınıza yapacağınız mekanik sistemle servo vs. kullanarak kapıyı kilitleyebilir yada açabilirsiniz. Yani uygulama alanını genişletmek size kalmış.
Uygulama arayüzü ana ekran
Uygulama arayüzü hakkında ekranı
Uygulama arayüzü bilgi ekranı
Yaptığım bu uygulama bu zamana kadar android ile ilgili videolu derslerde anlattığım konuları içermektedir. Dolayısıyla kodların tamamını paylaşmak yerine ilk defa gördüğümüz ChechBox ile ilgili kısımları paylaşmanın daha doğru olduğunu düşünüyorum.
MainActivty.java kod kısmı:
1. ledi kontrol etmek için kullandığımız checkbox işaretlendiğinde seri porttan "a" harfi gönderilmektedir. Ledi kontrol etmek için arduino kullandığınızı düşünürsek aşağıdaki kodlar ile 2 ledin on - off kontrolü yapılır.
6 Ocak 2015 Salı
Arduino Öğreniyorum Çalışmaları
Merhaba arkadaşlar, bu yazımda sizlere arduino ile ilk tanıştığımda yapmış olduğum ve bilgisayarı karıştırırken bulduğum birkaç örnek programı anlatacağım.
1- Arduino Karaşimşek Programı:
Açıklama satırlarında hangi kodun ne iş yaptığı yazmaktadır. Ancak yine yeni başlayanlara yardımcı olmak açısından kısa kodumuzdaki komutları tanıyalım.
const byte ledPin[11]={2,3,4,5,6,7,8,9,10,11,12}; Bu kodda ledlerin artı uçlarının takılacağı pin numaraları verilmiştir. Daha doğrusu const byte tipinde bu numaralar ledPin değişkenine atanmıştır. ledPin değişkeni 11 elemana sahip tek boyutlu dizidir.
byte veri türü işlemci belleğinde 8 bitlik yani 1 byte lık alanı işgal eder.
const tür belirleyicisi ise tanımlanan nesnenin bir sabit olduğunu belirtir. Yani const tür belirleyicisi ile tanımlanmış bir değişkenin değeri programın sonuna kadar değiştirilemez ve programın en başında tanımlanır. Peki neden buna ihtiyaç duyduk ? Bu sorunun cevabı aslında oldukça uzun ancak kısaca ve anlaşılır bir şekilde şöyle anlatayım.
Arduino kartlarında (Due hariç) 3 tip memory vardır. Bunlar Flash, SRAM( static random access memory) ve EEPROM (erasable programmable read only memory) memory tipleridir. İşlemcinin enerjisi kesildiğinde sadece SRAM deki bilgiler kaybolur. Arduinoda SRAM memory nin görevi sketch oluşturmak ve değişkenleri çalıştırmaktır.
Arduino sketchi Flash memory e kaydedilir. Bunu, kartınıza IDE kullanarak program attığınızda en altta göreceksiniz ( Şekil 1).
Şekil 1
EEPROM ise programlamacı için ayrılmış bir alandır. İstenilen verilerin kaydedilmesi durumunda kod yazanlar tarafından kullanılır.
Bunları anlatmamın const tür belirleyicisi ile ne alakası var diyebilirsiniz. Ancak çok alakası var. Arduino geliştirme kartlarının sahip olduğu bu memory tipleri kısıtlı alanlara sahip. Dolayısıyla siz üst düzey kompleks bir kod yazacaksanız sahip olduğunuz hafıza alanını iyi kullanmalısınız. Bunun içinde hafızada en az yer tutan tür belirleyicilerini kullanmalısınız. #define ve const tür belirleyicileri değişken tanımlamalarında en az alan kaplayan tür belirleyicileridir. #define komutu ile const komutu hafızada aynı yeri kaplarlar. Bu sebepten const tür belirleyicisi kullanılmıştır.
void setup() fonksiyonu içerisinde bulunan for döngüsü sayesinde led pinlerinin 10 satırda OUTPUT olarak tanımlanma işlemi 3 satır kod ile yapılmıştır.
setup() fonksiyonu içerisindeki kodlar programın çalışması boyunca sadece bir kere çalıştırılır. Ve bu fonksiyon içerisinde başlangıç değerleri, pin modları (input, output olması), kullanılan kütüphanelerin başlatılması ( lcd.begin() ) gibi işlemler yapılmaktadır.
void loop() fonksiyonu programın sürekli çalıştırıldığı fonksiyondur. Yani program loop fonksiyonu içerisinde dönmektedir. Yapılması istenen işlemler bu fonksiyon içerisine yazılmalıdır.
2- Arduino Bir Butonla Bir Led Yakma Programı
3- Arduino Butonla Karaşimşek Devresi
4- Arduino Led Parlaklık Ayarı
5- Arduino Seven-segment Uygulaması
Android Uygulama Geliştirme Dersleri - Android Bluetooth Servo Kontrol
Merhaba arkadaşlar, bugünkü yazımızda birçok teze yada ödeve konu olan servo kontrolü ile ilgili bir çalışma hazırladım. Android led kontrolü ile ilgili yazımızda, ledin android telefonlar ile nasıl kontrol edileceğini, android telefonun bluetooth aygıtlara nasıl bağlanacağını görmüştük. Bu yazımızda android uygulamamıza eklediğimiz "seekbar" ile arduino ya bağlı servo motoru nasıl kontrol edeceğimizi öğreneceğiz.
Detaylı açıklama videolu ders anlatımında mevcut olduğu için yazma gereksinimi duymuyorum. Android ve arduino ile ilgili kaynak kodları yazının sonundaki linklerde bulabilirsiniz.
Android seekbar aracı
Arduino servo bluetooth
Ders anlatım videosu :
5 Ocak 2015 Pazartesi
Blogger Kod Kutusu Ekleme
Merhaba arkadaşlar,
Blog paylaşımlarımla alakası olmayan bu konu hakkında çok sıkıntı çektiğim için bu yazıyı yazmak zorunda kaldım. Hem kendim için hemde sizin için kaynak oluşturmasını diliyorum.
Yazdığımız yazılar arasında özellikle yazılım ile ilgili çalışma yapan bizler, kodların blogda düzgün bir şekilde görünmesini isteriz. Ancak kod kutusu kullanmayınca bu pek mümkün olmamaktadır.
Sürekli kod kutusu ile ilgili kodları netten araştırmaktansa onunla ilgili bir yayın hazırlayıp kendime ve sizlere referans olmasını istedim.
Tamamıyla netten farklı sitelerden araştırdığım bu kodlar bana ait değildir.
1 - Bulduğum birinci yöntem:
Kod satırı içerisinde bulunan kodları, yayın sayfanızın sol üst kısmındaki HTML linkini seçip, açılan sayfada kodları yerleştirmek istediğiniz yere yapıştırıyorsunuz. Ve sonuçta kodları içine alan kod satırı oluşuyor. Kodun en sonuna bu kod </textarea> eklenmelidir.
Arduino C# Haberleşmesi - Real time Graph Version 2
Merhaba arkadaşlar,
Bir önceki yazımda arduino yada seri porttan gelen verilerin grafiğinin çizdirilmesi ve çizidirlen grafiğin anlık resimlerinin alınabilmesi için bir setup yapmıştık. Bu çalışmada yapılan bu setup biraz daha geliştirilmiştir.
Eklenen özellikler:
Bir önceki yazımda arduino yada seri porttan gelen verilerin grafiğinin çizdirilmesi ve çizidirlen grafiğin anlık resimlerinin alınabilmesi için bir setup yapmıştık. Bu çalışmada yapılan bu setup biraz daha geliştirilmiştir.
Eklenen özellikler:
- Gelen veriler ekranda gerçek zamanlı gösterilmiştir.
- Gelen verilerin txt dosyasına kaydedilmesi için kayıt yeri girişi ve kaydet butonu eklenmiştir. Bu sayede istenilen zamana kadar olan veriler kaydet butonu ile txt dosyasına kaydedilebilecektir. Bu sayede ekranda gerçek zamanlı izlenen grafik görüntüsü, kaydedilen veriler kullanılarak excel, matlab gibi ortamlara aktarılabilecektir.
Grafik çizdirme proramı version 2
Uygulama kaynak kodları ve setup dosyaları :
Arduino C# Haberleşmesi - Real time Graph
Merhaba arkadaşlar,
Bugünkü yazımızda Arduino seri portundan gönderilen verilerin c# dili ile oluşturulmuş bir arayüzde gerçek zamanlı olarak grafik gösterimi işlenecektir.
Sadece arduino geliştirme kartından gelen veriler değil seri porttan gelen tüm verileri (beagleboard, raspberry pi, texas instrument kartları vs.) bu arayüz sayesinde gerçek zamanlı gözlemleyebilirsiniz.
C# ile oluşturulan arayüze ait kaynak dosyaları yazının sonundaki linkte mevcuttur. Ayrıca indirilen klasörde programın setup ı da bulunmaktadır.
C# setup oluşturma konusuna buradan bakabilirsiniz.
Kaynak dosyaların programın anlaşılması için yeterli olduğunu düşündüğümden detaylı anlatım yapmadım. Ancak talep doğrultusunda bununla ilgili bir ders videosu yayınlayabilirim.
Bugünkü yazımızda Arduino seri portundan gönderilen verilerin c# dili ile oluşturulmuş bir arayüzde gerçek zamanlı olarak grafik gösterimi işlenecektir.
Sadece arduino geliştirme kartından gelen veriler değil seri porttan gelen tüm verileri (beagleboard, raspberry pi, texas instrument kartları vs.) bu arayüz sayesinde gerçek zamanlı gözlemleyebilirsiniz.
C# ile oluşturulan arayüze ait kaynak dosyaları yazının sonundaki linkte mevcuttur. Ayrıca indirilen klasörde programın setup ı da bulunmaktadır.
C# setup oluşturma konusuna buradan bakabilirsiniz.
Kaynak dosyaların programın anlaşılması için yeterli olduğunu düşündüğümden detaylı anlatım yapmadım. Ancak talep doğrultusunda bununla ilgili bir ders videosu yayınlayabilirim.
Setup ekran görüntüsü
Uygulama çalışma videosu:
2 Ocak 2015 Cuma
Android Uygulama Geliştirme Dersleri - Android Led Kontrol
Ders 5/1 : Android Proje Geliştirme - Android Bluetooth Led Kontrolü
Video Youtube Linki: http://www.youtube.com/watch?v=ZbLaHGil1dE
Ders 5/2 : Android Proje Geliştirme - Android Bluetooth Led Kontrolü
Video Youtube Linki: http://www.youtube.com/watch?v=GCF64xyTgYc
Ders 5/3 : Android Proje Geliştirme - Android Bluetooth Led Kontrolü
Video Youtube Linki: http://www.youtube.com/watch?v=5GhKjKM0LMA
Ders 5/4 : Android Proje Geliştirme - Android Bluetooth Led Kontrolü
Arduino ve android kaynak kodları :
31 Aralık 2014 Çarşamba
Android Uygulama Geliştirme Dersleri
Ders 1 : Android Proje Geliştirme - Hesap Makinesi Uygulaması
Video youtube linki: http://www.youtube.com/watch?v=Gzc-0LfSuvM
Ders 2 : Android Proje Geliştirme - Android Activity ve Class Ekleme İşlemi
Video Youtube linki: http://www.youtube.com/watch?v=j6qRRwopWG0
Ders 3 : Android Proje Geliştirme - Android Uygulamasına İnternet Erişimin Sağlanması
Video Youtube linki: http://www.youtube.com/watch?v=3Jkq2rkme5Y
Ders 4/1 : Android Proje Geliştirme - Android Bluetooth Kontrolü
Video Youtube Linki: http://www.youtube.com/watch?v=MxIMkOPJja0
Ders 4/2 : Android Proje Geliştirme - Android Bluetooth Kontrolü
Video Youtube Linki: http://www.youtube.com/watch?v=9FPNUB8TgRc
16 Aralık 2014 Salı
Arduino ile Bootloader İşlemi
Merhabalar, bu yazımızda atmel işlemcilerin arduino geliştirme kartı kullanarak nasıl boot edildiğini anlatmaya çalışacağım. Video desteği ile konunun net bir şekilde anlaşılmasını umut ediyorum.
Peki nedir bu bootloader işlemi ? Boot işlemi tıpkı bilgisayarların biosu gibi düşünülebilir. İşlemcinin temel fonksiyonlarını yerine getirmesi için gereklidir. Yani boot edilmemiş bir işlemci ÇALIŞMAYACAKTIR. Dolayısıyla alınan ve boot edilmeden gönderilen tüm işlemcilere bu yöntem uygulanır. Arduino boot işlemi videoda detaylıca anlatılmaktadır. Pin bağlantıları alttaki resimlerde mevcuttur.
Bir kere yapılması yeterlimidir ? Boot işlemini, işlemcinize bir kere yapmanız yeterlidir. Tabi bazı özel durumlar yada hata giderme durumları dışında. Çünkü boot kodunuz işlemcinin flash belleğine yüklenir ve silinmez. Flaşh belleğin daima 5492 byte lık alanı boot işlemi için işgal edilmiş olur. Hatırlayacağınız üzere atmega 328 flash kapasitesi 32 kb idi.
Arduino Uno ile Atmega 328 bootloader devre şeması
Arduino uno pin diagramı
Videoyu buradan izleyebilirsiniz: http://www.youtube.com/watch?v=3dOJIYP74-o&feature=youtu.be
11 Aralık 2014 Perşembe
C# Uygulamaları - C# Seri Port , C# Arduino
C# dili ile yapılmış 2 farklı uygulamanın kurulum linkleri aşağıda mevcuttur.
Bu programlardan ilki seri porttan verilerin okunmasını ve kaydedilmesini sağlamaktadır. Arduino ile yapacağınız projelerde faydalı olabilecektir.
İkinci proje ise seri porttan gönderilen sıcaklık değerinin ekranda bastırılmasını sağlamaktadır. Yani basit bir termometredir.
1- https://drive.google.com/folderview?id=0Byup25DcTDi1enJSM3lqV1VYcDQ&usp=sharing
2- https://drive.google.com/folderview?id=0Byup25DcTDi1NTRsUUJWVXdJckU&usp=sharing
Bu programlardan ilki seri porttan verilerin okunmasını ve kaydedilmesini sağlamaktadır. Arduino ile yapacağınız projelerde faydalı olabilecektir.
İkinci proje ise seri porttan gönderilen sıcaklık değerinin ekranda bastırılmasını sağlamaktadır. Yani basit bir termometredir.
1- https://drive.google.com/folderview?id=0Byup25DcTDi1enJSM3lqV1VYcDQ&usp=sharing
2- https://drive.google.com/folderview?id=0Byup25DcTDi1NTRsUUJWVXdJckU&usp=sharing
1. program ekran görüntüsü
2. program ekran görüntüsü
C# dili ile yapılmış bazı çalışmalara ait videolara şu linklerden ulaşabilirsiniz:
2 Aralık 2014 Salı
5- C Uygulama 5 ( C programlama ile kelimedeki harf sayısı bulan, farklı harfleri bulan ... program )
Çalışma ekran görüntüsü:
Çalışma kaynak kodu:
#include
int main()
{
int input,i,j,p,q,k=0,n=0,toplam=0,bosluk=0;//toplami sayilarin degerlerini toplama atamak icin atadim///bosluku ise bosluklari saydirmak icin
float mat[3][3],eig[2][2],r1,r2;//2 boyutlu diziyle matris olusturabilmek ıcın
char snt[50];//girilecek cumlenin en fazla 50 kelimeden olusmasi icin
printf("\n\nPlease enter");//girilen integera gore islemler yapacak
printf("\n'1' for finding the number of letters in a sentence ");
printf("\n'2' for finding the number of different letters in a sentence ");
printf("\n'3' for finding the number of different words in a sentence");
printf("\n'4' for finding the number of symmetric words in a sentence");
printf("\n'5' for finding the determinant of a 3x3 matrix");
printf("\n'6' for finding the eigenvalues of a 2x2 matrix\n");
for(i=0;i<6;i++)//6 kere deger girebilmek icin yazdim
{
printf("\nEnter your choice:");
scanf("%d",&input);
switch(input)//girilen rakama gore islemler yapmak icin kullandim
{
case 1:
printf("\nEnter a sentence with at most 50 characters:");
fflush(stdin);//enter etkisini yok etmek icin yani sifirlamak icin kullandim
gets(snt);
while(snt[k])
{
if(snt[k]==' ')//bosluga rastladiginda 1 artirir boylece karakter sayisindan bosluklari cikararak harf sayisini bulurum
{
n=n+1;
}
k++;
}
printf("\nThe number of letters: %d \n",k-n);//karakter sayisindan boslugu cikarttim
break;//donguden cýkmasi icin kullandim
case 2:
printf("\nEnter a sentence with at most 50 characters:");
fflush(stdin);//sifirlamak icin kullandim
gets(snt);
toplam=0;
for(k=1;snt[k]!='\0';k++){}//karakter sayisini bulmak icin dongude saydirdim
for(j=97;j<=122;j++)//ASCII koduna gore kucuk harfleri tanimladim
{
bosluk=0;
n=-1;//-1 atama sebebim ayni karakterleri sayarken sonradan cýkarcagim icin o karakterin bir tanesini kendime sakladim
for(p=0,q=0;(p<=k);p++)
{
if(j==snt[p])//alfabedeki harfler sirasiyla taranir sayilari bulunmak icin
{
q++;
n=n+1;//ayni karakteri buldugunda n i artirdim
}
if(snt[p]==' ')//eger dizi bosluga gelirse bosluk degerini bir artirdim sonradan bu degerleri cikarcam
{
bosluk=bosluk+1;
}
}
if(q>0)//eger ayni karakter birden fazla ise ni toplama toplama islemi yaparakta atadým
{
toplam+=n;
}
}
printf("\nThe number of different letters: %d \n",k-toplam-bosluk);//farkli karakterleri bulmak icin toplam karakterden ayni karakter sayisini ve bosluk sayisini cýkardim
break;
case 3:
printf("\nEnter a sentence with at most 50 characters.");
printf("\nEach word of the sentence must contain at most 6 letters:");//kelime sayisini duzgunce sayiyor fakat ayni kelime her kelime 6 karakterden oluscak sekilde yazilmazsa ayni kelimyide sayiyor
fflush(stdin);//enter etkisini kaybetmek icin
gets(snt);
j=0;p=0;toplam=0;
for(k=0;snt[k]!=' ';k++){}//bosluga denk gelen k degerini bulmak icin yaptim
while(snt[j]!='\0')
{ n=0;
if(snt[0]==' ')//ilk karakter bosluk ise n i artirmaz
{
n=n;
}
if(snt[j+1]==' ')//bosluklari saydirir
{
n=n+1;
}
if(snt[j]==snt[k+j+1]&&snt[j+1]==snt[k+j+2]&&snt[j+2]==snt[k+j+3]&&snt[j+3]==snt[k+j+4]&&snt[j+4]==snt[k+j+5]&&snt[j+5]==snt[k+j+6])
//eger 6 karakterli kelime girilirse aynilari bulur
{
p=p+1;
}
j++;//dongunun tamamlanmasi icin j yi 1 artirir
toplam+=n;//bosluklari her defasinda uzerine eklememsi icin toplama atadim
}
printf("\nThe number of different words: %d \n",toplam+1-p);
break;
case 4:
printf("\nEnter a sentence with at most 50 characters:");
fflush(stdin);//sifirlamak icin kullandim
gets(snt);
n=0;p=0;//!!!!eger simetrik kelimeden sonra bir karakter girilmezse saymaz!!!!
for(j=0;snt[j]!=' ';j++){}//kelimenin uzunlugunu bulmak icin
for(k=0;k<=j;k++)
{
if(snt[k]==snt[j-1-k])
{
n=n+1;
}
if(k==j){p++;}
}
printf("%d",p);
break;
case 5://sirasiyla matrix degerlerini alirim
printf("Enter the matrix[0][0] element: ");
scanf("%f",&mat[0][0]);
printf("Enter the matrix[0][1] element: ");
scanf("%f",&mat[0][1]);
printf("Enter the matrix[0][2] element: ");
scanf("%f",&mat[0][2]);
printf("Enter the matrix[1][0] element: ");
scanf("%f",&mat[1][0]);
printf("Enter the matrix[1][1] element: ");
scanf("%f",&mat[1][1]);
printf("Enter the matrix[1][2] element: ");
scanf("%f",&mat[1][2]);
printf("Enter the matrix[2][0] element: ");
scanf("%f",&mat[2][0]);
printf("Enter the matrix[2][1] element: ");
scanf("%f",&mat[2][1]);
printf("Enter the matrix[2][2] element: ");
scanf("%f",&mat[2][2]);
//burada determinant islemini yaptim
printf("\nThe determinant: %f",((mat[0][0]*mat[1][1]*mat[2][2])+(mat[1][0]*mat[2][1]*mat[0][2])+(mat[2][0]*mat[0][1]*mat[1][2]))-((mat[0][2]*mat[1][1]*mat[2][0])+(mat[1][2]*mat[2][1]*mat[0][0])+(mat[2][2]*mat[0][1]*mat[1][0])));
break;
case 6://eigenvalues degerinin sadece birini buldurdum
printf("Enter the matrix[0][0]:");
scanf("%f",&eig[0][0]);
printf("Enter the matrix[0][1]:");
scanf("%f",&eig[0][1]);
printf("Enter the matrix[1][0]:");
scanf("%f",&eig[1][0]);
printf("Enter the matrix[1][1]:");
scanf("%f",&eig[1][1]);
printf("\n");
r2=r1*r1-(r1*(eig[1][1]+eig[0][0]));
r2=(eig[0][1]*eig[1][0])-(eig[0][0]*eig[1][1]);
printf("\nr1= %f",r2);
break;
}
}
}
Çalışma kaynak kodu:
4- C Uygulama 4 ( C kodu ile girilen sayıların max min ve modunu bulan program )
Çalışma ekran görüntüsü:
Çalışma kaynak kodu :
#include
int main()
{
int a,b,c,n,j,sum;
int inp=0;
int enkucuk=2147483646;//integer tipinde en fazla bu sayi yazilabildigi icin atandi
int enbuyuk=-2147483647;//integer da en kucuk sayi bu oldugu icin atandi
a=0;
printf("enter a positive integer:");
scanf("%d",&n);
for(a=0;aenbuyuk) enbuyuk=b;
}
printf("\nmax:%d",enbuyuk);
printf("\nmin:%d",enkucuk);
sum=enbuyuk+enkucuk;
printf("\nsum:%d",sum);
printf("\nsum mod21:%d",sum%21);
printf("\n");
while(inp<=sum%21)
{
c=inp;
j=1;
printf("1 ");
while(j<=sum%21)
{
if(c==0 || c<0)
printf("0 ");//ekrana 0 yazilacak
else if(c>0)//c nin sifirdan buyuk olmasi durumunda ekrana
printf("%d ",inp);//once girilen rakam ve sonra her satir atlayarak sayinin bir fazlasi yazacak
c--;//c degerini 1 azaltir
j++;//j degerini 1 artirir
}
inp++;//inp degerini 1 artirir
printf("\n");//new line yapar
}
return 0;
}
Çalışma kaynak kodu :
3- C Uygulama 3 ( C kodu ile şekil çizme programı )
Çalışma ekran görüntüsü:
Çalışma kodu:
#include<stdio.h>
#include<conio.h>//getch komutuyla ekranda tutmak için hata vermemesi için kullandim
int main(){
int a,b,c,d,e,f,g;//degiskenleri tanimladim
char z=0;
while (z!='q'){//bu döngüyü q yani çýkýþ girilene kadar çýkmamasý için kullandým
fflush(stdin);//enter etkisini yok etmek yani program hata verdikten sonra hafýzayý sifýirlamak hatayýi bir kez verdirmek için kullandým
printf("\n\n\t##########################################################\n");//ekranda gözüken seçim seçeneklerini burada yazdým
printf("\t>>>>>> <<<<<<\n");
printf("\t>>>>>> DRAWING MATHEMATICAL SIGNALS SHAPE <<<<<<\n");
printf("\t>>>>>> <<<<<<\n");
printf("\t>>>>>> a : Draw a summation shape <<<<<<\n");
printf("\t>>>>>> b : Draw a division shape <<<<<<\n");
printf("\t>>>>>> c : Draw a multiplication shape <<<<<<\n");
printf("\t>>>>>> q : Terminate the program <<<<<<\n");
printf("\t>>>>>> <<<<<<\n");
printf("\t##########################################################\n\n");
printf("\tChoose one of them,please:\n");//burada seçilecek seçimi istedim ve aldýrdým
scanf("%c",&z);
while((z=='a')||(z=='b')||(z=='c')){//seçim bu koþullar içinde olduðu sürece devamlýlýðý saðlamak için bunun sebebi a deðiþkenine rakam yerine karakter girince döngüyü saðlamak için
if (z=='a'){//z karakteri a olunca toplama iþlemini seçtirmek için
printf("\nEnter width of the summation shape(as an odd number):\n");//burada toplamýn boyutunu istiyor ve alýyor
scanf("%d",&a);
if (0==a%2){//girilen sayý çiftse hata vermemesi için koydum tek sayý girilmezse yanlýþ çýktý vermesin diye
b=a/2;//integerýn yarýsýný alýp
f=b-1;//integerin yarýsýndan 1 çýkardýk ki aþaðýdaki for döngüsü için o kadar boþluk býraksýn diye
for (d=0;b>d;){//bu döngü de alttaki döngünün ayný integer deðeri kadar tekrarlanmasý için koydum
for(c=0;f>c;){//bu döngü sayýnýn yarýsý kadar boþluk býraktýrýr ve sonuna * koyar
printf(" ");
c=c+1;}
printf("*\n");//boþluklardan sonra yýldýzý koyup yeni satýra geçer
d=d+1;}
for(e=0;a>e;){//artý iþaretinin orta kýsmýndaki uzun iþareti girilen deðer kadar girmesini saðladým
printf("*");
++e;}
printf("\n");//artýnýn orta kýsmý tamamlanýnca yeni satýra geçip üstteki döngünün aynýsýný oluþturmasýný saðladým
for (d=1;b>d;){//bu döngü de alttaki döngünün ayný integer deðeri kadar tekrarlanmasý için koydum d nin üstte 3 for döngüsünden farklý deðil ama d=1 olmasýnýn sebebi orta kýsýmda 1 tane * kullanýlmýþ olmasý
for(c=0;f>c;){//bu döngü sayýnýn yarýsý kadar boþluk býraktýrýr ve sonuna * koyar
printf(" ");
c=c+1;}
printf("*\n");//boþluklardan sonra yýldýzý koyup yeni satýra geçer
d=d+1;}}
else {//girilen sayý tekse toplam sembolünü ona göre yaptým
e=a-1;//sayýnýn tek olmasý durumunda 1 çýkarark float olmasýný engellemek istedim geri kalan kýsým üstteki artý iþareti döngüsünün ayný daha net anlatmak için ayrý ayrý yazdým
b=e/2;
for (d=0;b>d;){
for(c=0;b>c;){
printf(" ");
c=c+1;}
printf("*\n");
d=d+1;}
for(e=0;a>e;){
printf("*");
++e;}
printf("\n");
for (d=0;b>d;){
for(c=0;b>c;){
printf(" ");
c=c+1;}
printf("*\n");
d=d+1;}}}
if (z=='b'){//burada bölme sembolünü yaptým aþaðýda geniþliðini istiyor ve ona göre yerleþtiriyor üstteki ve alttaki yýldýzlarý
printf("\nEnter width of the division shape(as an odd number):\n");
scanf("%d",&a);
printf("\n");
if(0==a%2){//sayýnýn çift girilince hata vermemesi amacýyla koydum
b=a/2;//sayý çiftse 2 ye böler ve o kadar boþluk verir ve yýldýz koyarak orta kýsýma geçer
for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
printf(" ");
++c;}
printf("*\n");
for(d=0;a>d;){//bölme iþleminin orta kýsmý yani burada girilen sayý kadar * iþareti koyuyor
printf("*");
++d;}
printf("\n");
for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
printf(" ");
++c;}
printf("*\n");}
else{//integer a tek olursa yerleþtirme iþleminde hata olmasýn diye 2. bir seçenek koydum
e=a-1;//sayý tekse 1 çýkarýr ki float olmasýn
b=e/2;
for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
printf(" ");
++c;}
printf("*\n");
for(d=0;a>d;){//bölme iþleminin orta kýsmý yani burada girilen sayý kadar * iþareti koyuyor
printf("*");
++d;}
printf("\n");
for(c=0;b>c;){//boþluk verir ve yýldýz koyarak orta kýsýma geçer
printf(" ");
++c;}
printf("*\n");}}
if (z=='c'){//burada çarpma iþlemi için a yý istiyor ve ona göre çarpma iþaretini yazýyor
printf("\nEnter width of the multiplication shape(as an odd number):\n");
scanf("%d",&a);
b=a;//a yý ve b yi ayrý ayrý kullanacaðýmdan çoðalttým da denilebilir
e=a-1;//burada orta kýsým hariç bulunan deðerin yarýsý kadar V þeklinde * iþareti koyar
e=e/2;//sayýnýn yarýsýný da burada alýyor
for(d=0;e>d;){
printf("*");//ilk baþta * koyar
b=b-2;//burada saynýn her seferinde 2 azaltarak orta kýsýma gelecek boþluk sayýsýný bulurlar
for(c=0;b>c;){//boþluk bu döngüde konulur
printf(" ");
++c;}
printf("*");// boþluk konulduktan sonra * iþareti koyarlar
++d;
printf("\n");//yeni satýra geçerler
for(f=0,g=((a-b)+1)/2;g>f;){//bu döngüde orta kýsma gelecek olan boþluk sayýsýný bulup tekse veya çiftse ona göre * iþareti koyuyor
printf(" ");
++f;}}
if (1==a%2){//çarpma iþleminin orta kýsýmýna eðer girilen deðer tekse tek yýldýz
printf("*\n");}
else{//girilen deðer çiftse orta kýsma 2 tane yýldýz koyuyor ki kayma belli olmasýn yani sayý çift girerse hatayý gizlesin diye
printf("**\n");
for(f=0,g=((a-b)+1)/2;g>f;){//orta kýsýma gelecekboþluðu tekrar koyuyor ve alttaki döngüde X in kalan kýsmý olan ters V yi çiziyor burada o orta kýsmýný yaptým
printf(" ");
++f;}
printf("**\n");}
for(d=0;e>d;){//burada üstteki iþlemi her defasýnda 2 arttýrarak tam tersini yaptým
for(f=0,g=((a-b)-1)/2;g>f;){
printf(" ");
++f;}
printf("*");//birinci kýsma ayni * karakterine kadar ki boþluk sayýsýný bulup o kadar boþluk koydum ve * ý koydum
b=b+2;
for(c=2;b>c;){//burada da * iþaretinden sonraki 2. yýldýzýn konulacaðý yere kadar olan boþluk miktarýný girdim
printf(" ");
++c;}
printf("*");//ve * iþaretini koyup
++d;
printf("\n");}}//yeni satýra geçtim
a=0;//burada iþlem yapýlýnca a yý sýfýrlayýp hafýzada kalan kýsmýný sonraki iþlemde karakter girerse hafýzada kalaný yazmasýn diye yaptým
break;}
if (z=='q'){//eðer z karakterine q deðeri girilirse çýkýþ yaparken bunu belirtmesi için koydum ve breakle de döngü dýþýna attým gerçi döngü koþulu z!='q' ama garantiye almak için
printf("\n\n\t##########################################################\n");
printf("\t<<<<< program terminates >>>>>");
printf("\n\t##########################################################\n");
break;}
if (((z!='a')&&(z!='b')&&(z!='c')&&(z!='q'))||((a==0)&&(b==0))){//bunlarýn koþullarýn dýþýnda hata vermesi için kullandým yani z nin 'a','b','c','q' olmadýðýnda ve a ya sayý harici giriþlerde iþlem yapmaz ve hata verir
printf("\t----------------------------------------------------------------\n");
printf("\t!!!<<<<< you assign wrong try again >>>>>!!!\n");
printf("\t----------------------------------------------------------------\n");}}
getch();//programýn açýk kalmasý için kullandým çýkýþtan sonra
}
3- C Uygulama 2 ( Girilen sayının artarak matrisini alan program )
Program Çıktısı :
Çalışma kodu:,
Çalışma kodu:,
#include<stdio.h>
int main()
{
int c,n,j;
char i;
i=1;
printf("enter an integer:");
scanf("%d",&n);
while(i<=n)
{
c=i;
j=1;
while(j<=n)
{
if(c==0 || c<0)
printf("0 ");//ekrana 0 yazilacak
else if(c>0)//k nin sifirdan buyuk olmasi durumunda ekrana
printf("%d ",i);//once girilen rakam ve sonra her satir atlayarak sayinin bir fazlasi yazacak
c--;//k degerini 1 azaltir
j++;//j degerini 1 artirir
}
printf("\n");//new line yapar
i++;//i degerini 1 artirir
}
return 0;
}
2- C Uygulaması 1
Çalışma kodu :
int main()
{
int i,j,k;
int n;//programýn devamýnda rakam olarak deger girilecek
char c;//inputa 2 degeri verildginde girilecek harf c dir. input giris.
char input;//bizden istedigi giris
double f=1;//faktoriyel
double z;
i=1;
while( input<'1' || input>'3')//input 1 ve 3 arasýnda olursa program devam edecek eger e girilirse program bitecek
{
printf("1: Constituting a specific structure of numbers\n");
printf("2: Constituting a specific structure of letter\n");
printf("3: Making factorial, division and summation operations\n");
printf("e: Ending the program\n");
printf("Please enter one of these numbers(1,2,3) or enter letter e to exit:\n");
scanf("%s", &input);
if(input=='e')
{
printf("*************************\n");
printf("|The program ends |\n");
printf("*************************\n");
break;//programin bitmesi icin yazildi
}
}
if(input=='1')//input 1 oldugunda rakamlarla matrise benzeyen ozel yapý olusacak
{
printf("Please enter a positive integer:");//pozitif bir rakam girilmesini istiyoruz
scanf("%d",&n);
while(i<=n)
{
k=i;//i sayisini k ya atiyoruz
j=1;//j degerine 1 atiyoruz
while(j<=n)
{
if(k==0 || k<0)//k nin sifir olmasi yada sifirden kucuk olmasi durumunda
printf("0 ");//ekrana 0 yazilacak
else if("k>0")//k nin sifirdan buyuk olmasi durumunda ekrana
printf("%d ",i);//once girilen rakam ve sonra her satir atlayarak sayinin bir fazlasi yazacak
k--;//k degerini 1 azaltir
j++;//j degerini 1 artirir
}
printf("\n");//new line yapar
i++;//i degerini 1 artirir
}
}
else if(input=='2')//input degeri 2 girilirse bizden
{
printf("Enter a character:");//harf ve
scanf("%s",&c);
printf("\nEnter an integer:");//rakam girmemizi ister
scanf("%d",&n);
//girilen harf ve rakami kullanarak özel bir yapi olusturur
while(i<=n)
{
j=1;
while(j<=n)
{
if(j==i)
putchar(c);//ekrana girilen harfi yazmayi saglar
else
printf(" ");
j++;//j degerini 1 artirir
}
c++;//c degerini 1 artirir
printf("\n");//new line yapar
i++;//i degerini 1 artirir
}
}
else if(input=='3')//input degeri 3 girilirse faktoriyel alma bolme ve toplama islemi yapilir
{
printf("Please enter a positive integer:");//pozitif bir sayi girmemizi ister
scanf("%d",&n);
while(i<=n)
{
f=1/(f*i);
i++;
}
printf("result:%f",1+f);
}
return 0;
}
1- Klavyeden Girilen Sayı Kadar Yanan Led
Merhaba arkadaşlar,
Bu ve bundan sonraki birkaç çalışmamda sadece kod paylaşımında bulunacağım. Yazılımla ilgilenmeye başladığım zamanlardan bu zamana kadar elimde arşivlediğim, bazıları ders ödevim olan, bazıları çeşitli projelerin belli kısımlarında kullandığım bu kodların sizlere çalışmalarınızda yardımcı olmasını dilerim.
Sadece bu amaç ile paylaşacağım çalışmaların başına sıra numarası ekleyeceğim.
Çalışma videosu : http://www.youtube.com/watch?v=5QbkOOdJQ0Y&feature=youtu.be
Kaynak Kodu:
Bu ve bundan sonraki birkaç çalışmamda sadece kod paylaşımında bulunacağım. Yazılımla ilgilenmeye başladığım zamanlardan bu zamana kadar elimde arşivlediğim, bazıları ders ödevim olan, bazıları çeşitli projelerin belli kısımlarında kullandığım bu kodların sizlere çalışmalarınızda yardımcı olmasını dilerim.
Sadece bu amaç ile paylaşacağım çalışmaların başına sıra numarası ekleyeceğim.
Çalışma videosu : http://www.youtube.com/watch?v=5QbkOOdJQ0Y&feature=youtu.be
Kaynak Kodu:
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop (){
if (Serial.available()) { // seri porttan değer girilip girilmediğini anlamak için yazdık
// eğer değer girilirse bu değer alttaki kod ile okunup ser isimli int
int deger = Serial.read();
if(deger >= 48 && deger <= 57) { // girileecek sayi eğer rakam ise if blogu çalışır.
//0-9 arasindaki sayiların ascii karşılıkları 48-57 arasıdır
int flash = deger - 48;
Serial.print("Flash sayisi ");
Serial.println(flash,DEC);
TooglePin(13,flash); //toogle devresi diye isimlendirilen devreden aldım fonksiyon ismini
//bu fonksiyon pinin bir öncekini durumunun zıttını yapmaktadır.
//Yani pin high (lojik1) ise low (lojik 0) yapar
}
}
}
void TooglePin(int pin,int n){
for (int i = 0; i < n; i++) {
digitalWrite(pin, HIGH);
delay(500);
digitalWrite(pin, LOW);
delay(500);
}
}
27 Kasım 2014 Perşembe
Arduino ile Telefon Yapma ( GSM GPRS Shield Arduino )
Bu çalışmamızda GSM GSPRS shieldın arduino ile nasıl kullanılacağını, bağlantıların nasıl yapılacağını ve kodun nasıl yazılacağını inceleyeceğiz. GSM GPRS shieldlar AT komutları ile çalışmaktadır. Haberleşme modüllerine göre farklı AT komutları ile farklı işlemler yapılabilir.
Bu çalışmada SIM900 GSM GPRS shieldı kullanılmıştır.SIM 900 haberleşme modülünü kullanan bu sheild sayesinde bir telefonun yaptığı temel görevler yerine getirilebilmektedir. Örneğin arduino ile bir numara aranabilmekte, mesaj atılabilmekte ve internete girilebilmektedir.
GSM GPRS shield ile arduino bağlantısı oldukça basittir. Shield üzerindeki Tx, Rx pinleri sırasıyla arduinonun Rx, Tx pinlerine bağlanır. Haberleşme bu şekilde sağlanmış olur. Ancak birçok GSM GPRS shield 5V üzeri gerilimle ve 200mA - 1.5 A arası çalışma akımı ile çalışabilmektedir. Bu yüzden harici bir kaynaktann beslenmelidir. Bu kaynak ile arduino da aynı zamanda beslenebilir. Ancak arduinonun ve sheildın aynı kaynakla beslenmediği durumlarda groundlar birleştirilir.
Arduino GSM GPRS baglantısı
GSM GPRS Shield Arduino
RX TX
TX RX
GROUND GROUND
Çalışma videosunu buradan izleyebilirsiniz: http://www.youtube.com/watch?v=BfiY58e4OQM&feature=youtu.be
Arduino ile bir telefonun aranması ;
#include <SoftwareSerial.h>
SoftwareSerial Sim900Serial(2, 3); // sim900 gprs shield
//rx-tx sırasıyla 2 ve 3 e takılır
void setup()
{
Sim900Serial.begin(115200); // GPRS baud rate
delay(2000);
Sim900Serial.println("AT+IPR=19200"); // bu değer tüm gprs
//shieldlarında aynı değildir manuellerden bakılmalıdır
delay(500);
Sim900Serial.begin(19200); // bu değer tüm gprs
//shieldlarında aynı değildir manuellerden bakılmalıdır
delay(1000);
}
void loop()
{
Sim900Serial.println("ATD05425420000;"); // aranmasını istediğiniz
//numara girlir. ATD komutu sim900'ün AT komut manueli incelendiğinde
//arama için kullanıldığı görülür
//Örnek: Sim900Serial.println("ATD05425420000;"); vodafone müşteri
//hizmetlerinin numarası
while(1);
}
Arduino ile bir telefona mesaj atılması ;
#include <SoftwareSerial.h>
SoftwareSerial Sim900Serial(2, 3);
void setup()
{
Sim900Serial.begin(115200); // GPRS baud rate
delay(500);
Sim900Serial.println("AT+IPR=19200");
delay(500);
Sim900Serial.begin(19200); // GPRS baud rate , Tüm shieldlarda aynı değildir
delay(1000);
Serial.begin(9600); // bilgisayar seri port baud rate
Serial.println("SMS gondermek icin g tusuna basiniz: ");
}
void loop()
{
if (Serial.available())
switch(Serial.read())
{
case 'g':
SendTextMessage();
break;
}
if (Sim900Serial.available())
Serial.write(Sim900Serial.read());
}
void SendTextMessage()
{
Sim900Serial.print("AT+CMGF=1\r"); //SMS text halde gönderilir. Bu komutun ne iş yaptığı sim900 AT komut manuelinden bakılır
delay(100);
Sim900Serial.println("AT + CMGS = \"05425420000\"");//mesajın gönderileceği numara
delay(100);
Sim900Serial.println("golmuhendis.blogspot.com.tr");//gönderilecek mesaj
delay(100);
Sim900Serial.println((char)26);
delay(100);
Sim900Serial.println();
}
Kaydol:
Yorumlar (Atom)










