PIC'de ROM yeterli değil

Başlatan musti463, 04 Ekim 2013, 01:19:52

mufitsozen

Sayin @musti463

daha once bu konu basliginda yazdiklariniz ve son olarak eklediginiz kod ornegine kisa bir goz atarak bir kac onerim olacak.


  • Programiniz biraz acele ile yazilmis ve birazda acemi bir programcinin stiline sahip. Programinizi yazmadan once tasarim asamasi icin pek vakit ayirmadiginiz gibi bir intibaya kapildim.

    Ornegin if ..... diye baslayip else if diye devam eden bloklar bir tablo arayiciligi ile cok daha az kod ureterek yapilabilir. Belkide bu tablolari isleyen kodlar bir altyordam haline getirebilir ve kod bloklarinin tekrarlanmasida onlenerek daha fazla yer kazanilabilir.
  • floatin point hesaplamalariniz aslinda iyice planlanarak fixed-point'e cevrilebilir, buda sadece integer islemler yapildigi icin hem hizli hemde daha az kod ureterek yapilabilir. Tabiiki yuvarlama hatalari goz onunde tutulmasi lazim.

Bu onerilerime ek baskalarida yapilabilir ama, benim ongorum, bu iki onerimi uygularsaniz probleminizin %80'i halledilebilir.

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

musti463

Alıntı yapılan: mufitsozen - 04 Ekim 2013, 13:57:51
Sayin @musti463

daha once bu konu basliginda yazdiklariniz ve son olarak eklediginiz kod ornegine kisa bir goz atarak bir kac onerim olacak.


  • Programiniz biraz acele ile yazilmis ve birazda acemi bir programcinin stiline sahip. Programinizi yazmadan once tasarim asamasi icin pek vakit ayirmadiginiz gibi bir intibaya kapildim.

    Ornegin if ..... diye baslayip else if diye devam eden bloklar bir tablo arayiciligi ile cok daha az kod ureterek yapilabilir. Belkide bu tablolari isleyen kodlar bir altyordam haline getirebilir ve kod bloklarinin tekrarlanmasida onlenerek daha fazla yer kazanilabilir.
  • floatin point hesaplamalariniz aslinda iyice planlanarak fixed-point'e cevrilebilir, buda sadece integer islemler yapildigi icin hem hizli hemde daha az kod ureterek yapilabilir. Tabiiki yuvarlama hatalari goz onunde tutulmasi lazim.

Bu onerilerime ek baskalarida yapilabilir ama, benim ongorum, bu iki onerimi uygularsaniz probleminizin %80'i halledilebilir.

Evet hocam acemi olduğum konusunda haklısınız ilk defa bu kadar karmaşık bir program yazıyorum.Önerileriniz ile ilgili kısa kod örnekleri verebilirmisiniz hocam konuyu daha iyi anlamam açısından
Mustafa Emir SADE

yldzelektronik

Ben bir şeyi merak ediyorum.Neden aynı değere sahip birden çok değişken var?

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

musti463

Alıntı yapılan: yldzelektronik - 04 Ekim 2013, 14:06:49
Ben bir şeyi merak ediyorum.Neden aynı değere sahip birden çok değişken var?

hangisi mesela hocam
Mustafa Emir SADE

yldzelektronik

   uzunluk_islem=uzunluk_voltaj*5.87+10.8;//////////formüllerde kullanılacak
   uzunluk_gosterge=uzunluk_voltaj*5.87+10.8;//////////grafik ekranda kullanılacak

bunlar ilk bakışta göze çarpanlar.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

musti463

Alıntı yapılan: yldzelektronik - 04 Ekim 2013, 14:10:30
   uzunluk_islem=uzunluk_voltaj*5.87+10.8;//////////formüllerde kullanılacak
   uzunluk_gosterge=uzunluk_voltaj*5.87+10.8;//////////grafik ekranda kullanılacak

bunlar ilk bakışta göze çarpanlar.

hocam uzunluk_gosterge de daha sonra yuvarlatma işlemleri yapılıyor(xx.x hane şeklinde) o yüzden hata mevcut.uzunluk_islem verisinide matematiksel işlemlerde kullanıyorum
Mustafa Emir SADE

mufitsozen

Alıntı yapılan: musti463 - 04 Ekim 2013, 14:02:47
Evet hocam acemi olduğum konusunda haklısınız ilk defa bu kadar karmaşık bir program yazıyorum.Önerileriniz ile ilgili kısa kod örnekleri verebilirmisiniz hocam konuyu daha iyi anlamam açısından

