24 Temmuz 2014 Perşembe

SERVO MOTOR KONTROL-2

  Bu çalışmamda daha önce yaptığım Analog joystick İle Motor Hız Kontrol Ve RPM Sayıcı Projesi'nde kullandığım analog potu kullanarak 2 adet servo motoru kontrol edeceğim. O projede sadece analog potun x-ekseni kullanıldı fakat bu çalışmamda y-eksenide dahil edilecek.  Yani hem x-ekseni hem de y-ekseninden değerler alacağım.




  Yukarıdaki resimde analog pot gözükmektedir. Yapısında iki adet pot bulunmaktadır. Bunlar ile hem x-ekseni hem de y-ekseninden bir gerilim alınarak ADC yardımıyla mikrodenetleyicimize iletilir. Alınan bu değerler işlenerek hangi eksende ne kadar derecelik hareket varsa servolarımıza iletilir ve servolar harekete geçirilir.

 
 Iki adet servomuz yukarıdaki gibi konumlandırılmıştır. Analog potumuz x-ekseninde bir değişiklik yaparsa alttaki servo devreye girecek veya y-ekseninde bir değişiklik olursa üstteki servo devreye girecektir. Hem servolar hem de analog pot +90 derece ile -90 derece arasında konumlandırılabilir.
 


Devre şeması



MikroC kodu;

#include "built_in.h" // hi(), lo(), komutlarını kullanmak için
# define servo1 PORTB.RB4 // servo motor çıkışı ayarlanır. PORTD.RD0
# define servo2 PORTB.RB5 // servo motor çıkışı ayarlanır. PORTD.RD1
char secilen_motor = 1, secilen_hiz = 1, secilen_poz = 0;
unsigned poz;
const int rc_poz_limit = 12500;         // PWM maksimum limit = 2.5 ms x 8 = 20 ms
const int rc_poz_min = 2400;            // PWM minimum limit = 1.5 ms
unsigned servo_pwm[2]={rc_poz_min,rc_poz_min};
unsigned short servo_say = 0;
bit servo1_on;
bit servo2_on;
bit bayrak;
unsigned rc_poz_interrupt = 53035;      // TMR1 için ön değer
unsigned int adc_deg[2]; // ADC'den alınan verilerimi tutar.
void interrupt(){
   if (pir1.tmr1if){                     // tmr1 kesmesi oluştu
      if (!bayrak){
         if (servo_say == 0 && servo1_on) servo1 = 1;
         if (servo_say == 1 && servo2_on) servo2 = 1;
         rc_poz_interrupt = 65535 - servo_pwm[servo_say];
         tmr1h = hi(rc_poz_interrupt);
         tmr1l = lo(rc_poz_interrupt);
      }
      if (bayrak) {
         if (servo_say == 0 && servo1_on) servo1 = 0;
         if (servo_say == 1 && servo2_on) servo2 = 0;
         rc_poz_interrupt = 65535 - rc_poz_limit + servo_pwm[servo_say];
         tmr1h = hi(rc_poz_interrupt);
         tmr1l = lo(rc_poz_interrupt);
         if (++servo_say > 7) servo_say = 0;
      }
      bayrak = !bayrak;
      pir1.TMR1IF = 0;
   }
}
void init(){
     TRISB=0X00;
     PORTB=0X00;
     delay_ms(300);
   /*TIMER1 DONANIM BIRIMI KULLANILIYOR CUNKU SERVO MOTORUN NE KADAR SURE 1 KALCAK VE NE KADAR SURE 0 KALACAĞINI HESAPLAMAK ICIN BU DONANIM BIRIMINE IHTIYAC VARDIR*/
     TMR1H = hi(rc_poz_interrupt);       // TMR1 için ön değer yüklendi
     TMR1L = lo(rc_poz_interrupt);
     PIE1.TMR1IE = 1;                    // TMR1 kesmesi aktif edildi
     T1CON.TMR1ON = 1;                   // TMR1 zamanlayıcısı çalıştırıldı
     RCON.IPEN = 0;                      // Çevresel kesme maskelemeleri iptal edildi
     INTCON.GIE = 1;                     // Kesmeler aktif edildi
     INTCON.PEIE = 1;
    /*ADC AYARLARI ICIN*/
     TRISA.RA0=1;
     TRISA.RA1=1;
     ADCON0=0x09;
     ADCON1=0b00001101;   // Use Internal Voltage Reference (Vdd and Vss)
     CMCON|=7;
     bayrak = 0;
     servo1_on = 1;
     servo2_on = 1;
     servo1 = 0;                         // bütün servoların ctrl pinlerine
     servo2 = 0;
     servo_pwm[0] = 2400;                // bütün servoların başlangıç pozisyonları
     servo_pwm[1] = 2400;
}
void servo_poz(unsigned secilen_motor, unsigned poz, unsigned short hiz){
    unsigned short i;
    while(servo_pwm[secilen_motor] < poz){
       servo_pwm[secilen_motor]++;
       for(i = 0; i < hiz; i++) delay_us(100);
    }
    while(servo_pwm[secilen_motor] > poz){
       servo_pwm[secilen_motor]--;
       for(i = 0; i < hiz; i++) delay_us(100);
    }
}
void main() {                           // ana program
    init();                             // init() altprogramı çalıştırılıyor
    delay_ms(500);
    while(1){                            // sonsuz döngü
           secilen_motor=0;
          while(secilen_motor<2){
               adc_deg[0]=ADC_READ(0);
               adc_deg[1]=ADC_READ(1);
               delay_ms(100);
               poz=(55,56*((adc_deg[secilen_motor]*45)/255))+2400;
               servo_poz(secilen_motor, poz, secilen_hiz);
               secilen_motor++;
          }

    }
}


                                              SONUÇ




