Gönderen Konu: cnc G03-G02 hesaplama  (Okunma sayısı 475 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimiçi ahmettek

  • Teğmen
  • *
  • İleti: 74
  • www.teknolojiekibi.com
cnc G03-G02 hesaplama
« : 31 Ekim 2017, 11:02:16 »

float x_1=0;
float y_1=0;
int cap=0;

float aci=0;
float s_aci=0;
float px=0.0;
float py=0.0;



void setup()
{
Serial.begin(9600);

}
void  loop()
{
 
px=4;//ilk nokta  x deger
py=-5;// son nokta y deger

arc(1,-2,0,3,1);




while(1);//serial ekran devamlı dönmesin diye
}// loop
//noktalrın acıcsını bulma radyan cinsden
float ach(float gx,float gy) {
  float a = atan2(gy,gx);
  if(a<0) a = (PI*2.0)+a;//acı 0 altındaysa konumunu artıya cekiyoruz
  return a;
}
         //son x    son y        I degeri  J degeri  G02-G03-CW-CCW saatt yönü
void arc(float x_son,float y_son,float ii,float j,float yon)
{
float x_merkez=px+ii;//daire veya  yayın merekz x noktası
float y_merkez=py+j;//dairenin veya yayın merkez y noktası
float xx=px-x_merkez;//başlangıc noktasını birim nokyaya
float yy=py-y_merkez;
        float xxs=x_son-x_merkez;//son noktanın birim noktaya
        float yys=y_son-y_merkez;
float aci_1=ach(xx,yy);//ilk noktanın açısı
float aci_2=ach(xxs,yys);//son noktanın açısı
float cap=sqrt(ii*ii+j*j);//daire veya cemberin capı I ve J degerine
                         //hesaplanıyor
if(yon>0)//saat yönün tersi dönüş
{
  if((aci_2-aci_1)!=0)//iki nokta arasında acı varmı yokmu
  {
s_aci=aci_2-aci_1;//iki nokta arasındaki acı
if(s_aci<0)//acı eksi degerdeyse atan2 acının
 //konumunu artı degere cekiyoruz radyan cinsden
{
s_aci=2*3.14+s_aci;

}
  }
if((aci_2-aci_1)==0)//iki nokta arasında acı yoksa tam daire ise
{
s_aci=2*3.14;//birim dairenin radyan cinsden ölçüsü

}


}



if(yon<0)//saat yönüne dönüş
{
  if((aci_1-aci_2)!=0)
  {
s_aci=aci_1-aci_2;
if(s_aci<0)
{

s_aci=2*3.14+s_aci;
}

  }
if((aci_1-aci_2)==0)//tam daire dönüş
{
s_aci=2*3.14;
}


s_aci=-1*s_aci;


}



Serial.print("Aci==");
Serial.println(PI);
for(int i=0;i<=6;i++)//bulunan acıyı bölüyoruz istege bağlı
                    //cok noktaya bölersek daha hassas
{
 aci=i*s_aci/(float)6;
x_1=x_merkez+(cos(aci_1+aci)*cap);//acının x koordinatı deger
y_1=y_merkez+(sin(aci_1+aci)*cap);//acıcının y koordinatı deger
Serial.print("X=");
Serial.println(x_1);
Serial.print("Y=");
Serial.println(y_1);

}




}//fonsiyon son