maalesef ofisten cikmam lazim sali gununden oncede bu konuda bir ornek hazirlamaya vaktim yok. ozur  :(
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

musti463

Alıntı yapılan: mufitsozen - 04 Ekim 2013, 14:16:11
maalesef ofisten cikmam lazim sali gununden oncede bu konuda bir ornek hazirlamaya vaktim yok. ozur  :(

estağfirullah hocam önemli değil.salıdan sonra hatırlatabilirmiyim :)
Mustafa Emir SADE

DumrulBey

Bana e-posta ile ulaştığın için cevap veriyorum. Gerçi arkadaşlar fazlasıyla yardımcı olmaya çalışmışlar. Sonuçta bu karşılıklı bir şey ve adım adım gidilirse kodu optimize etmemiz elbette mümkün...

Pekala, isterseniz önce balık tutmayı gösterelim. Hem bu sayede, kodun devamını yazdığın sırada yine aynı durumlara düşmemiş olursun. Bize biraz bilgi verebilir misin? Programramlama bilgin ne düzeyde? İşlevsel (functional) programlama yapabiliyor musun? Yapısal öğeleri (struct, union) gibi şeyleri kullanabiliyor musun? Hatta const, enum, static üyeler arasındaki farkı biliyor musun?

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

Erol YILMAZ

#24
musti463 bana da özel mesaj attığın için özellikle cevap vereyim,

CCS nin en güzel yanı güzel bir LST dosya oluşturması,
Diğer derleyiciler de oluşturuyor ama CCS ninki gibi güzel değil...

Gönderdiğin kodu resim ve glcd ile ilgili satırları iptal edip derledim.

....................          else if (aci_islem <76) { t2 = 11- (11-12.3)*( (aci_islem - 75)/(76-75));} 
09B72:  BRA    9D6A
09B74:  MOVFF  C9,11D
09B78:  MOVFF  C8,11C
09B7C:  MOVFF  C7,11B
09B80:  MOVFF  C6,11A
09B84:  MOVLB  1
09B86:  CLRF   x21
09B88:  CLRF   x20
09B8A:  MOVLW  18
09B8C:  MOVWF  x1F
09B8E:  MOVLW  85
09B90:  MOVWF  x1E
09B92:  MOVLB  0
09B94:  CALL   0130
09B98:  BNC   9C52
09B9A:  BSF    FD8.1
09B9C:  MOVFF  C9,121
09BA0:  MOVFF  C8,120
09BA4:  MOVFF  C7,11F
09BA8:  MOVFF  C6,11E
09BAC:  MOVLB  1
09BAE:  CLRF   x25
09BB0:  CLRF   x24
09BB2:  MOVLW  16
09BB4:  MOVWF  x23
09BB6:  MOVLW  85
09BB8:  MOVWF  x22
09BBA:  MOVLB  0
09BBC:  CALL   01AA
09BC0:  MOVFF  00,106
09BC4:  MOVFF  01,107
09BC8:  MOVFF  02,108
09BCC:  MOVFF  03,109
09BD0:  MOVFF  03,111
09BD4:  MOVFF  02,110
09BD8:  MOVFF  01,10F
09BDC:  MOVFF  00,10E
09BE0:  MOVLB  1
09BE2:  CLRF   x15
09BE4:  CLRF   x14
09BE6:  CLRF   x13
09BE8:  MOVLW  7F
09BEA:  MOVWF  x12
09BEC:  MOVLB  0
09BEE:  CALL   07C0
09BF2:  MOVLW  68
09BF4:  MOVLB  1
09BF6:  MOVWF  x1D
09BF8:  MOVLW  66
09BFA:  MOVWF  x1C
09BFC:  MOVLW  A6
09BFE:  MOVWF  x1B
09C00:  MOVLW  7F
09C02:  MOVWF  x1A
09C04:  MOVFF  03,121
09C08:  MOVFF  02,120
09C0C:  MOVFF  01,11F
09C10:  MOVFF  00,11E
09C14:  MOVLB  0
09C16:  CALL   003A
09C1A:  BSF    FD8.1
09C1C:  MOVLB  1
09C1E:  CLRF   x21
09C20:  CLRF   x20
09C22:  MOVLW  30
09C24:  MOVWF  x1F
09C26:  MOVLW  82
09C28:  MOVWF  x1E
09C2A:  MOVFF  03,125
09C2E:  MOVFF  02,124
09C32:  MOVFF  01,123
09C36:  MOVFF  00,122
09C3A:  MOVLB  0
09C3C:  CALL   01AA
09C40:  MOVFF  03,101
09C44:  MOVFF  02,100
09C48:  MOVFF  01,FF
09C4C:  MOVFF  00,FE


0xDA = 218

sadece sabitleri hesaplayarak sadeleştirdim.
....................          else if (aci_islem <76) { t2 = 12.3*( aci_islem - 75);} 
09C50:  BRA    9DF0
09C52:  MOVFF  C9,11D
09C56:  MOVFF  C8,11C
09C5A:  MOVFF  C7,11B
09C5E:  MOVFF  C6,11A
09C62:  MOVLB  1
09C64:  CLRF   x21
09C66:  CLRF   x20
09C68:  MOVLW  18
09C6A:  MOVWF  x1F
09C6C:  MOVLW  85
09C6E:  MOVWF  x1E
09C70:  MOVLB  0
09C72:  CALL   0130
09C76:  BNC   9CD8
09C78:  BSF    FD8.1
09C7A:  MOVFF  C9,121
09C7E:  MOVFF  C8,120
09C82:  MOVFF  C7,11F
09C86:  MOVFF  C6,11E
09C8A:  MOVLB  1
09C8C:  CLRF   x25
09C8E:  CLRF   x24
09C90:  MOVLW  16
09C92:  MOVWF  x23
09C94:  MOVLW  85
09C96:  MOVWF  x22
09C98:  MOVLB  0
09C9A:  CALL   01AA
09C9E:  MOVLW  CD
09CA0:  MOVLB  1
09CA2:  MOVWF  x1D
09CA4:  MOVLW  CC
09CA6:  MOVWF  x1C
09CA8:  MOVLW  44
09CAA:  MOVWF  x1B
09CAC:  MOVLW  82
09CAE:  MOVWF  x1A
09CB0:  MOVFF  03,121
09CB4:  MOVFF  02,120
09CB8:  MOVFF  01,11F
09CBC:  MOVFF  00,11E
09CC0:  MOVLB  0
09CC2:  CALL   003A
09CC6:  MOVFF  03,101
09CCA:  MOVFF  02,100
09CCE:  MOVFF  01,FF
09CD2:  MOVFF  00,FE


0x82 = 130

yanlış anlama ama senin kod öyle böyle değil "çok acımasızca" yazılmış :)
sadece bu düzeltme ile %40 rom tasarrufu sağlarsın, işini görür ama daha iyisi, biraz optimizasyon yapmayı öğrenmek.

musti463

#25
Alıntı yapılan: DumrulBey - 04 Ekim 2013, 19:40:30
Bana e-posta ile ulaştığın için cevap veriyorum. Gerçi arkadaşlar fazlasıyla yardımcı olmaya çalışmışlar. Sonuçta bu karşılıklı bir şey ve adım adım gidilirse kodu optimize etmemiz elbette mümkün...

Pekala, isterseniz önce balık tutmayı gösterelim. Hem bu sayede, kodun devamını yazdığın sırada yine aynı durumlara düşmemiş olursun. Bize biraz bilgi verebilir misin? Programramlama bilgin ne düzeyde? İşlevsel (functional) programlama yapabiliyor musun? Yapısal öğeleri (struct, union) gibi şeyleri kullanabiliyor musun? Hatta const, enum, static üyeler arasındaki farkı biliyor musun?

Başarılar...

hayır hocam dedikleriniz hiçbirini bilmiyorum(const hariç).sorunlar karşıma çıktıkça, sorunumu çözen yöntemi öğrenerek yola devam etmeye çalışıyorum. daha önce böyle bir sorunla karşılaşmamıştım

mesaj birleştirme:: 04 Ekim 2013, 20:22:06

Alıntı yapılan: Allegro - 04 Ekim 2013, 20:00:25
musti463 bana da özel mesaj attığın için özellikle cevap vereyim,

CCS nin en güzel yanı güzel bir LST dosya oluşturması,
Diğer derleyiciler de oluşturuyor ama CCS ninki gibi güzel değil...

Gönderdiğin kodu resim ve glcd ile ilgili satırları iptal edip derledim.