22 Temmuz 2014 Salı

SERVO MOTOR KONTROL-1

 Servo motorlar günümüzde pek çok yerde kullanılmaktadır. Genellikle model uçaklar, araba gibi yerlerde sıkça kullanılır. Boyutları küçük olmasına rağmen torku yüksek olması bu motorların en önemli özelliklerinden biridir. Diğer önemli özelliği ise mikrodenetleyiciler ile arasında herhangi bir ara devre olmadan direk mikrodenetleyiciye bağlanabilir. Piyasa da genellikle 180 derece dönebilen mevcuttur ama 360 derece dönebilenlerde vardır.


Benim bu çalışmada kullanacağım TowerPro markalı servo motordur.  Servo motorun 3 adet kablosu bulunur;
   *  Kırmızı kablo VCC(4.5V-6V)
   *  Kahve rengi    GND
   *  TURUNCU    Data




 Servo motorun çalıştırılması için periyodu sabit olmalıdır yani 20ms  gibi. Bu 20 ms periydun içinde biz darbenin lojik 1 kalma süresini sınırları içinde ayarlarsak motor istediğimiz yöne sürebiliriz. Örneğin; Data ucuna 0.5 ms bir lojik 1 uygulayalım sonra 19.5ms lojik 0 uygulayalım motor sola doğru hareket edecektir. Bunu devamlı yaparsak motor sola gidecek ver orada kitlenecektir. Bu işlemler ortaya ve sağa doğru hareketler içinde geçerlidir.

 Ben bu çalışmamda yapmak istediğim şey şimdilik motor önce -90 derece gidecek ve +10 derece arta arta +90 dereceye kadar gidecek.

Devre şeması
 
 
Devrede 20Mhz kristal, 2 adet 22pf kondansatör , 1 adet servo motor ve son olarak 18f4550 mikrodenetliyimiz bulunmaktadır.

MikroC  kodumuz; Kod yeterince açıktır ve yanlarında açıklamaları yazdım. Biraz göz atarsanız mantığını anlayabilirsiniz.


 #include "built_in.h" // hi(), lo(), komutlarını kullanmak için
