EnableY = 0; delay_us(2000); {
} } }
} else if(Zdir == 0) {
if(Zdir ==1) } {
if (mode == 2) PulseY = 0;
} if (p6==50) DDRB.4 = 0;
if (PINC.3==1) { DDRB.5 = 0;
} PORTC=0x00;
UCSRB=0x98; { GSelect = 7;
UCSRC=0x06; switch(gcode[j]) k = j + 1;
UBRRH=0x00; { delay_ms(50);
break; charReceived = 0;
a=b=i=j=k=uu=vv=ww=xx=0;
case 'Y': Konversi data ke integer
GSelect=0;
GSelect = 3; GNum = atoi(GMode); //atoi adalah
x=XTotal=YTotal=ZTotal=0; array to integer, nilai array diubah ke
k = j + 1; integer
z = 0;
delay_ms(50); MNum = atoi(MMode);
Aktif =1;
break; XNew = atoi(GX);
NonAktif=0;
case 'Z': YNew = atoi(GY);
MaxRegister = 65536;
GSelect = 4; ZNew = atoi(GZ);
iterasi_linear = MaxRegister;
k = j + 1; RADIUS = atoi(GR);
iterasi_circular = 1.57 * MaxRegister;
delay_ms(50); GFeed = atoi(GF);
#asm("sei")
break; SNum = atoi(SMode);
i=0;
\
Program Parsing
case 'R': XTotal=XTotal+XNew;
while (1)
GSelect = 5; YTotal=YTotal+YNew;
{
k = j + 1; ZNewABS = abs(ZNew - ZOld);
i=j=k=GSelect=0;
delay_ms(50); Program Sumbu Z
XNew = YNew = XOld = YOld = ZNew
= ZOld= 0; break; if(ZNew > 0) Zmaju = 1;
{ GSelect = 6; if(ZNewABS != 0 )
delay_ms(100); A = 0; }
C = 1; A = 0; {
goto getout; B = 0; A = 0;
} C = 0; B = 0;
{ startx =0 ;
pkx=pky=qkx=qky=dpy=dpx=0;
if(GNum == 0) starty =0;
}
{ akhirx= XNew/0.02;
else if(XNew > XOld && YNew > YOld)
// x+ y+ if(EMG==1){goto skipfinish;} akhiry= YNew/0.02;
} pkx=pky=qkx=qky=dpy=dpx=0; { pkx = 0;
else if(XNew < XOld && YNew < YOld) } pky = RADIUS/0.02;
// x- y-
if(GNum == 1) mode = 1 ;
{
{ DirectionX=1; //ccw
pkx = RADIUS/0.02;
if(EMG==1){goto skipfinish;} DirectionY=0; } //ccw
pky = 0;
startx =0 ; if ( akhirx < 0 && akhiry > 0 ) //
mode = 4 ; Kuadran2 X-Y+
starty =0;
DirectionX=1; { pkx = RADIUS/0.02;
akhirx= XNew/0.02;
DirectionY=0; pky = 0;
akhiry= YNew/0.02;
if(EMG==1){goto skipfinish;} mode = 2 ;
pkx = akhirx - startx ;
CircularInterpolation(GFeed);
DirectionX=1; //
pky = akhiry - starty ;
if(EMG==1){goto skipfinish;}
DirectionY=1;}
pkx=pky=qkx=qky=dpy=dpx=0;
if ( akhirx > 0 && akhiry < 0 ) //
if(EMG==1){goto skipfinish;}
} Kuadran4 X+Y-
LinearInterpolation(GFeed);
XOld = XNew; { pkx = RADIUS/0.02;
if(EMG==1){goto skipfinish;}
YOld = YNew; pky = 0;
XNew = YNew = 0;
XTotal=0; mode = 2 ;
pkx=pky=qkx=qky=dpy=dpx=0;
YTotal=0; DirectionX=0;
}
delay_ms(100); DirectionY=0;}
if(GNum == 2) //Circular CW
} } } } }
if(EMG==1){goto skipfinish;} DirectionY=1; } else if(GSelect == 6) GF[j - k] =
gcode[j];
CircularInterpolation(GFeed); =if (akhirx < 0 && akhiry < 0 ) //
Kuadran4 X-Y- else if(GSelect == 7) MMode[j - k] =
if(EMG==1){goto skipfinish;} gcode[j];
{ pkx = RADIUS/0.02;
XNew = YNew = 0; else if(GSelect == 8) SMode[j - k] =
pky = 0; gcode[j];
RADIUS = 0;
mode = 4 ; break;
pkx=pky=qkx=qky=dpy=dpx=0;
DirectionX=1; }
}
DirectionY=0;} j++;
if(GNum == 3) //Circular CCW
if(EMG==1){goto skipfinish;} }
{
CircularInterpolation(GFeed); skipfinish:
if(EMG==1){goto skipfinish;}
if(EMG==1){goto skipfinish;} if (EMG==1)
startx =0 ;
XNew = YNew = 0; {charReceived = 1;
starty =0;
RADIUS = 0; #asm("sei") }
akhirx= XNew/0.02;
pkx=pky=qkx=qky=dpy=dpx=0;
akhiry= YNew/0.02;
PulseX=PulseY=PulseZ=EnableX=Enab
} }
pkx = akhirx - startx ; leY=EnableZ=0;
getout:
pky = akhiry - starty ; s = 0;
memset(GMode, 0, sizeof(GMode));
if ( akhirx < 0 && akhiry > 0) // m = 0;
Kuadran2 X-Y+ memset(GX, 0, sizeof(GX));
rx_wr_index = 0;
{ pkx = 0; memset(GY, 0, sizeof(GY));
//tx_wr_index=0;
pky = RADIUS/0.02; memset(GZ, 0, sizeof(GZ));
memset(gcode, 0, sizeof(gcode));
mode = 3 ; memset(GR, 0, sizeof(GR));
memset(MMode, 0, sizeof(MMode));
DirectionX=1; memset(MMode, 0, sizeof(MMode));
memset(SMode, 0, sizeof(SMode));
DirectionY=1;} delay_ms(100);
charReceived = 0;
if ( akhirx > 0 && akhiry < 0 ) // charReceived = 1;
XNew = YNew = XOld = YOld = 0;
Kuadran4 X+Y-
#asm("sei")
EMG=0;
{ pkx = 0;
break;
delay_ms(200);
pky = RADIUS/0.02;
default:
}
mode = 3 ;
if(GSelect == 1)GMode[j - k] =
else if(charReceived == 0)
DirectionX=0; gcode[j];
{
DirectionY=0;} else if(GSelect == 2) GX[j - k] =
gcode[j]; PORTC.1 = 1; // LAMPU STANDBY
if ( akhirx > 0 && akhiry > 0) //
KUNING
Kuadran1 X+Y+ else if(GSelect == 3) GY[j - k] =
gcode[j]; PORTC.0 = 0; //LAMPU RUN HIJAU
{ pkx = RADIUS/0.02;
else if(GSelect == 4) GZ[j - k] = PORTC.2 = 0; //LAMPU EMG
pky = 0; gcode[j];
memset(gcode, 0, sizeof(gcode));
mode = 4 ; else if(GSelect == 5) GR[j - k] =
gcode[j]; memset(MMode, 0, sizeof(MMode));
DirectionX=0;
memset(SMode, 0, sizeof(SMode));
} putarZ(ztot, 1); if(p10 == 50)
Program HomePost {
{ pkx = xtot/0.02; }
p11=p11+1;
putsf("XB0YF1ZF0");
if(p11 == 50)
YTotal = YTotal + 1;
delay_us(500);
PulseY = 0;
delay_us(500);
memset(gcode, 0, sizeof(gcode));
DirectionY=0;
EnableY = 1;
PulseY = 1;
p11=p11+1;
putsf("XB0YB1ZF0");
if(p12 == 50)
YTotal = YTotal - 1;
delay_us(500);
PulseY = 0;
delay_us(500);
PulseX = 0;
PulseY = 0;
PulseZ = 0;
EnableX = 0;
EnableY = 0;
EnableZ = 0;