....................          else if (aci_islem <76) { t2 = 11- (11-12.3)*( (aci_islem - 75)/(76-75));} 
09B72:  BRA    9D6A
09B74:  MOVFF  C9,11D
09B78:  MOVFF  C8,11C
09B7C:  MOVFF  C7,11B
09B80:  MOVFF  C6,11A
09B84:  MOVLB  1
09B86:  CLRF   x21
09B88:  CLRF   x20
09B8A:  MOVLW  18
09B8C:  MOVWF  x1F
09B8E:  MOVLW  85
09B90:  MOVWF  x1E
09B92:  MOVLB  0
09B94:  CALL   0130
09B98:  BNC   9C52
09B9A:  BSF    FD8.1
09B9C:  MOVFF  C9,121
09BA0:  MOVFF  C8,120
09BA4:  MOVFF  C7,11F
09BA8:  MOVFF  C6,11E
09BAC:  MOVLB  1
09BAE:  CLRF   x25
09BB0:  CLRF   x24
09BB2:  MOVLW  16
09BB4:  MOVWF  x23
09BB6:  MOVLW  85
09BB8:  MOVWF  x22
09BBA:  MOVLB  0
09BBC:  CALL   01AA
09BC0:  MOVFF  00,106
09BC4:  MOVFF  01,107
09BC8:  MOVFF  02,108
09BCC:  MOVFF  03,109
09BD0:  MOVFF  03,111
09BD4:  MOVFF  02,110
09BD8:  MOVFF  01,10F
09BDC:  MOVFF  00,10E
09BE0:  MOVLB  1
09BE2:  CLRF   x15
09BE4:  CLRF   x14
09BE6:  CLRF   x13
09BE8:  MOVLW  7F
09BEA:  MOVWF  x12
09BEC:  MOVLB  0
09BEE:  CALL   07C0
09BF2:  MOVLW  68
09BF4:  MOVLB  1
09BF6:  MOVWF  x1D
09BF8:  MOVLW  66
09BFA:  MOVWF  x1C
09BFC:  MOVLW  A6
09BFE:  MOVWF  x1B
09C00:  MOVLW  7F
09C02:  MOVWF  x1A
09C04:  MOVFF  03,121
09C08:  MOVFF  02,120
09C0C:  MOVFF  01,11F
09C10:  MOVFF  00,11E
09C14:  MOVLB  0
09C16:  CALL   003A
09C1A:  BSF    FD8.1
09C1C:  MOVLB  1
09C1E:  CLRF   x21
09C20:  CLRF   x20
09C22:  MOVLW  30
09C24:  MOVWF  x1F
09C26:  MOVLW  82
09C28:  MOVWF  x1E
09C2A:  MOVFF  03,125
09C2E:  MOVFF  02,124
09C32:  MOVFF  01,123
09C36:  MOVFF  00,122
09C3A:  MOVLB  0
09C3C:  CALL   01AA
09C40:  MOVFF  03,101
09C44:  MOVFF  02,100
09C48:  MOVFF  01,FF
09C4C:  MOVFF  00,FE


0xDA = 218

sadece sabitleri hesaplayarak sadeleştirdim.
....................          else if (aci_islem <76) { t2 = 12.3*( aci_islem - 75);} 
09C50:  BRA    9DF0
09C52:  MOVFF  C9,11D
09C56:  MOVFF  C8,11C
09C5A:  MOVFF  C7,11B
09C5E:  MOVFF  C6,11A
09C62:  MOVLB  1
09C64:  CLRF   x21
09C66:  CLRF   x20
09C68:  MOVLW  18
09C6A:  MOVWF  x1F
09C6C:  MOVLW  85
09C6E:  MOVWF  x1E
09C70:  MOVLB  0
09C72:  CALL   0130
09C76:  BNC   9CD8
09C78:  BSF    FD8.1
09C7A:  MOVFF  C9,121
09C7E:  MOVFF  C8,120
09C82:  MOVFF  C7,11F
09C86:  MOVFF  C6,11E
09C8A:  MOVLB  1
09C8C:  CLRF   x25
09C8E:  CLRF   x24
09C90:  MOVLW  16
09C92:  MOVWF  x23
09C94:  MOVLW  85
09C96:  MOVWF  x22
09C98:  MOVLB  0
09C9A:  CALL   01AA
09C9E:  MOVLW  CD
09CA0:  MOVLB  1
09CA2:  MOVWF  x1D
09CA4:  MOVLW  CC
09CA6:  MOVWF  x1C
09CA8:  MOVLW  44
09CAA:  MOVWF  x1B
09CAC:  MOVLW  82
09CAE:  MOVWF  x1A
09CB0:  MOVFF  03,121
09CB4:  MOVFF  02,120
09CB8:  MOVFF  01,11F
09CBC:  MOVFF  00,11E
09CC0:  MOVLB  0
09CC2:  CALL   003A
09CC6:  MOVFF  03,101
09CCA:  MOVFF  02,100
09CCE:  MOVFF  01,FF
09CD2:  MOVFF  00,FE


0x82 = 130

yanlış anlama ama senin kod öyle böyle değil "çok acımasızca" yazılmış :)
sadece bu düzeltme ile %40 rom tasarrufu sağlarsın, işini görür ama daha iyisi, biraz optimizasyon yapmayı öğrenmek.

Hocam öncelikle teşekkürler burada ne yaptığınızı biraz anlatırmısınız ve LST nedir?
Mustafa Emir SADE

DumrulBey

Peki şöyle yapalım, ne kadar vaktin var? Gerçi bunu öğrenmem önemli değil, önemli olan vakti en iyi şekilde değerlendirmek. Örneğin 10 gün vaktin varsa bunun en az yarısını programlama hakkında yeni bir şey öğrenerek başlamanı salık veririm. Yukarıda bahsettiğim şeyler olabileceği gibi özellikle bu projede switch case çok işine yarayabilir...

Şimdi dışarı çıkmalıyım ama geldiğimde kodu şöyle salim kafayla bir inceleyeyim. Belki bir yardımımız dokunur ama dediğim gibi önemli olan balık tutmayı öğretmek. Bu hayatının her evresinde sana balık tutacağın anlamına gelmez ama en azından herkes için iyi olan bu...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

Erol YILMAZ

#27
musti463 koda bakıyorum,

Sanırım mcu yu para vermeden almış diye düşünmekten kendini alamıyorum :)

ASM ile kod yazan (emektar) bir arkadaşım var, Kodu görse inanmak istemez hatta 5. kattan da atlayabilir :))

İşin şakası bir yana, Mcu ya PC işlemcisi gibi yaklaşmışsın, yani yüksek seviyeli.
Derleyici o kodları, gariban PIC18 cpu core'a uydurabilmek için binlerce küçük parçaya bölebilmek için uğraşıp duruyor.

8 bitlik Mcu'ya, 32 bitlik Floating Point işlem yaptırmak, eşeğe bir kamyon yükü, yüklemekle eşdeğer.
En başta bunun farkında olmak lazım.

Kendin derleme öncesi yapman gereken basit hesaplamaları, derleyiciye bırakmışsın.
Derleyici bunu ne kadar optimize ediyor, incelemek lazım ama çok ta optimize edemediği ortada...

Madem biz bu yükü yükleyecez! o zaman elimizden geldiğince hafifletmeye bakalım.
Bu tarz bir yaklaşım işini görebilir, ROM kodunu azaltır ama bence bu, yama bir çözüm...

Daha iyisi Mufit hocamın dediği gibi programı, Mcu nun kolay anladığı dilden yani INTeger sayılarla kurmak lazım.
Çok lazım olan yerde Floating sayıya dönüştürüp kullanmak düşünülebilir.

Okan'ın dediği gibi mümkünse TABLO kullanmak ta kullandığın alanı hem azaltır hem de kodun mevcut duruma göre hızlanır.

INteger olmuyor, tablo kullanmak istemiyorum, aynı yapıda kalmam lazım diyorsan
(Gördüğüm kadarı ile benzer yapıda bir mat kullanıyorsun)
değişkenleri bir struct a yükleyip, sadece matematiksel işlem yapan bir fonksiyona dallanabilirsin.
Sanıyorum bu bile daha optimize bir kod çıkartır.

musti463

#28