# define servo PORTD.RD0 // servo motor için çıkışı ayarlanır PORTD.RD0
char say = 1, secilen_hiz = 1, secilen_poz = 0;
unsigned poz;
const int rc_poz_limit = 12500;         // PWM maksimum limit 2.5ms
const int rc_poz_min = 2400;            // PWM minimum limit  0.5ms
unsigned servo_pwm;             // ne kadar lojik  1 kalacağını belirler.
unsigned short servo_idx = 0;   // Bunun neden kullandığı sonraki projede daha açık anlayacaksınız
bit servo1_on;
bit bayrak;
unsigned rc_poz_interrupt = 53035;      // TMR1 için ön değer
unsigned short adc_deg;
void interrupt()
{
   if (pir1.tmr1if){                     // tmr1 kesmesi oluştu
      if (!bayrak){
         if (servo_idx == 0 && servo1_on) servo = 1;
         rc_poz_interrupt = 65535 - servo_pwm;
         tmr1h = hi(rc_poz_interrupt);
         tmr1l = lo(rc_poz_interrupt);
      }
      if (bayrak){
         if (servo_idx == 0 && servo1_on) servo = 0;
         rc_poz_interrupt = 65535 - rc_poz_limit + servo_pwm;
         tmr1h = hi(rc_poz_interrupt);
         tmr1l = lo(rc_poz_interrupt);
         if (++servo_idx > 7) servo_idx = 0;
      }
      bayrak = !bayrak;// 20ms elde etmek için bu işlem yapıldı
      pir1.TMR1IF = 0;
   }
}
void init()
{
    TRISD =0x00;                          // PORTD çıkış olarak yönlendirildi
    PORTD =0x00;                          // PORTD sıfırlandı
    delay_ms(300);
    tmr1h = hi(rc_poz_interrupt);       // TMR1 için ön değer yüklendi
    tmr1l = lo(rc_poz_interrupt);
    pie1.TMR1IE = 1;                    // TMR1 kesmesi aktif edildi
    t1con.TMR1ON = 1;                   // TMR1 zamanlayıcısı çalıştırıldı
    RCON.IPEN = 0;                      // Çevresel kesme maskelemeleri iptal edildi
    INTCON.GIE = 1;                     // Kesmeler aktif edildi
    INTCON.PEIE = 1;                    // Çevresel kesmeler aktif edildi
    bayrak = 0;
    servo1_on = 1;
    servo = 0;                         //  servo ilk anda çalışmıyor.
    servo_pwm = 2400;                // bütün servoların başlangıç pozisyonları
}
void pozisyon(unsigned poz, unsigned short hiz)   // servonun pozisyonunu ayarlama
{
    unsigned short i;
    while(servo_pwm < poz){
       servo_pwm++;
       for(i = 0; i < hiz; i++) delay_us(100);
    }
    while(servo_pwm > poz){
       servo_pwm--;
       for(i = 0; i < hiz; i++) delay_us(100);
    }
}
void main() {                           // ana program
    init();                             // init() altprogramı çalıştırılıyor
    delay_ms(500);
    while(1){                            // sonsuz döngü
     say=1;
     while(say < 9)
       {
          delay_ms(100);
          poz = (55,56 * secilen_poz) + 2400;
          pozisyon(poz, secilen_hiz);
          say++;
       }
      secilen_poz = secilen_poz + 10;  // servo pozisyonları 10 derece artırıldı
       if (secilen_poz > 180) secilen_poz = 0;      // pozisyon 180 ( ya da +90 )
    }                                               // dereceyi aştı ise 0 derece
}

                                                         SONUC





Kaynak
*MikroC  ve  PIC18F4550 kitabı
*http://320volt.com/picbasic-dersleri-pic-basic-pro-ile-pic-programlama-12/
*http://embedded-lab.com/blog/?p=4653
*http://www.fatiherdem.net/hobi-servo-surelim/

17 Temmuz 2014 Perşembe

EUSART DONANIM BIRIMI ILE RF MOTOR KONTROL



   Bu çalışmamdaki amacım iki ayrı devre oluşturarak bir kablosuz alıcı verici devresi yapmak. Bunun için daha önceki çalışmalarımda yaptığım motor kontrol devresini yapacağım. Yani alıcı kısımın da benim motorum olacak ve onu sürecek olan devre verici kısmında ise benim analog potuma bağlı olan ayrı bir devre. Yani analog pot hızı kontrol edecek.

 Kullanacağım alıcı verici çifti;

http://www.direnc.net/433MHZ-RF-ALICI-VERICI-KRISTALLI-TAKIM,PR-1580.html

 

Aslında alıcı ve verici sanki iki devre arasında bir kablo varmış gibi davranır alıcı ve verici modüllerinin yerine bir kablo ile bağlasanız da aynı  işi yapar. Ama amacımız kablosuz iletişim olduğunda buna gerek yok.


Ve devre şemam;
 
 
 
 
 Bu devremde alıcı ve verici kısmında birer tane mikrodenetliyici kullanıldı. Alıcı kısmında 18F4550 kullanıldı bu entegrenin sahip olduğu TIMER2, ECCP ve son olarak EUSART donanım birimleri kullanıldı. Bu son donanım birimin kullanılmasında ki amaç yukarıdaki en başta yer alan resimlerde alıcı ve verici çiftine data alışverişini yapması için kullanıldı. Verici kısmında 18f2550 kullanıldı
ve donanım birimi olarak da ADC ve EUSART donanım birimleri kullanıldı.

 MikroC programında yazılım yazılırken EUSART donanım biriminin hazır kod kullanılmadı onun yerine kendim yeninden inşa ettim herşeyi.

 Eusart modulu ASCII karaketer alır ve gönderir ve bu yüznden stringlerle iş yaparsınız bu önemli bir nokta. Örneğin; Siz vericinizden 255 sayısını göndereceksiniz diyelim bunu stringe çevirmelisiz yani "255" bunun gibi yoksa 255 gönderilmez alıcı doğru veri almaz. Alıcı da ise alına  bu string üzerinde bir işlem yapmak isterseniz eğer bu "255" stringini decimal sayıya çevirmelisiz. Yani  vericiniz "255"
