Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Proself - 18 Ekim 2017, 22:34:15

Başlık: 3 Eksenli Robot Kol
Gönderen: Proself - 18 Ekim 2017, 22:34:15
Araştırma projem olan usb aracılığıyla bilgisayardan kontrollü robot kol yapmak istiyorum.Araştırdığım kadarıyla 3 adet step motoru ileri geri kontrolünü yapmam gerekiyor ama 3 motorun aynı anda nasıl kontrol edileceğini bilmiyorum ve hangi entegreyi kullanacağımıda bilemiyorum ekstradan motor sürücü entegresi gibi bir şey de kullanmam gerekir mi her motor için ayrı bir entegre + sürücü entegresi kullanmam gerekir mi pic değil ardunio ile yapmaya çalışsam tam  olarak nasıl bir değişiklik olur tüm işlemler tamamlandığında bilgisayardan kontrolü visual ile mi sağlayacağım yoksa başka bir yolla mı ?
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: ehliseyf - 25 Ekim 2017, 11:18:53
https://www.thingiverse.com/thing:1241491 bu link işini görebilir. Matematiği biraz karışıktır ama uğraşırsan çözebilirsin.
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: Tagli - 25 Ekim 2017, 11:37:07
Step motor kullanacaksan, en basit yöntem "Stepstick" isimli motor sürücüyü kullanmandır. Elbette her motor için birer tane gerekecek. Bu sürücü özellikle 3B yazıcılarda kullanıldığı için popüler oldu ve pek çok yerden uygun fiyata temin edilebiliyor. Yurtiçi alışveriş sitelerinde "DRV8825" diye aratırsan çıkar (ki aslında bu sürücünün değil, kullandığı çipin adıdır.). Sürücü yön ve adım olmak üzere iki dijital sinyal ile yönetilir. Arduino veya PIC fark etmez, kullanım mantığı aynıdır.
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: sigmoid - 25 Ekim 2017, 12:16:34
DRV8825 kadar iyi olmasada easydriver da iyi iş görüyor.