@DumrulBey

Çok teşekkürler hocam vaktim var,elimde de CCS C ile PIC Programlama kitabı var Serdar Çiçek'in


@Allegro
Float'ı integere dönüştüremem hocam virgülden sonraki 5 haneye kadar önemli.Sabitleri dizi içerisine atıp oradan çağırıyorum şuan için %40 ROM'dan tasarruf ettim.Fakat gördüğüm kadarıyla %50-%60'a kadar yolu var gibi :)

Koddaki if yapılarının içerisindeki sabitleri aşağıdaki resimdeki tablodan aldım.aynı blokları çok defa kullandığım için baya bir yer israfı yapmışım :) Yeni yöntemde aşağıdaki her sütundaki değerleri dizi içine attım.tek if kullanıp değerleri bu dizilerden çağırıyorum.

[IMG]http://i44.tinypic.com/2cjwon.jpg[/img]

#include <18F46K22.h>
#Device PASS_STRINGS=IN_RAM
#device ADC=10 
#include <T6963C.c>
#include <Resimler.h>
#include <math.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOPLLEN                  //4X HW PLL disabled, 4X PLL enabled in software
#FUSES PUT                      //Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES WDT_SW                   //No Watch Dog Timer, enabled in Software
#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#DEFINE fast_glcd


#use delay(clock=16000000)

unsigned long int uzunluk,aci,yuk,ruzgar; //Bilgiler İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
char  uzunluk_str[20],aci_str[20],yuk_str[20],ruzgar_str[20],limityuk_str[20],yukseklik_str[20],moment_str[20],calisma_mesafesi_str[20],sensor_ariza[]={"ARIZA"};
float32 uzunluk_voltaj,aci_voltaj,yuk_voltaj,ruzgar_voltaj;
float32 uzunluk_islem,aci_islem,yuk_islem,ruzgar_islem,yukseklik,yukseklik_rad,moment,calisma_mesafesi,calisma_mesafesi1,calisma_mesafesi2;
float32 uzunluk_gosterge,aci_gosterge,yuk_gosterge,ruzgar_gosterge;
float32 t1,t2,limityuk;