datasını gönderdi ama bu string siz alıcı kısmında alınan bu data üzerine +10 sayısını ilave etmek istiyorsunuz direk "255"+10 diyemezsiniz yanlış bu. Bun yerine "255" alınan bu stringi decimal sayıya çevirip öyle eklersiniz  255+10 gibi.

 Bende bu çalışmamda bunun gibi yaptım verici kısmında potdan aldığı değeri yani decimal sayıyı stringe çevirip öyle alıcıya gönderdim orada onu decimal sayıya çevirip öyle işlem yaptım.



 /* UART MODULU YAPILANDIRILMASI */
     TXSTA=0;              //ILK ANDA SIFIR
     RCSTA=0;
     SPBRG=103;            //16 MHZ İÇİN 9600 BİT/SN hızında baundrate
     TXSTA=0X26;
     RCSTA=0X90;
     INTCON=0XC0;
     PIE1.RCIE=1;          //RSR DEN RCREG VERI AKTARILDIĞINDA KESME OLUŞSUN

 Yukarıdaki kodda, Euart donanım birimin yapılandırılması gösterilmiştir. Alıcı kısmında 16mhz kristal kullanılıp SPBRG register içine 103 yazılarak 9600 baud da ayarlanmıştır. Verici kısmında 20Mhz kristal kullanılıp SPBRG=129 yazılmıştır önemli olan nokta her ikisinde de 9600 baud olmalıdır. Yani saniye 9600 bit gönderilir ve alınır. 


void interrupt(){
  if(PIR1.RCIF){
     if(RCSTA.FERR || RCSTA.OERR){// Eğer karakter almada FIFO register ile sorun oluşursa
              RCSTA.CREN=0;       // normal duruma getirmek için bunları yap
              delay_us(1);
              RCSTA.CREN=0;
              PIR1.RCIF=0;
     }
            RxBuffer=RCREG;     // Vericinden alınan karakteri kopyala
            control=1;
            PIR1.RCIF=0;
  }
}

Yukarıda olan kesme kodunda eğer veri yani string geldiyse kesme olur veri ilk stringi RxBuffer içine yazılır.


Alıcı kısmın MikroC kodu;