A- A+ B- B+ uçlarını step motora bağlıyorsun. 12volt beslemeyi easydrivera veriyorsun. Geriye Dır pini ile step motorun yönünü belirlemek ve step pininden de kara dalga vermek kalıyor.
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: Proself - 04 Kasım 2017, 12:24:52
Arkadaşlar merhaba projemde katettiğim yollar şöyle pic olarak 16f877 yi belirledim 3 eksen için 4 motor olmasına kanaat getirdim ve 4 motor için 3 adet uln2003 entegresi belirledim gövdedeki iki motoru bir uln2003'e verdim yanlız motorlarda kod kısmında bir sıkıntı yaşıyorum ileri butonundan sonra geriye bastığımda bir kez daha ileri gidip bir sonraki bastığımda geri gitmeye başlıyor bu sorunu kodda çözdüm bu seferde motor 0 konumunda yani dikken geriye gidince - değer alma sorunundan dolayı çalışmayıp kitleniyor motorları c# ekranından kontrol etmeyi düşünüyorum seri port aracılığıyla yapmamı önerdiler ama nasıl yapacağımı bilmiyorum yardımcı olur musunuz?Şimdiden teşekkürler
(https://s1.postimg.cc/6oaex7cjzv/Proteus.jpg) (https://postimg.cc/image/6oaex7cjzv/)


(https://s1.postimg.cc/7kwf501luz/image.jpg) (https://postimg.cc/image/7kwf501luz/)

(https://s1.postimg.cc/1rrgvpel1n/Kod1.jpg) (https://postimg.cc/image/1rrgvpel1n/)

(https://s1.postimg.cc/2d14i09923/Kod2.jpg) (https://postimg.cc/image/2d14i09923/)
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: kudretuzuner - 04 Kasım 2017, 14:58:09
Merhaba,
Proteus'ta butonlarla çalıştırdığınız projenizi PIC'in Rx ve TX pinlerini kullanarak PC ile haberleştireceksiniz.Bunun için de yazılımınızı da ona göre tasarlamanız lazım.Ayrıca USB ara entegresi olan FT232R kullanmanız gerekecek.CCS C bilmediğim için kodlarınıza yardımcı olamayacağım.Prensip olarak PC'den yollayacağınız bir byte'lık data ile butonun yaptığı işi gelen data yapacaktır.Kolay gelsin.
Not :C# bilmiyorum ama VB.Net 2010 express edition kullanmaktayım.Göndereceğiniz dataları bilirsem prensip kodları da VB.Net olarak paylaşırım.
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: Proself - 04 Kasım 2017, 16:06:08
Alıntı yapılan: kudretuzuner - 04 Kasım 2017, 14:58:09
Merhaba,
Proteus'ta butonlarla çalıştırdığınız projenizi PIC'in Rx ve TX pinlerini kullanarak PC ile haberleştireceksiniz.Bunun için de yazılımınızı da ona göre tasarlamanız lazım.Ayrıca USB ara entegresi olan FT232R kullanmanız gerekecek.CCS C bilmediğim için kodlarınıza yardımcı olamayacağım.Prensip olarak PC'den yollayacağınız bir byte'lık data ile butonun yaptığı işi gelen data yapacaktır.Kolay gelsin.
Not :C# bilmiyorum ama VB.Net 2010 express edition kullanmaktayım.Göndereceğiniz dataları bilirsem prensip kodları da VB.Net olarak paylaşırım.

Çok teşekkürler kullanmam gereken ft232r hakkında biraz bilgi verir misiniz peki ve isis şemasına eklemem gereken başka bir şey varmı konu hakkında baya acemiyim yardımlarınız için şimdiden teşekkür ederim ve öğrenci olduğum için projeyi en az maliyet ve en basit haliyle tamamlamak istiyorum
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: mir_as82 - 04 Kasım 2017, 19:10:13
Sene 2007 ben bitirme projemde iki adet robot kolun bilgisayar ile kontrolü Ve simülasyonu bitirme projesini yapmıştım
Owi 007 robot kolu vardı.
İçinde DC motor vardı, eksenlerine analog pot vardı.
DC motor sürücü entegre-PIC16F877 ile yapmıştım.
Projenizi Web servis ile entegre edip yapmaya çalışın. Bundan 10 sene sonra ne olur bilemiyorum ama 5 sene Web servis işleri ön planda olacak. Okulu bitirince sizin için faydalı olması için öneri olsun diye yazdım



Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: Proself - 04 Kasım 2017, 21:29:29
Hocam şuan C# ekranında atıyorum sağ butonuna bastığımda isiste motorun sağa dönmesini istiyorum kısacası bunuda seri port aracılığıyla yapmak istiyorum bana visual studio ve pic ccs programlarında yardımcı olacak birisine ihtiyacım var
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: kudretuzuner - 04 Kasım 2017, 22:22:35
Merhaba,
https://www.robotistan.com/ftdi-programlama-karti-33v-5v-secilebilir
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: Proself - 12 Kasım 2017, 17:25:46
Arkadaşlar hala seri port haberleşmede sıkıntı yaşıyorum yardımcı olabilecek varmı
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: kudretuzuner - 13 Kasım 2017, 10:27:12
Merhaba,
Nasıl bir problem var? PC arayüz yazılımınız var mı? Var ise ne yolluyorsunuz PIC'te bunu nasıl işliyorsunuz?PC'den gönderilen ve PIC'ten gelen datalar nelerdir?PIC yazılımınızda bu gönderilen ve de alınan datalara uygun mu? vs....
Hatırladığım kadarı ile USB'den data yollamaktasınız o da ayrı bir işlev.Hangi dönüştürücüyü ve hangi veri hızında yollamaktasınız?Yanıtlara göre problem daha kolay çözülür.Kolay gelsin.
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: Proself - 21 Kasım 2017, 17:00:01
(https://s18.postimg.cc/ri7070151/image.jpg) (https://postimg.cc/image/ri7070151/)

(https://s18.postimg.cc/3r7mow8np/kod.jpg) (https://postimg.cc/image/3r7mow8np/)

Arkadaşlar step motorlarla simülasyonda döndürme kısmında şemadaki gibi eklemem gereken ya da düzeltmem gereken bir şey var mı, biraz araştırmalarımın sonunda seri haberleşmede kod kısmında biraz ilerleme kaydettim onlarıda c# ve ccs kodu olarak yazdım(çok az biçimde) ancak ileriki aşamada ne yapmam gerekiyor c# ekranından proteusu kontrol edebilmek için
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: fide - 19 Aralık 2017, 01:45:52
Merhaba. Hala aciliyeti var mı bilmiyorum ama yine de yazayım. Bilgisayardan arayüzle motor, led, buzzer, lcd ekrana yazı, rgb led kontrol eden bir arayüz yazdım. Pot ve bıtonları da bilgisayara aktarıyor. Şimdi bilg açık değil aöa en kısa zamanda hem vb6 kodlarını hem de ccs c kodlarını paylaşabilirim.


Step sürücü olarak en 5-6 uçlu motorlar için en basit uln2803 yada 2804 kullan. Het motor için dört pin, toplam 12 pin yapar.


Aslında hazır satılan ğlastik robot kollarını servo ile sürmen daha basit olur. Bilg, usb seri çevirici, pic kısmı aynı kalır, sürücü kalkar, motor kısmı servo olur.
Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: fide - 19 Aralık 2017, 08:58:00
Seri porttan gelen verileri işlemek için aşağıdaki gibi bir mantık kullanmışım. Kullanmışım diyorum çünkü 2.5 sene önce yaptığım bir projeydi. Sonra da üzerine düşmedim bir daha. İnterrupt içinde veri almak dışında işlem yapmamak gerekir ama karşılaştırmalar sadece 1-2 eşitlik üzerinden yapıldığından hız konusunda sıkıntı yok.
main.c içeriğidir.

#include <main.h>
#include <def.h>
#include <regs.h>
#include <lcd2x16.c>
#include <func.c>

#int_RDA
void  RDA_isr(void)
{
 
   buzzer_on;
   char dummy_resp;
   
   u32 temp_counter=0;
   u8 data_counter=0;
   
   for (temp_counter=0;temp_counter<max_rda_data;temp_counter++)
   {
       my_text.rda[temp_counter]='\0';
   
   }
   
 
  data_counter=0;
  temp_counter=0;
 
  do{
       
     
      if(kbhit(Comm1))
      {
         
         dummy_resp=fgetc(Comm1);
       
        if(data_counter<max_rda_data)
        {
             my_text.rda[data_counter]=dummy_resp;
             data_counter++;
               
         
        }
         temp_counter=0;
       
     
      }
      temp_counter++;
   }while(temp_counter<10000);
  my_text.rda[data_counter]='\0';
  fprintf(comm1,"RDA: %s"my_text.rda);
  buzzer_off;
 
  if ((my_text.rda[0]=='A')&&(my_text.rda[1]=='T'))
  {
      switch(my_text.rda[2])
      {
         case 'B':
               if(my_text.rda[3]=='1')
                  {buzzer_on;}
               if(my_text.rda[3]=='0')
                  {buzzer_off;}
         
         break;
         case 'P':
               if(my_text.rda[10]=='1')
               {led0(1);}
               if(my_text.rda[10]=='0')
               {led0(0);}
               if(my_text.rda[9]=='1')
               {led1(1);}
               if(my_text.rda[9]=='0')
               {led1(0);}
               if(my_text.rda[8]=='1')
               {led2(1);}
               if(my_text.rda[8]=='0')
               {led2(0);}
               if(my_text.rda[7]=='1')
               {led3(1);}
               if(my_text.rda[7]=='0')
               {led3(0);}
               if(my_text.rda[6]=='1')
               {led4(1);}
               if(my_text.rda[6]=='0')
               {led4(0);}
               if(my_text.rda[5]=='1')
               {led5(1);}
               if(my_text.rda[5]=='0')
               {led5(0);}
               if(my_text.rda[4]=='1')
               {led6(1);}
               if(my_text.rda[4]=='0')
               {led6(0);}
               if(my_text.rda[3]=='1')
               {led7(1);}
               if(my_text.rda[3]=='0')
               {led7(0);}   
         break;
         
         case 'L':
            my_text.counter1=my_text.rda[3]-48;
            my_text.counter2=my_text.rda[4]-65;
            l_motor(my_text.counter1,my_text.counter2);
         break;
         
         case 'R':
            my_text.counter1=my_text.rda[3]-48;
            my_text.counter2=my_text.rda[4]-65;
            r_motor(my_text.counter1,my_text.counter2);
         break;
         
         case 'C':
            my_text.counter1=my_text.rda[3]-48;
            my_text.counter2=my_text.rda[4]-48;
            my_text.counter3=my_text.rda[5]-48;
           
            if((my_text.counter1)==0)
            {
               hi_x(rgb_r);
            }
            if((my_text.counter1)==1)
            {
               lo_x(rgb_r);
            }
           
             if((my_text.counter2)==0)
            {
               hi_x(rgb_g);
            }
            if((my_text.counter2)==1)
            {
               lo_x(rgb_g);
            }
             if((my_text.counter3)==0)
            {
               hi_x(rgb_b);
            }
            if((my_text.counter3)==1)
            {
               lo_x(rgb_b);
            }
   
         break;
         
         case '1':
           line1=1;
           temp_counter=0;
           do{my_text.rda[temp_counter+3];
               if ((my_text.rda[temp_counter+3]>40)&&(my_text.rda[temp_counter+3]<123))
               {
                  my_text.dummy_str[temp_counter]=my_text.rda[temp_counter+3];
               }
               else
               {
               my_text.dummy_str[temp_counter]=32;
               }
               temp_counter++;
            }while (my_text.rda[temp_counter+3]!=0);
           
            my_text.dummy_str[temp_counter]='\0';
           
           
         break;
         
         case '2':
         line2=1;
           temp_counter=0;
           do{my_text.rda[temp_counter+3];
               if ((my_text.rda[temp_counter+3]>40)&&(my_text.rda[temp_counter+3]<123))
               {
                  my_text.dummy_str[temp_counter]=my_text.rda[temp_counter+3];
               }
               else
               {
               my_text.dummy_str[temp_counter]=32;
               }
               temp_counter++;
            }while (my_text.rda[temp_counter+3]!=0);
           
            my_text.dummy_str[temp_counter]='\0';
           
           
         break;
         case '3':
            line3=1;
         break;
         case '4':
            line4=1;
         break;
         
         default:
            fprintf(Comm1,"check");
         break;
     
      }
 
 
 
  }
   
   
   
}



void main()
{
   setup_adc(ADC_CLOCK_DIV_32); //configure analog to digiral converter
   setup_adc_ports(AN0);
   
   buzzer_off;
 
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   setup_timer_2(T2_DIV_BY_1,32,1);
   
   setup_ccp1(CCP_PWM);
   setup_ccp2(CCP_PWM);

   l_motor_pwm(0);
   r_motor_pwm(0);
   
   // sw için ayarlama
   output_float(sw0);
   output_float(sw1);
   output_float(sw2);
   output_float(sw3);
   //buzzeriçin ayarlama
   
   output_drive(buzzer);
   
   output_drive(r_motor_cw);
   output_drive(r_motor_ccw);
   output_drive(l_motor_cw);
   output_drive(l_motor_ccw);
   
   output_drive(e);
   output_drive(rs);
   output_drive(d4);
   output_drive(d5);
   output_drive(d6);
   output_drive(d7);
   
   //lcd ayarlama
   lcd_ayarla();
   bekle(t_medium);
   
   lcd_sil();
   adres(1,1);
   printf(lcd_yaz,"FiDeNet");
   bekle(t_long);
   lcd_sil();
   adres(1,1);
   printf(lcd_yaz,"dev: %s "my_device[dev_id].str);
   adres(1,2);
   printf(lcd_yaz,"hw:%s sw:%s"my_device[hw_ver].str,my_device[sw_ver].str);
   
   fprintf(Comm1,"\r\nFiDeNet");
   bekle(t_long);
   set_adc_channel(0);//set the pic to read from analog pins
   bekle(t_mini);
   pot_value=read_adc();
   bekle(25);
   prev_pot_value=pot_value;
   fprintf(Comm1,"\r\npot:%lu"pot_value);
         
   
    //Example blinking LED program
    while(true){
     
      enable_interrupts(INT_RDA);
     
     
     
      set_adc_channel(0);//set the pic to read from analog pins
      bekle(t_mini);
      //once değerleri eşitle sonra yeni değeri oku
      prev_pot_value=pot_value;
     
      pot_value=read_adc();
      bekle(25);
     
     
      prev_sw[0]=sw[0];
      prev_sw[1]=sw[1];
      prev_sw[2]=sw[2];     
      prev_sw[3]=sw[3];
     
      sw[0]=!(input(sw0));
      sw[1]=!(input(sw1));
      sw[2]=!(input(sw2));
      sw[3]=!(input(sw3));
     
     
      //if((prev_sw[0]==0)&&(sw[0]==1)||(prev_sw[1]==0)&&(sw[1]==1)||(prev_sw[2]==0)&&(sw[2]==1)||(prev_sw[3]==0)&&(sw[3]==1))
      if((prev_sw[0]!=sw[0])||(prev_sw[1]!=sw[1])||(prev_sw[2]!=sw[2])||(prev_sw[3]!=sw[3]))
   
      {
         fprintf(Comm1,"\r\nsw:%u%u%u%u"sw[0],sw[1],sw[2],sw[3]);
         //bekle(t_medium);
         lcd_sil();
         adres(1,1);
         printf(lcd_yaz,"sw %u %u %u %u  "sw[0],sw[1],sw[2],sw[3]);
         
     
     
     
      }
      if(prev_pot_value!=pot_value)
      {
         fprintf(Comm1,"\r\npot:%lu"pot_value);
         lcd_sil();
         adres(1,1);
         printf(lcd_yaz,"Pot %lu    "pot_value);
      }
     
      if (line1==1)
      {
            buzzer_on;
            line1=0;
            adres(1,1);
            printf(lcd_yaz,"                  ");
            adres(1,1);
            printf(lcd_yaz,"%s"my_text.dummy_str);
            buzzer_off;
     
      }
      if (line2==1)
      {
            buzzer_on;
            line2=0;
            adres(1,2);
            printf(lcd_yaz,"                   ");
            adres(1,2);
            printf(lcd_yaz,"%s"my_text.dummy_str);
            buzzer_off;
     
      }
      if (line3==1)
      {
            buzzer_on;
            line3=0;
            adres(1,1);
            printf(lcd_yaz,"                  ");
            buzzer_off;
      }
      if (line4==1)
      {
            buzzer_on;
            line4=0;
            adres(1,2);
            printf(lcd_yaz,"                  ");
            buzzer_off;
      }
     
     /*
      if (sw[0]==1)
      {
         l_motor(1,pot_value);
         r_motor(1,pot_value);
      }
      if (sw[1]==1)
      {
         l_motor(2,pot_value);
         r_motor(2,pot_value);
      }
      if (sw[2]==1)
      {
         l_motor(1,0);
         r_motor(1,0);
      }
      if (sw[3]==1)
      {
         l_motor(1,pot_value);
         r_motor(2,pot_value);
      }
     
     
     
      /*
      r_motor_pwm(35);
      l_motor_pwm(35);
     
      hi_x(Pin_d0);
      lo_x(Pin_d1);
      hi_x(Pin_d2);
      lo_x(pin_d3);
     
      bekle(t_long);
     
     
      hi_x(Pin_d0);
      hi_x(Pin_d1);
      hi_x(Pin_d2);
      hi_x(Pin_d3);
      bekle(t_medium);
     
     
      r_motor_pwm(35);
      l_motor_pwm(35);
     
      hi_x(Pin_d1);
      lo_x(Pin_d0);
      hi_x(Pin_d3);
      lo_x(pin_d2);
     
      bekle(t_long);
   
      hi_x(Pin_d0);
      hi_x(Pin_d1);
      hi_x(Pin_d2);
      hi_x(Pin_d3);
      bekle(t_medium);
      */
    }
   

}


def.h içeriği

typedef  int1 u1;
typedef  unsigned int8 u8;
typedef  unsigned int16 u16;
typedef  unsigned int32 u32;

//Uart ayarları
//#use rs232(UART1,baud=9600,parity=N,bits=8,stream=rf_modul)
#use rs232(baud=57600,parity=N,bits=8, xmit=PIN_C6,rcv=PIN_C7,stream=Comm1)
//#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=rf_comm)
//#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_B7)



//Fonksiyon Pin eşleştirme
#define led0(x) output_bit(Pin_B0,x)
#define led1(x) output_bit(Pin_B1,x)
#define led2(x) output_bit(Pin_B2,x)
#define led3(x) output_bit(Pin_B3,x)
#define led4(x) output_bit(Pin_B4,x)
#define led5(x) output_bit(Pin_B5,x)
#define led6(x) output_bit(Pin_B6,x)
#define led7(x) output_bit(Pin_B7,x)



#define bekle(x) delay_ms(x)
#define bekle_ss(x) delay_ms(x)
#define bekle_us(x) delay_us(x)


#define hi_x(x) output_high(x)
#define lo_x(x) output_low(x)
#define x_to(x,y) output_bit(x,y)

const u8 t_mini=5;
const u8  t_short=50;
const u8  t_medium=250;
const u16  t_long=1000;

#define rgb_B Pin_E0
#define rgb_G Pin_E1
#define rgb_R Pin_E2
#define buzzer Pin_A5

#define buzzer_on hi_x(buzzer)
#define buzzer_off lo_x(buzzer)

#define sw0 Pin_A1
#define sw1 Pin_A2
#define sw2 Pin_A3
#define sw3 Pin_A4

             
#define r_motor_pwm(x) set_pwm1_duty(x)
#define r_motor_cw Pin_D0
#define r_motor_ccw Pin_D1

#define l_motor_pwm(x) set_pwm2_duty(x)
#define l_motor_cw Pin_D3
#define l_motor_ccw Pin_D2


func.c içeriği

void r_motor(u8 dir,u8 pwm)
{
   if(dir==1)
   {
      hi_x(r_motor_cw);
      lo_x(r_motor_ccw);
      r_motor_pwm(pwm);
   }
   if(dir==2)
   {
      hi_x(r_motor_ccw);
      lo_x(r_motor_cw);
      r_motor_pwm(pwm);
   
   }
   


}

void l_motor(u8 dir,u8 pwm)
{
   if(dir==1)
   {
      hi_x(l_motor_cw);
      lo_x(l_motor_ccw);
      l_motor_pwm(pwm);
   }
   if(dir==2)
   {
      hi_x(l_motor_ccw);
      lo_x(l_motor_cw);
      l_motor_pwm(pwm);
   
   }
   


}


regs.h içeriği

enum dev_inf{
      dev_id,
      hw_ver,
      sw_ver,
};

typedef struct dev_data{
   u8 type;
   char str[10];

}my_dev_data;

 
my_dev_data const my_device[4]={
      dev_id,{"FDautom1"},
      hw_ver,{"1.00"},
      sw_ver,{"1.01"},
};



u8 sw[4];
//onceki değerleri saklamak için
u8 prev_sw[4];

u16 pot_value;
//onceki pot değeri saklamak için
u16 prev_pot_value;


u1 line1=0;
u1 line2=0;
u1 line3=0;
u1 line4=0;

const u8 max_rda_data=30;
/*
typedef struct motor{
u8 direction;
u8 pwm;
}my_motor;

struct controls{


my_motor l_motor;
my_motor r_motor;
u8 beeper;
u8 led_rgb;
u8 led_port_b;

}my_controls;


*/
struct text_proc{

char rda[max_rda_data];
u8 counter1;
u8 counter2;
u8 counter3;
u8 counter4;
char dummy_str[17];
}my_text;


Başlık: Ynt: 3 Eksenli Robot Kol
Gönderen: fide - 19 Aralık 2017, 09:03:02
vb6 tarafında ise mscomm1.output ile seri port üzerinden veri gönderdim.


Private Sub cmd_l_motor_Click()
Dim speed As Byte
Dim dir As Byte
Dim msg As String

speed = 97 - Slider_l.Value
If opt_l.Value = True Then dir = 1
If opt_r.Value = True Then dir = 2

msg = "ATL" & dir & Chr(speed)
MSComm1.Output = msg
End Sub

Private Sub cmd_lcd_yaz_Click()
Dim msg As String
If opt_line1.Value = True Then
    If txt_line1.Text <> "" Then
        msg = "AT1" & txt_line1.Text
    Else
        msg = "AT3"
    End If
    txt_line1.Text = ""
End If
If opt_line2.Value = True Then
    If txt_line2.Text <> "" Then
        msg = "AT2" & txt_line2.Text
    Else
        msg = "AT4"
    End If
    txt_line2.Text = ""
   
End If

MSComm1.Output = msg



End Sub

Private Sub cmd_led_Click(Index As Integer)
    Dim msg As String
    led(Index) = Not (led(Index))
   
   
    If led(Index) = True Then
   
      Shape1(Index).FillColor = &HC0&
      cmd_led(Index).Caption = "Sondur"
     
      If Index = 0 Then msg = "ATP22222221"
      If Index = 1 Then msg = "ATP22222212"
      If Index = 2 Then msg = "ATP22222122"
      If Index = 3 Then msg = "ATP22221222"
      If Index = 4 Then msg = "ATP22212222"
      If Index = 5 Then msg = "ATP22122222"
      If Index = 6 Then msg = "ATP21222222"
      If Index = 7 Then msg = "ATP12222222"
     
      MSComm1.Output = msg
    Else
     Shape1(Index).FillColor = &HC0C0C0
     cmd_led(Index).Caption = "Yak"
      If Index = 0 Then msg = "ATP22222220"
      If Index = 1 Then msg = "ATP22222202"
      If Index = 2 Then msg = "ATP22222022"
      If Index = 3 Then msg = "ATP2222022"
      If Index = 4 Then msg = "ATP22202222"
      If Index = 5 Then msg = "ATP22022222"
      If Index = 6 Then msg = "ATP20222222"
      If Index = 7 Then msg = "ATP02222222"
     
      MSComm1.Output = msg

End If
   
End Sub


Port açma işlemi

Private Sub cmd_ayarla_Click()
Dim port_nr As Byte
port_nr = Val(cmb_commport.Text)

If port_nr <> 0 Then
    MSComm1.CommPort = port_nr
   
    If MSComm1.PortOpen = True Then
       
        MsgBox "Port zaten Açık"
       
    Else
        MSComm1.PortOpen = True
        MsgBox "Commport " & port_nr & " olarak ayarlandı."
    End If
   
    MSComm1.Output = "ATP00000000"
   
    For i = 0 To 7
        cmd_led(i).Enabled = True
        If i < 3 Then cmd_rgb(i).Enabled = True
    Next i
    cmd_buzzer.Enabled = True
    Timer1.Enabled = True
    cmd_lcd_yaz.Enabled = True

Else
    MsgBox "Lütfen geçerli Port seçin!!!"
End If
End Sub