#include <stdio.h>
#include <stdlib.h>
int main(){
int number, digits, checksum;
printf("Print '0' to exit!!!\n\n");
while (1){
digits = 0;
checksum = 0;
printf("Enter the number : ");
scanf("%d", &number);
if (number == 0){
digits = 1;
printf("Number of digits : %d \n", digits);
printf("Sum of digits : %d \n", checksum);
system("pause");
return 0;
}
else{
number = abs(number);
while (number > 0){
checksum = checksum + (number % 10);
number = number / 10;
digits++;
}
printf("Number of digits : %d \n", digits);
printf("Sum of digits : %d \n", checksum);
}
}
}
30 Aralık 2015 Çarşamba
C'DE KOMBİNASYON HESAPLAMA
#include <stdio.h>
int factorial(int number){
if (number < 2){
return 1;
}
return number * factorial(number - 1);
}
int main()
{
int n, r, result;
printf("Print any negative number to exit!!!\n\n");
while (1){
printf("Enter N : ");
scanf("%d", &n);
if (n < 0){
break;
}
printf("Enter R : ");
scanf("%d", &r);
if(r < 0){
break;
}
else if(n < r){
printf("N can't less than R ! Enter new and correct numbers : \n");
}
else{
result = factorial(n) / (factorial(r) * factorial(n - r));
printf("C(%d,%d) = %d\n", n, r, result);
}
}
}
int factorial(int number){
if (number < 2){
return 1;
}
return number * factorial(number - 1);
}
int main()
{
int n, r, result;
printf("Print any negative number to exit!!!\n\n");
while (1){
printf("Enter N : ");
scanf("%d", &n);
if (n < 0){
break;
}
printf("Enter R : ");
scanf("%d", &r);
if(r < 0){
break;
}
else if(n < r){
printf("N can't less than R ! Enter new and correct numbers : \n");
}
else{
result = factorial(n) / (factorial(r) * factorial(n - r));
printf("C(%d,%d) = %d\n", n, r, result);
}
}
}
C'DE PERMÜTASYON HESAPLAMA
#include <stdio.h>
int factorial(int number){
if (number < 2){
return 1;
}
return number * factorial(number - 1);
}
int main()
{
int n, r, result;
printf("Print any negative number to exit!!!\n\n");
while (1){
printf("Enter N : ");
scanf("%d", &n);
if (n < 0){
break;
}
printf("Enter R : ");
scanf("%d", &r);
if(r < 0){
break;
}
else if(n < r){
printf("N can't less than R ! Enter new and correct numbers : \n");
}
else{
result = factorial(x) / factorial(x - y);
printf("P(%d,%d) = %d\n", x, y, result);
}
}
}
int factorial(int number){
if (number < 2){
return 1;
}
return number * factorial(number - 1);
}
int main()
{
int n, r, result;
printf("Print any negative number to exit!!!\n\n");
while (1){
printf("Enter N : ");
scanf("%d", &n);
if (n < 0){
break;
}
printf("Enter R : ");
scanf("%d", &r);
if(r < 0){
break;
}
else if(n < r){
printf("N can't less than R ! Enter new and correct numbers : \n");
}
else{
result = factorial(x) / factorial(x - y);
printf("P(%d,%d) = %d\n", x, y, result);
}
}
}
26 Aralık 2015 Cumartesi
PROC DOSYASIYLA METNİ TERS ÇEVİRME
PROC DOSYASIYLA METNİ TERS ÇEVİRME
reverseString.c Kodları
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/slab.h>
static char *string;
static char *reversedString=NULL;
static int i,j;
static int temp=0;
module_param(string, charp, 0000);
static void reverser(char *string)
{
for(i = 0; string[i] != '\0'; i++);
{
temp = i-1;
j = i-1;
}
reversedString = kmalloc((temp + 1) * sizeof (char), GFP_KERNEL);
for(i = 0; i <= temp; i++)
{
reversedString[i] = string[j];
j--;
}
}
static int show(struct seq_file *m, void *v){
seq_printf(m, "Bu proc dosyasi ile metni ters cevirebilirsiniz\n");
return 0;
}
static int proc_open(struct inode *inode, struct file *file){
return single_open(file, show, NULL);
}
static const struct file_operations proc_fops = {
.owner = THIS_MODULE,
.open = proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
int init_module(void){
printk(KERN_INFO "Proc dosyasi yuklendi.\n");
printk(KERN_INFO "Orjinal metin : %s\n",string);
reverser(string);
printk(KERN_INFO "Ters cevrilmis metin : %s\n",reversedString);
proc_create("reverseString", 0, NULL, &proc_fops);
return 0;
}
void cleanup_module(void){
remove_proc_entry("reverseString", NULL);
printk(KERN_WARNING "Proc dosyasi silindi.\n");
}
MODULE_LICENSE("GPL");
Makefile Kodları
obj-m += reverseString.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
24 Aralık 2015 Perşembe
N. FIBONACCI SAYISINI PROC YARDIMIYLA HESAPLAMA
N. FIBONACCI SAYISINI PROC YARDIMIYLA HESAPLAMA
EXPORT_SYMBOL()
fonksiyonu, içindeki fonksiyonu diğer modullerin
kullanabilmesi için ihraç eder.
seq_printf()
fonksiyonu, “cat” komutu çalıştırıldığında bize “proc”
dosyası içindeki bilgiyi verir.
single_open()
fonksiyonu, “proc” dosyasını açar.
static
const struct file_operations proc_fops = {
.owner
= THIS_MODULE,
.open
= proc_open,
.read
= seq_read,
.llseek
= seq_lseek,
.release
= single_release,
};
,“Proc” dosyası için dosya işlemlerinde kullanılacak
fonksiyonları yeniden düzenleme/isimlendirme kısmı.
proc_create()
fonksiyonu, “proc” dosyası oluşturur.
remove_proc_entry()
fonksiyonu, “proc” dosyasını siler.
static
int a
değişkeni, modülün kernele yüklenmesi sırasında terminalden
verdiğimiz parametreyi tutar.
module_param()
fonksiyonu, modülün a tamsayısı için gerekli olan parametreleri
alır.
extern
int ...(...)
ihraç(export) edilen fonksiyonu kullanmamızı sağlar.
module02
üzerinden alınan “a” değişkeni “extern int” yardımıyla
module01 üzerindeki fonksiyonla işlenip, module02’deki “printk”
fonksiyonu ile “kernel”e bilgi amaçlı (KERN_INFO)
yazdırılmıştır.
Kod
yazımı bittikten sonra Makefile dosyasının içine derlenmesi
istenilen dosyalar eklenir.
Yukarıdaki
resimde 9. indisli Fibonacci sayısının çıktısı log dosyasından
görüntülenmiştir.Ardından ise 10. indisli Fibonacci sayisi doğru
bir şekilde görüntülenmiştir.
Ardından
kerneldan bu modulleri silmek için sırasıyla rmmod
module01
ve rmmod
module02
yazılır.
NOT:
Fibonacci sayilarinin 0. indisli değeri 0 kabul edilmiştir.
module01.c Kodları
#include<linux/module.h>
#include<linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
static int fibonacci(int n){
if ( n == 0 )
return 0;
else if ( n == 1 )
return 1;
else
return ( fibonacci(n-1) + fibonacci(n-2) );
}
EXPORT_SYMBOL(fibonacci);
static int show(struct seq_file *m, void *v){
seq_printf(m, "Hello proc!\n");
return 0;
}
static int proc_open(struct inode *inode, struct file *file){
return single_open(file, show, NULL);
}
static const struct file_operations hello_proc_fops = {
.owner = THIS_MODULE,
.open = proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
int init_module(void){
proc_create("modul-02-proc", 0, NULL, &hello_proc_fops);
return 0;
}
void cleanup_module(void){
remove_proc_entry("modul-02-proc", NULL);
printk(KERN_WARNING "proc entry removed");
}
module02.c Kodları
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include<linux/kernel.h>
static int a;
module_param(a, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
extern int fibonacci(int);
int init_module(void)
{
printk(KERN_INFO "%d",fibonacci(a));
return 0;
}
void cleanup_module(void){
printk(KERN_WARNING "Goodbye cruel world");
}
Makefile Kodları
obj-m += module01.o
obj-m += module02.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
module01.c Kodları
#include<linux/module.h>
#include<linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
static int fibonacci(int n){
if ( n == 0 )
return 0;
else if ( n == 1 )
return 1;
else
return ( fibonacci(n-1) + fibonacci(n-2) );
}
EXPORT_SYMBOL(fibonacci);
static int show(struct seq_file *m, void *v){
seq_printf(m, "Hello proc!\n");
return 0;
}
static int proc_open(struct inode *inode, struct file *file){
return single_open(file, show, NULL);
}
static const struct file_operations hello_proc_fops = {
.owner = THIS_MODULE,
.open = proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
int init_module(void){
proc_create("modul-02-proc", 0, NULL, &hello_proc_fops);
return 0;
}
void cleanup_module(void){
remove_proc_entry("modul-02-proc", NULL);
printk(KERN_WARNING "proc entry removed");
}
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include<linux/kernel.h>
static int a;
module_param(a, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
extern int fibonacci(int);
int init_module(void)
{
printk(KERN_INFO "%d",fibonacci(a));
return 0;
}
void cleanup_module(void){
printk(KERN_WARNING "Goodbye cruel world");
}
obj-m += module01.o
obj-m += module02.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Etiketler:
export symbol,
fibonacci,
linux,
module,
proc
18 Aralık 2015 Cuma
ARDUINO İLE AKILLI EV SİSTEMLERİ PROTOTİPİ
Şekil 1 – Verici (Transmitter) ve Alıcı (Receiver) Devrelerinin
Fritzing Şeması
Şekil 2.1 – Verici (Transmitter) Devresi
Şekil 2.2 – Alıcı (Receiver) Devresi
Şekil 3.1 - Kart Okutulmadan Önceki Hali
Şekil 3.2 - Kart İlk Kez Okutulduktan Sonraki Hali
Şekil 3.3 - Kart İkinci Kez Okutulduktan Sonraki Hali
Proje Amacı :
Yapılan bu projede amaç bir akıllı ev sistemi prototipi
yapmak. Şöyle ki; eve giren kişilerin üzerinde taşıdığı kart aracılığıyla RFID
tarafından tanınan kişiler, eve girdiğinde evdeki elektronik cihazlar çalışacak.
Evde kalan olmadığında bu sistem; evde çalışması gereksiz olan elektronik
cihazları otomatik olarak kapatarak, tasarruf sağlayacak. Biz, bu projede
elektronik parça maliyetinden dolayı LED lamba yaktık. LED lamba yerine
amaçlara veya ihtiyaçlara yönelik araçlar da kullanılabilir,
kişiselleştirilebilir. Örneğin; kişi eve geldiğinde lambaların açılmasının yanı
sıra kahve makinesinin ona kahve hazırlamasını, evin sıcaklığının
arttırılmasını, kombinin çalışmasını isteyebilir. Bu da daha çok cihazın birbiriyle
haberleşmesini sağlamak ile olacaktır.
Akıllı ev
sistemlerinin çok basit bir prototipini oluşturduk :
Yakılan LED lamba aslında kapıdan giren
kişinin evinde olması gereken şeyleri simgeliyor. Kartın okunmasıyla lambanın
yanması sistemlerin açılması, kartın tekrar okunmasıyla lambanın sönmesi
sistemlerin kapanmasını simgeliyor. Eve girerken cihazların çalıştırılmasına,
çıkarken de kapatılmasına benzetebiliriz. Kart okuma sistemi ile
otomatikleştirilen işler ile zamandan tasarruf edilebilir. Ayrıca kartların
unique(eşsiz) seri numaralarına göre yetkilendirme yapılabilir ve bununla
beraber kartların çalıştıracağı sistemler ayarlanabilir. Kablosuz iletişim
modülleri ile de veri akışı sağlanıp, gerektiği yerde tercihe bağlı olarak
telefonunuza uyarı mesajları gönderilebilir. Daha çok birbiriyle konuşan cihaz
eklenerek istenilen akıllı ev sistemi oluşturulabilir.
Bu projede kullandığımız cihazlar ve araçlar :
- [2] Arduino UNO R3
- [2] NRF24L01
- [1] MFRC522
- [1] LED Lamba
- [1] 230K Ohm Direnç
- [2] Breadbord
Verici (Transmitter) Devresinin
Arduino Kodları
#include <SPI.h> //Serial Peripheral Interface (SPI) Master/Slave //ilişkisi için kullanılan kütüphane
#include <nRF24L01.h> //NRF24L01, RF modeli için kullanılan kütüphane
#include <RF24.h> //RF modülleri için kullanılan kütüphane
#include <RF24_config.h> //RF modülleri için kullanılan ayar kütüphanesi
#include <MFRC522.h> //RFID modülü için kullanılan kütüphane
#define RST_PIN 9 //RST_PIN tanımlaması
#define SS_PIN 10 //SS_PIN tanımlaması
String theMessage; //Mesajın tutulacağı değişkenin tanımlanması
byte readCard[16]; //Kartın seri numarasını tutacak dizi
int successRead; //Kartın okunması durumu
int msg[1]; //Sonlandırma bilgisi için kullanacağımız dizi
RF24 radio(3,5); //RF24 objesi “radio”nun tanımlanması //RFID pinlerimizle çakıştığı için (SPI pinleri //[3-5])
MFRC522 mfrc522(SS_PIN, RST_PIN); //MFRC522 objesi “mfrc522”nin tanımlanması //(SPI pinleri [RST_PIN(9) - SS_PIN(10)])
MFRC522::MIFARE_Key key;
const uint64_t pipe = 0xE8E8F0F0E1LL; //NRF modülleri arasında iletişimin sağlanacağı //kanalın tanımlanması
void setup(void){
Serial.begin(9600); //Seri Haberleşmenin 9600 frekans ile başlatılması //saniyede 9600 bit gönderilir
SPI.begin(); //SPI’nın aktif hale getirilmesi
mfrc522.PCD_Init(); //Kartları başlatma
Serial.println("RFID KART KAYIT UYGULAMASI"); //Ekrana verilen mesajlar
Serial.println("--------------------------");
Serial.println("Lutfen 1 numarali karti okutun");
Serial.println();
radio.begin(); //NRF’nin aktif hale getirilmesi
radio.openWritingPipe(pipe); //Göndericinin kanala ayarlanması
}
void loop(void){
do{
successRead = getID(); //Okuma başarılı olana kadar getID fonksiyonunun //çağırılması
}while (!successRead);
theMessage = *readCard; //Kartın seri numarasının değişkene atanması
int messageSize = theMessage.length(); //Mesaj uzunluğunun alınması
for (int i = 0; i < messageSize; i++) { //Mesaj gönderme döngüsü :
int charToSend[1]; //Gönderilecek karakterler için dizi tanımlanması
charToSend[0] = theMessage.charAt(i); //Mesajdaki karakterlerin alınması
radio.write(charToSend,1); //Karakterlerin gönderilmesi
}
msg[0] = 2; //Sonlandırma değişkeninin verilmesi
radio.write(msg,1); //Değişkenin gönderilmesi
successRead=false; //Kart okuma durumunun kaydedilmesi
}
int getID(){
if (!mfrc522.PICC_IsNewCardPresent()){ //Yeni bir kart okunmadıysa :
return 0;
}
if (!mfrc522.PICC_ReadCardSerial()){
return 0;
}
Serial.print("Kart UID'si: "); //Kartın seri numarasının alınma döngüsü :
for (int i = 0; i < mfrc522.uid.size; i++){
readCard[i] = mfrc522.uid.uidByte[i]; //Kartın seri numarasının BYTE – BYTE //okunup,atanması
Serial.print(readCard[i], HEX); //Kartın seri numarasının HEXADECIMAL //olarak ekrana verilmesi
}
Serial.println("");
mfrc522.PICC_HaltA(); //Kart okumanın durdurulması
return 1; //Sonucun döndürülmesi
}
Alıcı (Receiver) Devresinin
Arduino Kodları
#include <SPI.h> //Serial Peripheral Interface (SPI) Master/Slave // ilişkisi için kullanılan kütüphane
#include <nRF24L01.h> //NRF24L01, RF modeli için kullanılan kütüphane
#include <RF24.h> //RF modülleri için kullanılan kütüphane
int msg[1]; //Sonlandırma bilgisi için kullanacağımız dizi
RF24 radio(9,10); //RF24 objesi “radio”nun tanımlanması //(SPI pinleri [9-10])
const uint64_t pipe = 0xE8E8F0F0E1LL; //NRF modülleri arasında iletişimin sağlanacağı //kanalın tanımlanması
String theMessage = ""; //Mesajın tutulacağı değişkenin tanımlanması
byte readCard[16]; //Kartın seri numarasını tutacak dizi
bool yaniyor=false; //LED’in yanma durumu için bayrak //tanımlanması
void setup(void){
Serial.begin(9600); //Seri Haberleşmenin 9600 frekans ile başlatılması //saniyede 9600 bit gönderilir
radio.begin(); //NRF’nin aktif hale getirilmesi
radio.openReadingPipe(1,pipe); //Alıcının kanala ayarlanması
radio.startListening(); //Diğer cihazın dinlenmesi
pinMode(LED1, OUTPUT); //LED için sinyal gönderilmesi
}
void loop(void){
if (radio.available()){ //Veri gönderilmeye hazırsa :
bool done=false;
while (!done){
done = radio.read(msg, 1); //Verinin okunması
char theChar = msg[0]; //Gönderilen karakterlerin değişkende //tutulması
if (msg[0] != 2){ //Sonlandırma değişkeni gelmemişse :
theMessage += theChar; //Gönderilen karakterlerin string değişkenine eklenmesi
}
else {
Serial.println(theMessage); //Gelen mesajın ekrana verilmesi
theMessage=""; //Mesajın sıfırlanması
if(!yaniyor){ //LED yanmıyorsa :
digitalWrite(3,HIGH); //LED’e elektrik verilmesi
yaniyor=true; //LED’in durumunun kaydedilmesi
}
else{ //LED yanıyorsa :
yaniyor=false; //LED’in durumunun kaydedilmesi
digitalWrite(3,LOW); //LED’in söndürülmesi
}
Serial.println(msg[0]); //Diğer NRF modülünden gelen //bitirme karakterinin ekrana //verilmesi
}
}
}
}
31 Ekim 2015 Cumartesi
C'DE FAKTÖRİYEL HESAPLAMA
#include <stdio.h>
int factorial(int number){
if (number<2){
return 1;
}
return number * factorial(number-1);
}
int main(){
int n,result;
printf("Print any negative number to exit!!!\n\n");
while(1){
printf("Enter N : ");
scanf("%d",&n);
if(n<0){
break;
}
result = factorial(n);
printf("%d!=%d\n", n, result);
}
}
int bir değişkenin değeri en fazla "2.147.483.647" olabilir (0 → 2.147.483.647 # 2.147.483.648 sayı).
13! = 6.227.020.800, değeri bizim maksimum int değerimizi aştığı için 13! ve sonrası için bilgisayar bu değerlerin 2.147.483.648 sayısına göre modunu verecektir.
Büyük sayılarla işiniz varsa double, int64 vs. kullanabilirsiniz.
int factorial(int number){
if (number<2){
return 1;
}
return number * factorial(number-1);
}
int main(){
int n,result;
printf("Print any negative number to exit!!!\n\n");
while(1){
printf("Enter N : ");
scanf("%d",&n);
if(n<0){
break;
}
result = factorial(n);
printf("%d!=%d\n", n, result);
}
}
int bir değişkenin değeri en fazla "2.147.483.647" olabilir (0 → 2.147.483.647 # 2.147.483.648 sayı).
13! = 6.227.020.800, değeri bizim maksimum int değerimizi aştığı için 13! ve sonrası için bilgisayar bu değerlerin 2.147.483.648 sayısına göre modunu verecektir.
Büyük sayılarla işiniz varsa double, int64 vs. kullanabilirsiniz.
Kaydol:
Yorumlar (Atom)