#define SIFRE_1 0x41
#define SIFRE_2 0x42
sbit LCD_RS at RB1_bit;
sbit LCD_EN at RB2_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_RS_Direction at TRISB1_bit;
sbit LCD_EN_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D4_Direction at TRISD0_bit;
unsigned char RxBuffer,control=0;
void interrupt(){
  if(PIR1.RCIF){
     if(RCSTA.FERR || RCSTA.OERR){// Eğer karakter almada FIFO register ile sorun oluşursa
              RCSTA.CREN=0;       // normal duruma getirmek için bunları yap
              delay_us(1);
              RCSTA.CREN=0;
              PIR1.RCIF=0;
     }
            RxBuffer=RCREG;     // Vericinden alınan karakteri kopyala
            control=1;
            PIR1.RCIF=0;
  }
}
void init(){
   /* UART MODULU YAPILANDIRILMASI */
     TXSTA=0;              //ILK ANDA SIFIR
     RCSTA=0;
     SPBRG=103;            //16 MHZ İÇİN 9600 BİT/SN hızında baundrate
     TXSTA=0X26;
     RCSTA=0X90;
     INTCON=0XC0;
     PIE1.RCIE=1;          //RSR DEN RCREG VERI AKTARILDIĞINDA KESME OLUŞSUN
     // LCD AYARLARI//
    Lcd_Init();                        // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR);               // Clear display
    Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
     //ADC AYARLARI//
     ADCON1 |=0X0F;
     CMCON  |=7;
     /* pwm için 4.975Hzlik sinyal üretilip sinyalin 1 kalma oranıyla ADC ile ayarlanıp
motoru hızlandırıp veya yaşlatabiliriz */
     TRISC.RC2=0;  // FULL-BRIDGE CIKISLARI ICIN  AYARLAMALAR
     PORTC.RC2=0;
     TRISD.RD5=0;
     TRISD.RD6=0;
     TRISD.RD7=0;
     PORTD.RD5=0;
     TRISD.RD6=0;
     TRISD.RD7=0;
     CCP1CON=0b01001100;  // Full Bridge Forward; P1A, P1C active-high; P1B, P1D active-high
     CCPR1L=0X00;            // Start with zero Duty Cycle
     // PWM Period = 4 x Tosc x (PR2 + 1) x TMR2 Prescale Value
     // Tosc = 1/16 Mhz = 0.0000000625
    // PWM Period = 4 x 0.0000000625 x 201 x 4 = 0.000201
    // PWM Frequency = 1/PWM Period = 1/0.000201 = 4.975 kHz
    T2CON=0b00000101;    // Postscale: 1:1, Timer2=On, Prescale = 1:4
    PR2=200;             // Frequency: 4.975 kHz
    TMR2=0;              // Start with zero Counter
}
char KarakterAl();
void GonderKarakter(char harf);
void StringYaz(char *str);
unsigned short RF_Read();
char strtobyte(char *str);
char verim[]="   ";
char ham_verim[2];
char datam[2];
unsigned short say=0,i=0;
unsigned int duty_cycle;
char kelime1[4];
char toplam;
void main() {
  init();
  while(1){
     say=0;
     do{
       verim[say]=RF_Read();
       say++;
     }while(say<3);
     ham_verim[i]=strtobyte(&verim[0]);
     i++;
     if(i>=3){
       Lcd_Cmd(_LCD_CLEAR);               // Clear display
        if(ham_verim[0]==3){
              CCPR1L = 0;
              duty_cycle=0;
              lcd_out(1,1," MOTOR DURDU !       ");
        }else{
            if(ham_verim[0]==2){
              while(!(P1M1_BIT==0&&P1M0_BIT==1)){
              Lcd_Cmd(_LCD_CLEAR);
                 P1M1_BIT=0;    // MOTOR'A SAGA CEVİRDI
                 P1M0_BIT=1;
              }
                 lcd_out(2,1," SAGA %         ");
                 CCPR1L=ham_verim[2];
                 duty_cycle=(ham_verim[2]/250.0) * 100.0;
                 bytetostr(duty_cycle,kelime1);
                 lcd_out(2,9,kelime1);
            }
            if(ham_verim[0]==1){
              while(!(P1M1_BIT==1&&P1M0_BIT==1)){
              Lcd_Cmd(_LCD_CLEAR);
                 P1M1_BIT=1;    // MOTOR'A SAGA CEVİRDI
                 P1M0_BIT=1;
              }
                 lcd_out(2,1," SOLA %        ");
                 CCPR1L=ham_verim[1];
                 duty_cycle=(ham_verim[1]/250.0) * 100.0;
                 bytetostr(duty_cycle,kelime1);
                 lcd_out(2,9,kelime1);
             }
        }
        i=0;
     }
  }
}
unsigned short RF_Read(){ // Karşı tarafatan karakter almaya başla.
        char tmp,i,say=0;i=0;
    do{
        tmp=KarakterAl();
        switch(i){
          case 0: if(tmp==SIFRE_1){ datam[0]=tmp;i++;} break;
          case 1: if(tmp==SIFRE_2){ datam[1]=tmp;i++;}else i=0; break;
          case 2:  datam[2]=tmp;i++;break;   // asıl karakterim
          default:break;
        }
    }while(i<3);
    return tmp;
}
void StringYaz(char *str){
      char i=0;
      while(*(str+i)!=0){    //  0\ işareti geldiğindeçıkar bu kelimeden
        GonderKarakter(*(str+i));   // string içindeki karakterleri tek tek gönder
        i++;
      }
}
void GonderKarakter(char harf){
     if(!(TXSTA.TXEN)) TXSTA.TXEN=1;  //gönderme yetkisi verildimi ?
     while(!(PIR1.TXIF));  PIR1.TXIF=1;  // eğer TXREG deki veri TSR'ye gönderildimi.
     TXREG=harf;                        // gönderildiyse yeni karakter yükle.
}
char KarakterAl(){
     while(!control);
     control=0;
     return RxBuffer;
}
char strtobyte(char *str){  // Vericiden alınan string tipinde karakterleri byte çevirme. Eğer çevirme
                            //yapılmaz ise üzerinden işlemler yapamayız.
  char S,onlar,birler,sayi,yuzler;
      for(S=0;S<3;S++){
          if(*(str+S)==0x20) *(str+S)=0x30;  //bOŞLUĞU SIFIRA ÇEVİRME
      }
      yuzler=( *(str+0)-48)*100;
      onlar=( *(str+1)-48)*10;
      birler=( *(str+2)-48);
      sayi=yuzler+onlar+birler;
      if(sayi>255) sayi=255;        // bir byte 255 değerini tutbilir bunu aşmasın diye sınırladık.
  return sayi;
}


Verici kısmın MikroC kodu;