void main()
{  
   setup_wdt(WDT_OFF); 
   setup_adc_ports(NO_ANALOGS); // An0-An1-An3 Portları Analog giriş için ayarlanıyor
   setup_adc_ports(sAN0|sAN1|sAN2|sAN3);
   setup_adc(ADC_CLOCK_INTERNAL);    
   port_b_pullups (TRUE);
   
   glcd_init(240,128); // Grafik LCD ektran hazırlanıyor
   glcd_WriteByte(1, (LCDModeSet|LCDMode_XOR)); // Grafik LCD ekran XOR moda göre ayarlanıyor
   glcd_WriteByte(1, (LCDDispMode|LCDDisp_TXT|LCDDisp_GRH)); // Grafik LCD ekran hem metin hem grafik modunda çalışacak şekilde ayarlanıyor
   
   Resim_goster(Giris,240,128,0,0); // Giriş resmi çağrılıp ekrana basılıyor. Resimler "Resimler.h" dosyasında tek sabit arrayde saklanıyor, 
      
   while(true)
   {
   
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   ///////////////////BOOM UZUNLUK////////////////////////////////////////////////////////////////////////////////////////
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   set_adc_channel(0);
     
   delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
   uzunluk=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
   uzunluk_voltaj=0.0048828125*uzunluk;   // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor ve KALİBRASYON yapılıyor
   
   if(uzunluk_voltaj<0)
   {
     uzunluk_voltaj=0;
   }
   
   uzunluk_islem=uzunluk_voltaj*5.87+10.8;//////////formüllerde kullanılacak
   uzunluk_gosterge=uzunluk_voltaj*5.87+10.8;//////////grafik ekranda kullanılacak

   uzunluk_gosterge=uzunluk_gosterge*10;/////////////////////////////////////
   uzunluk_gosterge=floor(uzunluk_gosterge);//////// Düzeltme yapılıyor//////
   uzunluk_gosterge=(uzunluk_gosterge/10);///////////////////////////////////
   
   glcd_box(17,27,60,44,0); //Boom kutucuğu temizleniyor
   
   sprintf(uzunluk_str,"%0.1f",uzunluk_gosterge);//float to string işlemi gerçekleştiriliyor
   glcd_text57(17,31,uzunluk_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
   
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   ///////////////////BOOM AÇI////////////////////////////////////////////////////////////////////////////////////////////
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   set_adc_channel(1);   // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak
     
   delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
   aci=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
   aci_voltaj=0.0048828125*aci;   // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
   
   if(aci_voltaj<1.822600243)
   {
     aci_voltaj=1.822600243;
   }
   
   aci_islem=(aci_voltaj-1.822600243)*22.34531549+10;
   aci_gosterge=(aci_voltaj-1.822600243)*22.34531549+10;
   
   aci_gosterge=aci_gosterge*10;////////////////////////////////////
   aci_gosterge=floor(aci_gosterge);//////// Düzeltme yapılıyor//////
   aci_gosterge=(aci_gosterge/10);//////////////////////////////////
   
   glcd_box(66,68,110,89,0); //Boom kutucuğu temizleniyor
   
   sprintf(aci_str,"%0.1f",aci_gosterge);//float to string işlemi gerçekleştiriliyor
   glcd_text57(68,74,aci_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
   
      
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   ///////////////////YUK/////////////////////////////////////////////////////////////////////////////////////////////////
   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   set_adc_channel(2);   // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak
     
   delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
   yuk=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
   yuk_voltaj=0.0048828125*yuk;   // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor 
   
   if(yuk_voltaj<2.385)
   {
     yuk_voltaj=2.385;
   }
   
   yuk_islem=(yuk_voltaj-2.385)*19.12045889;
   yuk_gosterge=(yuk_voltaj-2.385)*19.12045889;
   
   yuk_gosterge=yuk_gosterge*10;////////////////////////////////////
   yuk_gosterge=floor(yuk_gosterge);//////// Düzeltme yapılıyor//////
   yuk_gosterge=(yuk_gosterge/10);//////////////////////////////////
   
   glcd_box(179,72,222,89,0); //Boom kutucuğu temizleniyor
   
   sprintf(yuk_str,"%0.1f",yuk_gosterge);//float to string işlemi gerçekleştiriliyor
   glcd_text57(177,76,yuk_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
   
   
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   ///////////////////RUZGAR///////////////////////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   set_adc_channel(3);   // RE0/AN5 ucundaki sinyal A/D işlemine tabi tutulacak
     
   delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
   ruzgar=read_adc();     // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
   ruzgar_voltaj=0.0048828125*ruzgar;   // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
   
    if(ruzgar_voltaj<0.25)
   {
     ruzgar_voltaj=0.25;
   }
   
   ruzgar_islem=(ruzgar_voltaj-0.25)*4.798301486+1;
   ruzgar_gosterge=(ruzgar_voltaj-0.25)*4.798301486+1;
   
   ruzgar_gosterge=ruzgar_gosterge*10;////////////////////////////////////
   ruzgar_gosterge=ceil(ruzgar_gosterge);//////// Düzeltme yapılıyor//////
   ruzgar_gosterge=(ruzgar_gosterge/10);//////////////////////////////////
   
   glcd_box(172,98,216,124,0); //Boom kutucuğu temizleniyor
   
   sprintf(ruzgar_str,"%0.1f",ruzgar_gosterge);//float to string işlemi gerçekleştiriliyor
   glcd_text57(173,106,ruzgar_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
   
   ///////////////////////////////////////JACK EXTENDED////////////////////////////////////////////////
   //////////////////////////////////////////////////////////////////////////////////////////////////
   
   if(uzunluk_islem>=10.8 && uzunluk_islem<=14.5)//////////////////////////////////////////////////////////////////////////////////
         {   
         
        calisma_mesafesi1 = 10.02437-0.01901*aci_islem-0.00117*(aci_islem*aci_islem);
        calisma_mesafesi2 = 13.8069-0.0233*aci_islem-0.00161*(aci_islem*aci_islem);
        calisma_mesafesi=calisma_mesafesi1-(calisma_mesafesi1-calisma_mesafesi2)*((uzunluk_islem-10.8)/(14.5-10.8));
      
        ///////10.8///////
        if      (aci_islem <22) { t1 = 0; }
        else if (aci_islem <35) { t1 = 14.2- (14.2-17.3)*( (aci_islem - 22)/(35-22));}
        else if (aci_islem <39) { t1 = 17.3- (17.3-18.7)*( (aci_islem - 35)/(39-35));}
        else if (aci_islem <44) { t1 = 18.7- (18.7-20.7)*( (aci_islem - 39)/(44-39));}
        else if (aci_islem <47) { t1 = 20.7- (20.7-22.7)*( (aci_islem - 44)/(47-44));}
        else if (aci_islem <51) { t1 = 22.7- (22.7-25)*( (aci_islem - 47)/(51-47));}
        else if (aci_islem <54) { t1 = 25- (25-27.5)*( (aci_islem - 51)/(54-51));}
        else if (aci_islem <58) { t1 = 27.5- (27.5-30.2)*( (aci_islem - 54)/(58-54));}
        else if (aci_islem <61) { t1 = 30.2- (30.2-34)*( (aci_islem - 58)/(61-58));}
        else if (aci_islem <64) { t1 = 34- (34-38)*( (aci_islem - 61)/(64-61));}
        else if (aci_islem <67) { t1 = 38- (38-43)*( (aci_islem - 64)/(67-64));}
        else if (aci_islem <70) { t1 = 43- (43-50.5)*( (aci_islem - 67)/(70-67));}
        else if (aci_islem <90) { t1 = 50.5;}
            
        ///////14.50///////
        if      (aci_islem <27) { t2 = 0; }
        else if (aci_islem <35) { t2 = 7.8- (7.8-9.3)*( (aci_islem - 27)/(35-27));}
        else if (aci_islem <42) { t2 = 9.3- (9.3-11.3)*( (aci_islem - 35)/(42-35));}
        else if (aci_islem <48) { t2 = 11.3- (11.3-14)*( (aci_islem - 42)/(48-42));}
        else if (aci_islem <53) { t2 = 14- (14-17.1)*( (aci_islem - 48)/(53-48));}
        else if (aci_islem <56) { t2 = 17.1- (17.1-18.6)*( (aci_islem - 53)/(56-53));}
        else if (aci_islem <58) { t2 = 18.6- (18.6-20.3)*( (aci_islem - 56)/(58-56));}
        else if (aci_islem <60) { t2 = 20.3- (20.3-22.3)*( (aci_islem - 58)/(60-58));}
        else if (aci_islem <63) { t2 = 22.3- (22.3-24)*( (aci_islem - 60)/(63-60));}
        else if (aci_islem <65) { t2 = 24- (24-26.5)*( (aci_islem - 63)/(65-63));}
        else if (aci_islem <67) { t2 = 26.5- (26.5-29)*( (aci_islem - 65)/(67-65));}
        else if (aci_islem <69) { t2 = 29- (29-30.5)*( (aci_islem - 67)/(69-67));}
        else if (aci_islem <71) { t2 = 30.5- (30.5-33)*( (aci_islem - 69)/(71-69));}
        else if (aci_islem <90) { t2 = 33;}
 
    limityuk=t1-(t1-t2)*((uzunluk_islem-10.8)/(14.5-10.8));
        
         }
    
   else  if(uzunluk_islem>14.5 && uzunluk_islem<=18.15) ///////////////////////////////////////////////////////////////////////////////
         { 
         
         calisma_mesafesi1 = 13.8069-0.0233*aci_islem-0.00161*(aci_islem*aci_islem);
         calisma_mesafesi2 = 17.90797-0.04996*aci_islem-0.00179*(aci_islem*aci_islem);
         calisma_mesafesi=calisma_mesafesi1-(calisma_mesafesi1-calisma_mesafesi2)*((uzunluk_islem-14.5)/(18.15-14.5));
         
         ///////14.50///////
         if      (aci_islem <27) { t1 = 0; }
         else if (aci_islem <35) { t1 = 7.8- (7.8-9.3)*( (aci_islem - 27)/(35-27));}
         else if (aci_islem <42) { t1 = 9.3- (9.3-11.3)*( (aci_islem - 35)/(42-35));}
         else if (aci_islem <48) { t1 = 11.3- (11.3-14)*( (aci_islem - 42)/(48-42));}
         else if (aci_islem <53) { t1 = 14- (14-17.1)*( (aci_islem - 48)/(53-48));}
         else if (aci_islem <56) { t1 = 17.1- (17.1-18.6)*( (aci_islem - 53)/(56-53));}
         else if (aci_islem <58) { t1 = 18.6- (18.6-20.3)*( (aci_islem - 56)/(58-56));}
         else if (aci_islem <60) { t1 = 20.3- (20.3-22.3)*( (aci_islem - 58)/(60-58));}
         else if (aci_islem <63) { t1 = 22.3- (22.3-24)*( (aci_islem - 60)/(63-60));}
         else if (aci_islem <65) { t1 = 24- (24-26.5)*( (aci_islem - 63)/(65-63));}
         else if (aci_islem <67) { t1 = 26.5- (26.5-29)*( (aci_islem - 65)/(67-65));}
         else if (aci_islem <69) { t1 = 29- (29-30.5)*( (aci_islem - 67)/(69-67));}
         else if (aci_islem <71) { t1 = 30.5- (30.5-33)*( (aci_islem - 69)/(71-69));}
         else if (aci_islem <90) { t1 = 33;}
            
         ///////18.15//////
         if      (aci_islem <21) { t2 = 0; } 
         else if (aci_islem <35) { t2 = 4- (4-5.5)*( (aci_islem - 21)/(35-21));}
         else if (aci_islem <46) { t2 = 5.5- (5.5-7.7)*( (aci_islem - 35)/(46-35));}
         else if (aci_islem <50) { t2 = 7.7- (7.7-9.3)*( (aci_islem - 46)/(50-46));}
         else if (aci_islem <54) { t2 = 9.3- (9.3-11.2)*( (aci_islem - 50)/(54-50));}
         else if (aci_islem <58) { t2 = 11.2- (11.2-13.9)*( (aci_islem - 54)/(58-54));}
         else if (aci_islem <62) { t2 = 13.9- (13.9-17)*( (aci_islem - 58)/(62-58));}
         else if (aci_islem <63) { t2 = 17- (17-18.5)*( (aci_islem - 62)/(63-62));}
         else if (aci_islem <65) { t2 = 18.5- (18.5-20)*( (aci_islem - 63)/(65-63));}
         else if (aci_islem <67) { t2 = 20- (20-21.8)*( (aci_islem - 65)/(67-65));}
         else if (aci_islem <69) { t2 = 21.8- (21.8-23.5)*( (aci_islem - 67)/(69-67));}
         else if (aci_islem <70) { t2 = 23.5- (23.5-25.6)*( (aci_islem - 69)/(70-69));}
         else if (aci_islem <72) { t2 = 25.6- (25.6-28)*( (aci_islem - 70)/(72-70));}
         else if (aci_islem <74) { t2 = 28- (28-28)*( (aci_islem - 72)/(74-72));}
         else if (aci_islem <75) { t2 = 28- (28-28)*( (aci_islem - 74)/(75-74));}
         else if (aci_islem <77) { t2 = 28- (28-28)*( (aci_islem - 75)/(77-75));}
         else if (aci_islem <79) { t2 = 28- (28-28)*( (aci_islem - 77)/(79-77));}
         else if (aci_islem <90) { t2 = 28;}
 
    limityuk=t1-(t1-t2)*((uzunluk_islem-14.5)/(18.15-14.5));
        
         }
   
   else  if(uzunluk_islem>18.15 && uzunluk_islem<=21.8) ///////////////////////////////////////////////////////////////////////////////
         {   
        
         calisma_mesafesi1 = 17.90797-0.04996*aci_islem-0.00179*(aci_islem*aci_islem);
         calisma_mesafesi2 = 21.57485-0.05672*aci_islem-0.00216*(aci_islem*aci_islem);
         calisma_mesafesi=calisma_mesafesi1-(calisma_mesafesi1-calisma_mesafesi2)*((uzunluk_islem-18.15)/(21.8-18.15));
        
         ///////18.15///////
         if      (aci_islem <21) { t1 = 0; } 
         else if (aci_islem <35) { t1 = 4- (4-5.5)*( (aci_islem - 21)/(35-21));}
         else if (aci_islem <46) { t1 = 5.5- (5.5-7.7)*( (aci_islem - 35)/(46-35));}
         else if (aci_islem <50) { t1 = 7.7- (7.7-9.3)*( (aci_islem - 46)/(50-46));}
         else if (aci_islem <54) { t1 = 9.3- (9.3-11.2)*( (aci_islem - 50)/(54-50));}
         else if (aci_islem <58) { t1 = 11.2- (11.2-13.9)*( (aci_islem - 54)/(58-54));}
         else if (aci_islem <62) { t1 = 13.9- (13.9-17)*( (aci_islem - 58)/(62-58));}
         else if (aci_islem <63) { t1 = 17- (17-18.5)*( (aci_islem - 62)/(63-62));}
         else if (aci_islem <65) { t1 = 18.5- (18.5-20)*( (aci_islem - 63)/(65-63));}
         else if (aci_islem <67) { t1 = 20- (20-21.8)*( (aci_islem - 65)/(67-65));}
         else if (aci_islem <69) { t1 = 21.8- (21.8-23.5)*( (aci_islem - 67)/(69-67));}
         else if (aci_islem <70) { t1 = 23.5- (23.5-25.6)*( (aci_islem - 69)/(70-69));}
         else if (aci_islem <72) { t1 = 25.6- (25.6-28)*( (aci_islem - 70)/(72-70));}
         else if (aci_islem <74) { t1 = 28- (28-28)*( (aci_islem - 72)/(74-72));}
         else if (aci_islem <75) { t1 = 28- (28-28)*( (aci_islem - 74)/(75-74));}
         else if (aci_islem <77) { t1 = 28- (28-28)*( (aci_islem - 75)/(77-75));}
         else if (aci_islem <79) { t1 = 28- (28-28)*( (aci_islem - 77)/(79-77));}
         else if (aci_islem <90) { t1 = 28;}
            
         ///////21.8///////
         if      (aci_islem <16) { t2 = 0; } 
         else if (aci_islem <30) { t2 = 1.8- (1.8-2.7)*( (aci_islem - 16)/(30-16));}
         else if (aci_islem <40) { t2 = 2.7- (2.7-3.9)*( (aci_islem - 30)/(40-30));}
         else if (aci_islem <48) { t2 = 3.9- (3.9-5.5)*( (aci_islem - 40)/(48-40));}
         else if (aci_islem <55) { t2 = 5.5- (5.5-7.6)*( (aci_islem - 48)/(55-48));}
         else if (aci_islem <58) { t2 = 7.6- (7.6-9.2)*( (aci_islem - 55)/(58-55));}
         else if (aci_islem <61) { t2 = 9.2- (9.2-11.2)*( (aci_islem - 58)/(61-58));}
         else if (aci_islem <64) { t2 = 11.2- (11.2-13.6)*( (aci_islem - 61)/(64-61));}
         else if (aci_islem <67) { t2 = 13.6- (13.6-15.9)*( (aci_islem - 64)/(67-64));}
         else if (aci_islem <69) { t2 = 15.9- (15.9-17.1)*( (aci_islem - 67)/(69-67));}
         else if (aci_islem <70) { t2 = 17.1- (17.1-18.4)*( (aci_islem - 69)/(70-69));}
         else if (aci_islem <72) { t2 = 18.4- (18.4-19.9)*( (aci_islem - 70)/(72-70));}
         else if (aci_islem <73) { t2 = 19.9- (19.9-21.5)*( (aci_islem - 72)/(73-72));}
         else if (aci_islem <74) { t2 = 21.5- (21.5-23.2)*( (aci_islem - 73)/(74-73));}
         else if (aci_islem <76) { t2 = 23.2- (23.2-24)*( (aci_islem - 74)/(76-74));}
         else if (aci_islem <90) { t2 = 24;}

 
    limityuk=t1-(t1-t2)*((uzunluk_islem-18.15)/(21.8-18.15));
       
         }
  
   else  if(uzunluk_islem>21.8 && uzunluk_islem<=25.5) ///////////////////////////////////////////////////////////////////////////////
         {
         
         calisma_mesafesi1 = 21.57485-0.05672*aci_islem-0.00216*(aci_islem*aci_islem);
         calisma_mesafesi2 = 25.93118-0.08018*aci_islem-0.00239*(aci_islem*aci_islem);
         calisma_mesafesi=calisma_mesafesi1-(calisma_mesafesi1-calisma_mesafesi2)*((uzunluk_islem-21.8)/(25.5-21.8));
        
         ///////21.8///////
         if      (aci_islem <16) { t1 = 0; } 
         else if (aci_islem <30) { t1 = 1.8- (1.8-2.7)*( (aci_islem - 16)/(30-16));}
         else if (aci_islem <40) { t1 = 2.7- (2.7-3.9)*( (aci_islem - 30)/(40-30));}
         else if (aci_islem <48) { t1 = 3.9- (3.9-5.5)*( (aci_islem - 40)/(48-40));}
         else if (aci_islem <55) { t1 = 5.5- (5.5-7.6)*( (aci_islem - 48)/(55-48));}
         else if (aci_islem <58) { t1 = 7.6- (7.6-9.2)*( (aci_islem - 55)/(58-55));}
         else if (aci_islem <61) { t1 = 9.2- (9.2-11.2)*( (aci_islem - 58)/(61-58));}
         else if (aci_islem <64) { t1 = 11.2- (11.2-13.6)*( (aci_islem - 61)/(64-61));}
         else if (aci_islem <67) { t1 = 13.6- (13.6-15.9)*( (aci_islem - 64)/(67-64));}
         else if (aci_islem <69) { t1 = 15.9- (15.9-17.1)*( (aci_islem - 67)/(69-67));}
         else if (aci_islem <70) { t1 = 17.1- (17.1-18.4)*( (aci_islem - 69)/(70-69));}
         else if (aci_islem <72) { t1 = 18.4- (18.4-19.9)*( (aci_islem - 70)/(72-70));}
         else if (aci_islem <73) { t1 = 19.9- (19.9-21.5)*( (aci_islem - 72)/(73-72));}
         else if (aci_islem <74) { t1 = 21.5- (21.5-23.2)*( (aci_islem - 73)/(74-73));}
         else if (aci_islem <76) { t1 = 23.2- (23.2-24)*( (aci_islem - 74)/(76-74));}
         else if (aci_islem <90) { t1 = 24;}
            
         ///////25.5///////
         if      (aci_islem <27) { t2 = 0; } 
         else if (aci_islem <36) { t2 = 1.1- (1.1-1.8)*( (aci_islem - 27)/(36-27));}
         else if (aci_islem <43) { t2 = 1.8- (1.8-2.7)*( (aci_islem - 36)/(43-36));}
         else if (aci_islem <50) { t2 = 2.7- (2.7-3.8)*( (aci_islem - 43)/(50-43));}
         else if (aci_islem <56) { t2 = 3.8- (3.8-5.4)*( (aci_islem - 50)/(56-50));}
         else if (aci_islem <61) { t2 = 5.4- (5.4-7.6)*( (aci_islem - 56)/(61-56));}
         else if (aci_islem <64) { t2 = 7.6- (7.6-9.1)*( (aci_islem - 61)/(64-61));}
         else if (aci_islem <67) { t2 = 9.1- (9.1-11.1)*( (aci_islem - 64)/(67-64));}
         else if (aci_islem <69) { t2 = 11.1- (11.1-13.2)*( (aci_islem - 67)/(69-67));}
         else if (aci_islem <71) { t2 = 13.2- (13.2-14.8)*( (aci_islem - 69)/(71-69));}
         else if (aci_islem <73) { t2 = 14.8- (14.8-15.7)*( (aci_islem - 71)/(73-71));}
         else if (aci_islem <74) { t2 = 15.7- (15.7-16.8)*( (aci_islem - 73)/(74-73));}
         else if (aci_islem <75) { t2 = 16.8- (16.8-18)*( (aci_islem - 74)/(75-74));}
         else if (aci_islem <76) { t2 = 18- (18-20)*( (aci_islem - 75)/(76-75));}
         else if (aci_islem <90) { t2 = 20;}

    limityuk=t1-(t1-t2)*((uzunluk_islem-21.8)/(25.5-21.8));
        
         }
         
   else  if(uzunluk_islem>25.5 && uzunluk_islem<=32.85) ///////////////////////////////////////////////////////////////////////////////
         {
         
         calisma_mesafesi1 = 25.93118-0.08018*aci_islem-0.00239*(aci_islem*aci_islem);
         calisma_mesafesi2 = 33.57907-0.09996*aci_islem-0.00308*(aci_islem*aci_islem);
         calisma_mesafesi=calisma_mesafesi1-(calisma_mesafesi1-calisma_mesafesi2)*((uzunluk_islem-25.5)/(32.85-25.5));
        
         ///////25.5///////
         if      (aci_islem <27) { t1 = 0; } 
         else if (aci_islem <36) { t1 = 1.1- (1.1-1.8)*( (aci_islem - 27)/(36-27));}
         else if (aci_islem <43) { t1 = 1.8- (1.8-2.7)*( (aci_islem - 36)/(43-36));}
         else if (aci_islem <50) { t1 = 2.7- (2.7-3.8)*( (aci_islem - 43)/(50-43));}
         else if (aci_islem <56) { t1 = 3.8- (3.8-5.4)*( (aci_islem - 50)/(56-50));}
         else if (aci_islem <61) { t1 = 5.4- (5.4-7.6)*( (aci_islem - 56)/(61-56));}
         else if (aci_islem <64) { t1 = 7.6- (7.6-9.1)*( (aci_islem - 61)/(64-61));}
         else if (aci_islem <67) { t1 = 9.1- (9.1-11.1)*( (aci_islem - 64)/(67-64));}
         else if (aci_islem <69) { t1 = 11.1- (11.1-13.2)*( (aci_islem - 67)/(69-67));}
         else if (aci_islem <71) { t1 = 13.2- (13.2-14.8)*( (aci_islem - 69)/(71-69));}
         else if (aci_islem <73) { t1 = 14.8- (14.8-15.7)*( (aci_islem - 71)/(73-71));}
         else if (aci_islem <74) { t1 = 15.7- (15.7-16.8)*( (aci_islem - 73)/(74-73));}
         else if (aci_islem <75) { t1 = 16.8- (16.8-18)*( (aci_islem - 74)/(75-74));}
         else if (aci_islem <76) { t1 = 18- (18-20)*( (aci_islem - 75)/(76-75));}
         else if (aci_islem <90) { t1 = 20;}
            
         ///////32.85///////
         if      (aci_islem <36) { t2 = 0; } 
         else if (aci_islem <42) { t2 = 0.9- (0.9-1.35)*( (aci_islem - 36)/(42-36));}
         else if (aci_islem <47) { t2 = 1.35- (1.35-1.9)*( (aci_islem - 42)/(47-42));}
         else if (aci_islem <52) { t2 = 1.9- (1.9-2.6)*( (aci_islem - 47)/(52-47));}
         else if (aci_islem <57) { t2 = 2.6- (2.6-3.5)*( (aci_islem - 52)/(57-52));}
         else if (aci_islem <61) { t2 = 3.5- (3.5-4.7)*( (aci_islem - 57)/(61-57));}
         else if (aci_islem <65) { t2 = 4.7- (4.7-6.2)*( (aci_islem - 61)/(65-61));}
         else if (aci_islem <69) { t2 = 6.2- (6.2-8.3)*( (aci_islem - 65)/(69-65));}
         else if (aci_islem <71) { t2 = 8.3- (8.3-9.1)*( (aci_islem - 69)/(71-69));}
         else if (aci_islem <73) { t2 = 9.1- (9.1-10)*( (aci_islem - 71)/(73-71));}
         else if (aci_islem <75) { t2 = 10- (10-11)*( (aci_islem - 73)/(75-73));}
         else if (aci_islem <76) { t2 = 11- (11-12.3)*( (aci_islem - 75)/(76-75));}
         else if (aci_islem <77) { t2 = 12.3- (12.3-13)*( (aci_islem - 76)/(77-76));}
         else if (aci_islem <90) { t2 = 13;}

  

   limityuk=t1-(t1-t2)*((uzunluk_islem-25.5)/(32.85-25.5));
         
         }
         
  else  if(uzunluk_islem>32.85 && uzunluk_islem<=40.15) ///////////////////////////////////////////////////////////////////////////////
         {
         
         calisma_mesafesi1 = 33.57907-0.09996*aci_islem-0.00308*(aci_islem*aci_islem);
         calisma_mesafesi2 = 40.61246-0.08087*aci_islem-0.00416*(aci_islem*aci_islem);
         calisma_mesafesi=calisma_mesafesi1-(calisma_mesafesi1-calisma_mesafesi2)*((uzunluk_islem-32.85)/(40.15-32.85));
        
         ///////32.85///////
         if      (aci_islem <36) { t1 = 0; } 
         else if (aci_islem <42) { t1 = 0.9- (0.9-1.35)*( (aci_islem - 36)/(42-36));}
         else if (aci_islem <47) { t1 = 1.35- (1.35-1.9)*( (aci_islem - 42)/(47-42));}
         else if (aci_islem <52) { t1 = 1.9- (1.9-2.6)*( (aci_islem - 47)/(52-47));}
         else if (aci_islem <57) { t1 = 2.6- (2.6-3.5)*( (aci_islem - 52)/(57-52));}
         else if (aci_islem <61) { t1 = 3.5- (3.5-4.7)*( (aci_islem - 57)/(61-57));}
         else if (aci_islem <65) { t1 = 4.7- (4.7-6.2)*( (aci_islem - 61)/(65-61));}
         else if (aci_islem <69) { t1 = 6.2- (6.2-8.3)*( (aci_islem - 65)/(69-65));}
         else if (aci_islem <71) { t1 = 8.3- (8.3-9.1)*( (aci_islem - 69)/(71-69));}
         else if (aci_islem <73) { t1 = 9.1- (9.1-10)*( (aci_islem - 71)/(73-71));}
         else if (aci_islem <75) { t1 = 10- (10-11)*( (aci_islem - 73)/(75-73));}
         else if (aci_islem <76) { t1 = 11- (11-12.3)*( (aci_islem - 75)/(76-75));}
         else if (aci_islem <77) { t1 = 12.3- (12.3-13)*( (aci_islem - 76)/(77-76));}
         else if (aci_islem <90) { t1 = 13;}


         ///////40.15///////
         if      (aci_islem <37) { t2 = 0; } 
         else if (aci_islem <42) { t2 = 0.4- (0.4-0.7)*( (aci_islem - 37)/(42-37));}
         else if (aci_islem <46) { t2 = 0.7- (0.7-1)*( (aci_islem - 42)/(46-42));}
         else if (aci_islem <50) { t2 = 1- (1-1.4)*( (aci_islem - 46)/(50-46));}
         else if (aci_islem <54) { t2 = 1.4- (1.4-1.9)*( (aci_islem - 50)/(54-50));}
         else if (aci_islem <58) { t2 = 1.9- (1.9-2.45)*( (aci_islem - 54)/(58-54));}
         else if (aci_islem <61) { t2 = 2.45- (2.45-3.2)*( (aci_islem - 58)/(61-58));}
         else if (aci_islem <65) { t2 = 3.2- (3.2-4)*( (aci_islem - 61)/(65-61));}
         else if (aci_islem <68) { t2 = 4- (4-4.7)*( (aci_islem - 65)/(68-65));}
         else if (aci_islem <71) { t2 = 4.7- (4.7-5.5)*( (aci_islem - 68)/(71-68));}
         else if (aci_islem <74) { t2 = 5.5- (5.5-6.3)*( (aci_islem - 71)/(74-71));}
         else if (aci_islem <75) { t2 = 6.3- (6.3-6.8)*( (aci_islem - 74)/(75-74));}
         else if (aci_islem <77) { t2 = 6.8- (6.8-7.3)*( (aci_islem - 75)/(77-75));}
         else if (aci_islem <78) { t2 = 7.3- (7.3-7.5)*( (aci_islem - 77)/(78-77));}
         else if (aci_islem <90) { t2 = 7.5;}
         

   limityuk=t1-(t1-t2)*((uzunluk_islem-32.85)/(40.15-32.85));
        
         }
               
            if(limityuk<0){limityuk=0;}
          
            glcd_box(173,36,222,62,0); //Boom kutucuğu temizleniyor
            sprintf(limityuk_str,"%0.1f",limityuk);//float to string işlemi gerçekleştiriliyor
            glcd_text57(177,44,limityuk_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
            
            yukseklik_rad=(aci_islem*pi)/180;
            yukseklik=uzunluk_islem*sin(yukseklik_rad)+1;
            
            glcd_box(105,25,150,46,0); //Boom kutucuğu temizleniyor
            sprintf(yukseklik_str,"%0.1f",yukseklik);//float to string işlemi gerçekleştiriliyor
            glcd_text57(106,31,yukseklik_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
            
            moment=((100*yuk_islem)/limityuk);
            if(moment>999){moment=999;}
                 
            glcd_box(190,4,233,30,0); //Boom kutucuğu temizleniyor
            sprintf(moment_str,"%0.0f",moment);//float to string işlemi gerçekleştiriliyor
            glcd_text57(195,12,moment_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
            
            glcd_box(85,104,130,125,0); //Boom kutucuğu temizleniyor
            sprintf(calisma_mesafesi_str,"%0.1f",calisma_mesafesi);//float to string işlemi gerçekleştiriliyor
            glcd_text57(86,110,calisma_mesafesi_str,2,1);//voltaj_str değeri ekrana yazdırılıyor
            
            
 
   }
   
   
} 
Mustafa Emir SADE

serhat1990

Hocalarımız gerekli açıklamaları yapmış @cyclone Hocamın ' da dediği gibi işlem kalabalığını ortadan kaldırmak adına benzer işlemler için fonksiyonel yapı kurabilirsin . Matematiksel işlemleri ayrı ayrı yapmak yerine aynı işlemleri yapacak ufak fonksiyonlar oluştur . Bu işlemleri yapmak istersen kullanacağın değerleri kullanarak bu fonksiyonlara gir işlemlerini yap derim.  Bir işlemi iki kere yapıp ayrı ayrı değişkenlere attığını görüyorum . 2 kere yapmak yerine bu işlemi yapacak bir fonksiyon oluştur. Sonuç değerini döndürsün bu fonksiyon. Benim önerim de bu yöndedir.

İyi çalışmalar , saygılarımla ...