#define SIFRE_1 0x41
#define SIFRE_2 0x42
void init(){
     /* ADC AYARLARI */
     ADCON0=0b00000011;
     ADCON1=0b00001110;
    
     TXSTA=0;              //ILK ANDA SIFIR
     RCSTA=0;
     SPBRG=129;            //16 MHZ İÇİN 9600 BİT/SN hızında baundrate
     TXSTA=0X26;
     RCSTA=0X90;

   TRISB.RB6=0;
   TRISB.RB7=0;
   TRISB.RB5=0;
   PORTB.RB6=0;
   PORTB.RB7=0;
   PORTB.RB5=1;
}
void data_gonder(char *veri);
void GonderKarakter(char harf);
void StringYaz(char *str);
unsigned int x_axis_ham;     // analogdan alınan sinyal
unsigned char x_axis;
char ham_veri[3];   // 3 bytelık verileri tutsun diye biz dizi oluşturuldu.
void main() {
     init();
     while(1){
                  x_axis_ham=ADC_read(0);
             if  ((x_axis_ham>=501)  & (x_axis_ham<=529)){  //EĞER ANALOG POT TAM ORTADAYSA
                  PORTB.RB6=0;
                  PORTB.RB7=0;
                 
                  ham_veri[0]=3; /* MOTOR DURDUR BILGISI*/
                  ham_veri[1]=0;
                  ham_veri[2]=0;
                  data_gonder(&ham_veri[0]);
            }else{
                  if (x_axis_ham<500){
                        PORTB.RB6=1;   /* SOLA DONECEK SINYALİ*/
                        PORTB.RB7=0;
                     while(x_axis_ham<=500){
                         x_axis_ham=ADC_read(0);
                         x_axis =(500-x_axis_ham)/2 ;
                         ham_veri[0]=1; /*P1M1_BIT=1, P1M0_BIT=1; sola karşı taraf için*/
                         ham_veri[1]=x_axis;
                         ham_veri[2]=0;
                         data_gonder(&ham_veri[0]);
                      }
                   }
                 if (x_axis_ham>530){
                         PORTB.RB6=0;    /* SAGA DONECEK SINYALİ*/
                         PORTB.RB7=1;
                       while(x_axis_ham>530){
                         x_axis_ham=ADC_read(0);
                         x_axis=(x_axis_ham-530)/2;
                         ham_veri[0]=2; /*P1M1_BIT=0, P1M0_BIT=1; saga*/
                         ham_veri[1]=0;
                         ham_veri[2]=x_axis;
                         data_gonder(&ham_veri[0]);
                      }
                 }
                    
            }
                    

     }
}
void data_gonder(char *veri){  //ham_veri deki değeleri gönderir
           char say,kelime[4];
           say=0;
           delay_ms(300);
               do{                                                           //0 1 2
                  bytetostr(*(veri+say),kelime);// kelime  ( _ _ _)
                  StringYaz(&kelime[0]);
                  say++;
               }while(say<3);
}
void StringYaz(char *str){
      char i=0;
      while(*(str+i)!=0){    //  0\ işareti geldiğindeçıkar bu kelimeden
         GonderKarakter(SIFRE_1);// starT1 byte
         GonderKarakter(SIFRE_2);// starT2 byte   //0 1 2
         GonderKarakter(*(str+i));   // string içindeki karakterleri tek tek gönder
        i++;
      }
}
void GonderKarakter(char harf){
     if(!(TXSTA.TXEN)) TXSTA.TXEN=1;  //gönderme yetkisi verildimi ?
     while(!(PIR1.TXIF));  PIR1.TXIF=1;  // eğer TXREG deki veri TSR'ye gönderildimi.
     TXREG=harf;                        // gönderildiyse yeni karakter yükle.
}

Kaynaklar

1) Altaş yayıncılık Pıc Programlama Teknikleri ve PIC16F877A
2) Altaş yayıncılık MıkroC ile PIC 18f4550 Programlama



7 Temmuz 2014 Pazartesi

PC to PIC Serial Communication With JAVA

Bu çalışmam da daha önceki yaptığım çalışmanın ( Java Netbeans Ile Basit Bir Hesap Makinasi) hemen hemen aynısı fakat işlevi farklı olan bir uygulama yapacağım. Bu uygulamam da bilgisayar üzerinden benim kitimin(TEKOPIC 2) üzerinde 18f4550 mikrodenetleyici bulan yardımı ile 8 adet kırmızı led'i ve LCD ekranımı java netbeans programı yardımıyla bilgisayar üzerinden kontrol edeceğim.


Devre şeması aşağıdaki gibidir. 4mhz kristal kullanılmış olup ona bağlı olan 22pf kondansatördür.
 
Ve MıkroC kodu;

char uart_rd;                   // EUSART biriminden alınacak olan veri için
                                // tanımlanan değişken
// LCD display bağlantıları
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_RS_Direction at TRISC0_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D7_Direction at TRISD3_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D4_Direction at TRISD0_bit;
// LCD display bağlantı sonu
void main(){
   TRISB=0X00;
   PORTB=0X00;
   ADCON1 |= 0x0F;                      // AN pinleri dijital I/O yapılandırıldı
   CMCON  |= 7;                         // Comparators (karşılaştırıcılar) pasif edildi
   Lcd_Init();                          // LCD display yapılandırıldı
   Lcd_Cmd(_LCD_CURSOR_OFF);            // LCD ekranından imleç kaldırıldı
   Lcd_Cmd(_LCD_CLEAR);                 // LCD ekranı silindi
   Lcd_Out(1, 3, " muhhakanaydin");          // 1. satır, 3. sütun'a text yazdırıldı
   Lcd_Out(2, 1, ".blogspot.com.tr");    // 2. satır, 1. sütun'a text yazdırıldı
   UART1_Init(9600);                    // EUSART donanımı yapılandırıldı
   Delay_ms(100);                        // Baud hızı 57600 belirlendi
   for( ; ; )
   {
      if (UART1_Data_Ready()) {     // Şayet EUSART'dan veri geldi ise,
      uart_rd = UART1_Read();       // Alınan veriyi oku, uart_rd'ye al,
      UART1_Write(uart_rd);         // ve EUSART'a veriyi yaz
      Lcd_Chr_Cp(uart_rd);          // Alınan veriyi LCD ekranına gönder
      if (uart_rd == '9')  LCD_CMD(_LCD_CLEAR);       // ESC display ekranını sil
       if (uart_rd == '0')  PORTB=1;
        if (uart_rd == '1')  PORTB=2;
         if (uart_rd == '2')  PORTB=4;
          if (uart_rd == '3')  PORTB=8;
           if (uart_rd == '4')  PORTB=16;
            if (uart_rd == '5')  PORTB=32;
             if (uart_rd == '6')  PORTB=64;
              if (uart_rd == '7')  PORTB=128;
    }
   }
}


Java ile ilgili olan GUI ve kodu;
 
 
 
 
 


import jssc.SerialPort;
import jssc.SerialPort;
import jssc.SerialPortException;
public class NewJFrame extends javax.swing.JFrame {
 
    public NewJFrame() {
        initComponents();
    }
    @SuppressWarnings("unchecked")
   
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {
        jPanel2 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jButton2 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jButton6 = new javax.swing.JButton();
        jButton7 = new javax.swing.JButton();
        jButton8 = new javax.swing.JButton();
        jButton9 = new javax.swing.JButton();
        jButton10 = new javax.swing.JButton();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jPanel2.setBackground(new java.awt.Color(0, 255, 255));
        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "LCD EKRAN", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 3, 18), new java.awt.Color(255, 0, 0))); // NOI18N
        jButton1.setText("EKRAN SIL");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel1.setText("LCD EKRANA YAZDIR");
        jButton2.setText("YAZDIR");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jButton1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField1)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addComponent(jButton2))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jLabel2))
                .addGap(18, 18, 18)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton2))
        );
        jPanel1.setBackground(new java.awt.Color(0, 0, 204));
        jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(51, 255, 0)));
        jButton3.setText("LED 1");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jButton4.setText("LED 2");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jButton5.setText("LED 3");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });
        jButton6.setText("LED 4");
        jButton6.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton6ActionPerformed(evt);
            }
        });
        jButton7.setText("LED 5");
        jButton7.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton7ActionPerformed(evt);
            }
        });
        jButton8.setText("LED 6");
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });
        jButton9.setText("LED 7");
        jButton9.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton9ActionPerformed(evt);
            }
        });
        jButton10.setText("LED 8");
        jButton10.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton10ActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton5)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton6)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton7)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton8)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton9)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton10)
                .addContainerGap(30, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton3)
                    .addComponent(jButton4)
                    .addComponent(jButton5)
                    .addComponent(jButton6)
                    .addComponent(jButton7)
                    .addComponent(jButton8)
                    .addComponent(jButton9)
                    .addComponent(jButton10))
                .addContainerGap(19, Short.MAX_VALUE))
        );
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        pack();
    }// </editor-fold>                       
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
   
    SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes("9".getBytes());        
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf(jTextField1.getText()).getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
         SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("0").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                        
                 SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("1").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                        
                 SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("2").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                        
                 SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("3").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {                                        
                 SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("4").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {                                        
                 SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("5").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {                                        
                 SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("6").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                       
    private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {                                         
                SerialPort serialPort = new SerialPort("COM6");   
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);
            serialPort.writeBytes(String.valueOf("7").getBytes());
            serialPort.closePort();
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }                                        
   
    public static void main(String args[]) {
      
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                    
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton10;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JButton jButton8;
    private javax.swing.JButton jButton9;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                  

}

6 Temmuz 2014 Pazar

Java Netbeans Ile Basit Bir Hesap Makinasi

    Uzun zamandır PicBasicPro, Dev-c++, MıkroC ve Matlab programlama dillerinden sonra Java ile uğraşmak istemiştim ve  başlamak iki gün önce nasip oldu. İnternette araştırarak öğrendiğim kadarıyla basit bir hesap makinesi yapacağım. C dilinde az çok iyi olduğumdan java programını anlamak çok da zor olmadı.  Eğer sizde herhangi bir programlama dilinin de iyi olduğunuzu düşünüyorsanız sizde zorlanmazsınız. Benim kullandığım Java programın adı NetBeans
 8.0.

     İlk önce işe GUİ tasarmalakla başlayalım ve GUI'miz aşağıdaki gibi olacaktır.


 
 
  GUI'mizi çalıştırırsak ekranda böyle görüntü olacaktır.


 
 
Ve Java kodu;


import java.awt.Color;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author HB
 */
public class Hesap extends javax.swing.JFrame {
    /**
     * Creates new form Hesap
     */
    public Hesap() {
        initComponents();
    }
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    float sayi1,sayi2,sonuc;
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jLabel1.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(51, 0, 255));
        jLabel1.setText("SAYI 1");
        jLabel2.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(51, 0, 255));
        jLabel2.setText("SAYI 2");
        jTextField2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField2ActionPerformed(evt);
            }
        });
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Seçimler"));
        jButton1.setText("TOPLA");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jButton2.setText("ÇIKAR");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jButton3.setText("ÇARP");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jButton4.setText("BÖL");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jButton5.setText("MOD AL");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });
        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(55, 55, 55)
                .addComponent(jButton4)
                .addGap(40, 40, 40)
                .addComponent(jButton5)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(32, 32, 32)
                .addComponent(jButton2)
                .addGap(18, 18, 18)
                .addComponent(jButton3)
                .addGap(30, 30, 30))
        );
        jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButton2, jButton3, jButton4, jButton5});
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton2)
                    .addComponent(jButton3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton4)
                    .addComponent(jButton5))
                .addGap(24, 24, 24))
        );
        jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jButton2, jButton3, jButton4, jButton5});
        jLabel3.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
        jLabel3.setForeground(new java.awt.Color(51, 0, 255));
        jLabel3.setText("SONUC");
        jLabel4.setFont(new java.awt.Font("Tahoma", 3, 18)); // NOI18N
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addGap(36, 36, 36)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 0, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(72, Short.MAX_VALUE)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(68, 68, 68))
        );
        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jTextField1, jTextField2});
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(8, 8, 8)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(2, 2, 2)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(12, 12, 12)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jTextField1, jTextField2});
        pack();
    }// </editor-fold>                       
    private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
    }                                          
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
     try{
            sayi1=Float.parseFloat(jTextField1.getText());
            sayi2=Float.parseFloat(jTextField2.getText());
            sonuc=sayi1-sayi2;         
            jLabel4.setText(""+sonuc);
        }catch(NumberFormatException e){
              jLabel4.setText("SAYI GIRINIZ !!");
              jLabel4.setForeground(Color.red);
        }    }                                       
    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                        
     try{
            sayi1=Float.parseFloat(jTextField1.getText());
            sayi2=Float.parseFloat(jTextField2.getText());
            if(sayi2==0){
              jLabel4.setText("TANIMSIZ !!");
              jLabel4.setForeground(Color.red);
            }else{
            sonuc=sayi1/sayi2;         
            jLabel4.setText(""+sonuc);
            }
        }catch(NumberFormatException e){
              jLabel4.setText("SAYI GIRINIZ !!");
              jLabel4.setForeground(Color.red);
        }    }                                       
    private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
       
         try{
            sayi1=Float.parseFloat(jTextField1.getText());
            sayi2=Float.parseFloat(jTextField2.getText());
            sonuc=sayi1-sayi2;         
            jLabel4.setText(""+sonuc);
        }catch(NumberFormatException e){
              jLabel4.setText("SAYI GIRINIZ !!");
              jLabel4.setForeground(Color.red);
        }                         
    }                                       
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        
        try{
            sayi1=Float.parseFloat(jTextField1.getText());
            sayi2=Float.parseFloat(jTextField2.getText());
            sonuc=sayi1+sayi2;         
            jLabel4.setText(""+sonuc);
        }catch(NumberFormatException e){
              jLabel4.setText("SAYI GIRINIZ !!");
              jLabel4.setForeground(Color.red);
        }

    }                                       
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
     try{
            sayi1=Float.parseFloat(jTextField1.getText());
            sayi2=Float.parseFloat(jTextField2.getText());
            sonuc=sayi1*sayi2;         
            jLabel4.setText(""+sonuc);
        }catch(NumberFormatException e){
              jLabel4.setText("SAYI GIRINIZ !!");
              jLabel4.setForeground(Color.red);
        }    }                                       
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Hesap.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Hesap.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Hesap.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Hesap.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Hesap().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                    
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration                  
}