LAMPIRAN CODE PROGRAM ASSEMBLY $mod51 servo1 equ p3.5 servo2 equ p3.3 servo3 equ p1.7 servo4 equ p1.5 servo5 equ p1.3 servo6 equ p1.1 led1 equ p3.4 led2 equ p3.2 led3 equ p3.7 led4 equ p3.6 led5 equ p1.2 led6 equ p1.0 sw equ p2.0 cw1 equ p2.3 ccw1 equ p2.4 cw2 equ p2.5 ccw2 equ p2.6 cw3 equ p2.7 ccw3 equ p0.7 cw4 equ p0.5 ccw4 equ p0.4 cw5 equ p0.3 ccw5 equ p0.2 cw6 equ p0.1 ccw6 equ p0.0 turun1 equ 30h turun2 equ 31h turun3 equ 32h turun4 equ 33h turun5 equ 34h turun6 equ 35h turun7 equ 36h turun8 equ 37h turun9 equ 38h turun10 equ 39h time_servo equ 50h time_servo1 equ 51h time_servo2 equ 52h time_servo3 equ 53h time_servo4 equ 54h time_servo5 equ 55h
time_servo6 equ 56h pakai1 equ 57h pakai2 equ 58h pakai3 equ 59h pakai4 equ 5ah pakai5 equ 5bh pakai6 equ 5ch org 0000h sjmp main org 0030h main: clr led1 clr led2 clr led3 clr led4 clr led5 clr led6 clr servo1 clr servo2 clr servo3 clr servo4 clr servo5 clr servo6 mov scon,#50h mov tmod,#20h mov th1,#-3 mov a,pcon clr 0e7h mov pcon,a setb tr1 ajmp tunggu_serial2 ;--- ;Tunggu terima data dari Serial Port ;--- tunggu_serial1: jb sw,tunggu_serial2a ajmp sw_prog tunggu_serial2: clr ri tunggu_serial2a: jnb ri,tunggu_serial1 mov 40h,sbuf clr ri jnb ri,$
mov 41h,sbuf clr ri jnb ri,$ mov 42h,sbuf clr ri jnb ri,$ mov 43h,sbuf clr ri jnb ri,$ mov 44h,sbuf clr ri jnb ri,$ mov 45h,sbuf clr ri jnb ri,$ mov 46h,sbuf clr ri jnb ri,$ mov 47h,sbuf clr ri jnb ri,$ mov 48h,sbuf clr ri jnb ri,$ mov 49h,sbuf clr ri jnb ri,$ mov 4ah,sbuf clr ri jnb ri,$ mov 4bh,sbuf clr ri jnb ri,$ mov 4ch,sbuf clr ri jnb ri,$ mov 4dh,sbuf clr ri jnb ri,$ mov 4eh,sbuf clr ri jnb ri,$
mov 4fh,sbuf clr ri jnb ri,$ mov 5dh,sbuf clr ri jnb ri,$ mov 5eh,sbuf mov r0,#40h mov r1,#42h acall cek_data mov r0,#43h mov r1,#45h acall cek_data mov r0,#46h mov r1,#48h acall cek_data mov r0,#49h mov r1,#4bh acall cek_data mov r0,#4ch mov r1,#4eh acall cek_data mov r0,#4fh mov r1,#5eh acall cek_data ;---
;Proses memutar Servo ;--- proses_servo: mov pakai1,#0 mov pakai2,#0 mov pakai3,#0 mov pakai4,#0 mov pakai5,#0 mov pakai6,#0 mov turun1,#200 mov turun2,#200 mov turun3,#200 mov turun4,#200 mov turun5,#200
mov turun6,#200 mov turun7,#200 mov turun8,#200 mov turun9,#200 mov turun10,#200 setb servo1
jeda1: inc pakai1
acall delay10us
djnz time_servo1,jeda1
clr servo1
setb servo2
jeda2: inc pakai2
acall delay10us
djnz time_servo2,jeda2
clr servo2
setb servo3
jeda3: inc pakai3
acall delay10us
djnz time_servo3,jeda3
clr servo3
setb servo4
jeda4: inc pakai4
acall delay10us
djnz time_servo4,jeda4
clr servo4
setb servo5
jeda5: inc pakai5
acall delay10us
djnz time_servo5,jeda5
clr servo5
setb servo6
jeda6: inc pakai6
acall delay10us djnz time_servo6,jeda6 clr servo6 clr c mov a,turun1 subb a,pakai1 mov turun1,a
clr c mov a,turun2 subb a,pakai2 mov turun2,a clr c mov a,turun3 subb a,pakai3 mov turun3,a clr c mov a,turun4 subb a,pakai4 mov turun4,a clr c mov a,turun5 subb a,pakai5 mov turun5,a clr c mov a,turun6 subb a,pakai6 mov turun6,a wait_turun1: acall delay10us djnz turun1,wait_turun1 wait_turun2: acall delay10us djnz turun2,wait_turun2 wait_turun3: acall delay10us djnz turun3,wait_turun3 wait_turun4: acall delay10us djnz turun4,wait_turun4 wait_turun5: acall delay10us djnz turun5,wait_turun5 wait_turun6: acall delay10us
djnz turun6,wait_turun6 wait_turun7: acall delay10us djnz turun7,wait_turun7 wait_turun8: acall delay10us djnz turun8,wait_turun8 wait_turun9: acall delay10us djnz turun9,wait_turun9 wait_turun10: acall delay10us djnz turun10,wait_turun10 ajmp tunggu_serial2 ;---
;Proses cek data yang diterima dari Serial Port ;--- cek_data: mov a,@r0 cek_servo1: cjne a,#'1',cek_servo2 lcall cek_arah mov time_servo1,time_servo ret cek_servo2: cjne a,#'2',cek_servo3 lcall cek_arah mov time_servo2,time_servo ret cek_servo3: cjne a,#'3',cek_servo4 lcall cek_arah mov time_servo3,time_servo ret cek_servo4: cjne a,#'4',cek_servo5 lcall cek_arah mov time_servo4,time_servo ret
cek_servo5: cjne a,#'5',cek_servo6 lcall cek_arah mov time_servo5,time_servo ret cek_servo6: cjne a,#'6',bukan_servo lcall cek_arah mov time_servo6,time_servo ret bukan_servo: ret ;--- ;Proses cek arah putaran servo ;--- cek_arah:
mov a,@r1
arah0: cjne a,#'0',arah1
mov time_servo,#175 ret
arah1: cjne a,#'1',arah2
mov time_servo,#165 ret
arah2: cjne a,#'2',arah3
mov time_servo,#155 ret
arah3: cjne a,#'3',arah4
mov time_servo,#145 ret
arah4: cjne a,#'4',arah5
mov time_servo,#135 ret
arah5: cjne a,#'5',arah6
mov time_servo,#125 ret
arah6: cjne a,#'6',arah7
ret
arah7: cjne a,#'7',arah8
mov time_servo,#105 ret
arah8: cjne a,#'8',arah9
mov time_servo,#95 ret
arah9: cjne a,#'9',araha
mov time_servo,#85 ret
araha: cjne a,#'a',arahb
mov time_servo,#75 ret
arahb: cjne a,#'b',arahc
mov time_servo,#65 ret
arahc: cjne a,#'c',bukan_arah mov time_servo,#55 ret
bukan_arah: ret
;---
;Program deteksi switch tanpa komputer PC ;--- sw_prog: mov 60h,#1 mov 61h,#6 mov 62h,#2 mov 63h,#6 mov 64h,#3 mov 65h,#6 mov 66h,#4 mov 67h,#6 mov 68h,#5 mov 69h,#6 mov 6ah,#6 mov 6bh,#6 sw_prog1: jnb sw,cek_cw1
ajmp tunggu_serial2 ;--- cek_cw1:jb cw1,cek_ccw1 setb led1 lcall delay jnb cw1,$ clr led1 mov a,61h cjne a,#12,cek_cw1a ajmp sw_prog2 cek_cw1a: inc 61h ajmp sw_prog2 cek_ccw1: jb ccw1,cek_cw2 setb led1 lcall delay jnb ccw1,$ clr led1 mov a,61h cjne a,#0,cek_ccw1a ajmp sw_prog2 cek_ccw1a: dec 61h ajmp sw_prog2 ;--- cek_cw2: jb cw2,cek_ccw2 setb led2 lcall delay jnb cw2,$ clr led2 mov a,63h cjne a,#12,cek_cw2a ajmp sw_prog2 cek_cw2a: inc 63h ajmp sw_prog2 cek_ccw2: jb ccw2,cek_cw3 setb led2 lcall delay
jnb ccw2,$ clr led2 mov a,63h cjne a,#0,cek_ccw2a ajmp sw_prog2 cek_ccw2a: dec 63h ajmp sw_prog2 ;--- cek_cw3: jb cw3,cek_ccw3 setb led3 lcall delay jnb cw3,$ clr led3 mov a,65h cjne a,#12,cek_cw3a ajmp sw_prog2 cek_cw3a: inc 65h ajmp sw_prog2 cek_ccw3: jb ccw3,cek_cw4 setb led3 lcall delay jnb ccw3,$ clr led3 mov a,65h cjne a,#0,cek_ccw3a ajmp sw_prog2 cek_ccw3a: dec 65h ajmp sw_prog2 ;--- cek_cw4: jb cw4,cek_ccw4 setb led4 lcall delay jnb cw4,$ clr led4 mov a,67h cjne a,#12,cek_cw4a ajmp sw_prog2
cek_cw4a: inc 67h ajmp sw_prog2 cek_ccw4: jb ccw4,cek_cw5 setb led4 lcall delay jnb ccw4,$ clr led4 mov a,67h cjne a,#0,cek_ccw4a ajmp sw_prog2 cek_ccw4a: dec 67h ajmp sw_prog2 ;--- cek_cw5: jb cw5,cek_ccw5 setb led5 lcall delay jnb cw5,$ clr led5 mov a,69h cjne a,#12,cek_cw5a ajmp sw_prog2 cek_cw5a: inc 69h ajmp sw_prog2 cek_ccw5: jb ccw5,cek_cw6 setb led5 lcall delay jnb ccw5,$ clr led5 mov a,69h cjne a,#0,cek_ccw5a ajmp sw_prog2 cek_ccw5a: dec 69h ajmp sw_prog2 ;---
cek_cw6: jb cw6,cek_ccw6 setb led6 lcall delay jnb cw6,$ clr led6 mov a,6bh cjne a,#12,cek_cw6a ajmp sw_prog2 cek_cw6a: inc 6bh ajmp sw_prog2 cek_ccw6: jb ccw6,sw_prog2 setb led6 lcall delay jnb ccw6,$ clr led6 mov a,6bh cjne a,#0,cek_ccw6a ajmp sw_prog2 cek_ccw6a: dec 6bh ajmp sw_prog2 ;--- sw_prog2: mov r0,#60h mov r1,#61h acall cek_dataX mov r0,#62h mov r1,#63h acall cek_dataX mov r0,#64h mov r1,#65h acall cek_dataX mov r0,#66h mov r1,#67h acall cek_dataX mov r0,#68h mov r1,#69h
acall cek_dataX
mov r0,#6ah
mov r1,#6bh
acall cek_dataX ;---
;Proses memutar Servo tanpa komputer PC ;--- proses_servoX: mov pakai1,#0 mov pakai2,#0 mov pakai3,#0 mov pakai4,#0 mov pakai5,#0 mov pakai6,#0 mov turun1,#200 mov turun2,#200 mov turun3,#200 mov turun4,#200 mov turun5,#200 mov turun6,#200 mov turun7,#200 mov turun8,#200 mov turun9,#200 mov turun10,#200 setb servo1
jeda1X: inc pakai1 acall delay10us
djnz time_servo1,jeda1X
clr servo1
setb servo2
jeda2X: inc pakai2
acall delay10us
djnz time_servo2,jeda2X
clr servo2
setb servo3
jeda3X: inc pakai3
acall delay10us
djnz time_servo3,jeda3X
clr servo3
setb servo4
acall delay10us djnz time_servo4,jeda4X
clr servo4
setb servo5
jeda5X: inc pakai5
acall delay10us
djnz time_servo5,jeda5X
clr servo5
setb servo6
jeda6X: inc pakai6
acall delay10us djnz time_servo6,jeda6X clr servo6 clr c mov a,turun1 subb a,pakai1 mov turun1,a clr c mov a,turun2 subb a,pakai2 mov turun2,a clr c mov a,turun3 subb a,pakai3 mov turun3,a clr c mov a,turun4 subb a,pakai4 mov turun4,a clr c mov a,turun5 subb a,pakai5 mov turun5,a clr c mov a,turun6 subb a,pakai6 mov turun6,a wait_turun1X:
acall delay10us djnz turun1,wait_turun1X wait_turun2X: acall delay10us djnz turun2,wait_turun2X wait_turun3X: acall delay10us djnz turun3,wait_turun3X wait_turun4X: acall delay10us djnz turun4,wait_turun4X wait_turun5X: acall delay10us djnz turun5,wait_turun5X wait_turun6X: acall delay10us djnz turun6,wait_turun6X wait_turun7X: acall delay10us djnz turun7,wait_turun7X wait_turun8X: acall delay10us djnz turun8,wait_turun8X wait_turun9X: acall delay10us djnz turun9,wait_turun9X wait_turun10X: acall delay10us djnz turun10,wait_turun10X ajmp sw_prog1 ;---
;Program cek servo tanpa menggunakan Komputer ;---
cek_datax:
mov a,@r0
cek_servo1x:
lcall cek_arahx mov time_servo1,time_servo ret cek_servo2x: cjne a,#2,cek_servo3x lcall cek_arahx mov time_servo2,time_servo ret cek_servo3x: cjne a,#3,cek_servo4x lcall cek_arahx mov time_servo3,time_servo ret cek_servo4x: cjne a,#4,cek_servo5x lcall cek_arahx mov time_servo4,time_servo ret cek_servo5x: cjne a,#5,cek_servo6x lcall cek_arahx mov time_servo5,time_servo ret cek_servo6x: cjne a,#6,bukan_servox lcall cek_arahx mov time_servo6,time_servo ret bukan_servox: ret ;---
;Proses cek arah putaran servo sesuai tombol ;--- cek_arahx: mov a,@r1 arah0x:cjne a,#0,arah1x mov time_servo,#175 ret
arah1x:cjne a,#1,arah2x mov time_servo,#165 ret arah2x:cjne a,#2,arah3x mov time_servo,#155 ret arah3x:cjne a,#3,arah4x mov time_servo,#145 ret arah4x:cjne a,#4,arah5x mov time_servo,#135 ret arah5x:cjne a,#5,arah6x mov time_servo,#125 ret arah6x:cjne a,#6,arah7x mov time_servo,#115 ret arah7x:cjne a,#7,arah8x mov time_servo,#105 ret arah8x:cjne a,#8,arah9x mov time_servo,#95 ret arah9x:cjne a,#9,arahax mov time_servo,#85 ret
arahax: cjne a,#10,arahbx
mov time_servo,#75 ret
arahbx:cjne a,#11,arahcx
mov time_servo,#65 ret
arahcx: cjne a,#12,bukan_arahx mov time_servo,#55 ret
bukan_arahx: ret ;--- ;Subrutin Delay ;--- delay20ms: push 70h push 71h mov 70h,#20 loop20a: mov 71h,#200 loop20b:nop nop nop djnz 71h,loop20b djnz 70h,loop20a pop 71h pop 70h ret delay10us: nop nop nop nop nop nop ret delay: push 70h push 71h mov 70h,#200 loop1: mov 71h,#200 loop: nop nop nop djnz 71h,loop djnz 70h,loop1 pop 71h pop 70h ret end
LAMPIRAN LISTING PROGRAM VISUAL BASIC 1. Listing Program Module
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias _ "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal _
lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias _ "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal _ lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public nSa1 As String Public nSa2 As String Public nSa3 As String Public nSa4 As String Public nSa5 As String Public nSa6 As String Public nSb1 As String Public nSb2 As String Public nSb3 As String Public nSb4 As String Public nSb5 As String Public nSb6 As String
Public INIFileName As String Public pathload As String Public Sub getisistr() Dim iSa1 As String * 20 Dim iSa2 As String * 20 Dim iSa3 As String * 20 Dim iSa4 As String * 20 Dim iSa5 As String * 20 Dim iSa6 As String * 20 Dim iSb1 As String * 20 Dim iSb2 As String * 20 Dim iSb3 As String * 20 Dim iSb4 As String * 20 Dim iSb5 As String * 20 Dim iSb6 As String * 20
'INIFileName = App.Path & "\Template.txt"
'--- Result1 = GetPrivateProfileString("ATAS", "Servo1", "", iSa1, Len(iSa1), INIFileName)
Result2 = GetPrivateProfileString("ATAS", "Servo2", "", iSa2, Len(iSa2), INIFileName)
Result3 = GetPrivateProfileString("ATAS", "Servo3", "", iSa3, Len(iSa3), INIFileName)
Result4 = GetPrivateProfileString("ATAS", "Servo4", "", iSa4, Len(iSa4), INIFileName)
Result5 = GetPrivateProfileString("ATAS", "Servo5", "", iSa5, Len(iSa5), INIFileName)
Result6 = GetPrivateProfileString("ATAS", "Servo6", "", iSa6, Len(iSa6), INIFileName)
Result7 = GetPrivateProfileString("BAWAH", "Servo1", "", iSb1, Len(iSb1), INIFileName)
Result8 = GetPrivateProfileString("BAWAH", "Servo2", "", iSb2, Len(iSb2), INIFileName)
Result9 = GetPrivateProfileString("BAWAH", "Servo3", "", iSb3, Len(iSb3), INIFileName)
Result10 = GetPrivateProfileString("BAWAH", "Servo4", "", iSb4, Len(iSb4), INIFileName)
Result11 = GetPrivateProfileString("BAWAH", "Servo5", "", iSb5, Len(iSb5), INIFileName)
Result12 = GetPrivateProfileString("BAWAH", "Servo6", "", iSb6, Len(iSb6), INIFileName) '--- nSa1 = LCase(tanpaspace(iSa1)) nSa2 = LCase(tanpaspace(iSa2)) nSa3 = LCase(tanpaspace(iSa3)) nSa4 = LCase(tanpaspace(iSa4)) nSa5 = LCase(tanpaspace(iSa5)) nSa6 = LCase(tanpaspace(iSa6)) nSb1 = LCase(tanpaspace(iSb1)) nSb2 = LCase(tanpaspace(iSb2)) nSb3 = LCase(tanpaspace(iSb3)) nSb4 = LCase(tanpaspace(iSb4)) nSb5 = LCase(tanpaspace(iSb5)) nSb6 = LCase(tanpaspace(iSb6)) End Sub
Public Function tanpaspace(ByVal strString As String) As String
Dim i As Integer, nInstr As Integer
Const strVar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_ ,./<>*-" Const strEnc = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_ ,./<>*-" 'PZMQLXKATSFCWUNEMRYHDOBVIJ2098716345' 'PQLAMZXNSKOWIEJDBCVHFURYTG6574839201' If Trim(strString) = "" Then tanpaspace = "" Exit Function End If strString = UCase(strString) tanpaspace = "" For i = 1 To Len(strString)
nInstr = InStr(1, strEnc, Mid(strString, i, 1), vbTextCompare) If nInstr = 0 Then
tanpaspace = tanpaspace + "" Else
tanpaspace = tanpaspace + Mid(strVar, nInstr, 1) End If
Next
End Function
2. Listing Porgram Form 1 Dim urut As Integer
Dim abisload As Boolean Dim jumlahfile As Integer Dim hitfile As Integer
Private Sub Command1_Click()
MSComm1.CommPort = Combo1.Text MSComm1.PortOpen = True urut = 1 Timer1.Enabled = True Command1.Enabled = False Combo1.Enabled = False
End Sub
Private Sub Command108_Click(Index As Integer) Label8(6).Caption = Command108(Index).Caption If Index = 0 Then
Label14(6).Caption = "6,0" ElseIf Index = 1 Then
Label14(6).Caption = "6,1" ElseIf Index = 2 Then
Label14(6).Caption = "6,2" ElseIf Index = 3 Then
Label14(6).Caption = "6,3" ElseIf Index = 4 Then
Label14(6).Caption = "6,4" ElseIf Index = 5 Then
Label14(6).Caption = "6,5" ElseIf Index = 6 Then
Label14(6).Caption = "6,6" ElseIf Index = 7 Then
Label14(6).Caption = "6,7" ElseIf Index = 8 Then
Label14(6).Caption = "6,8" ElseIf Index = 9 Then
Label14(6).Caption = "6,9" ElseIf Index = 10 Then Label14(6).Caption = "6,a" ElseIf Index = 11 Then Label14(6).Caption = "6,b" ElseIf Index = 12 Then Label14(6).Caption = "6,c" End If
End Sub
Private Sub Command18_Click(Index As Integer) Label8(1).Caption = Command18(Index).Caption 'Label14(1).Caption
If Index = 0 Then
Label14(1).Caption = "1,0" ElseIf Index = 1 Then
Label14(1).Caption = "1,1" ElseIf Index = 2 Then
ElseIf Index = 3 Then
Label14(1).Caption = "1,3" ElseIf Index = 4 Then
Label14(1).Caption = "1,4" ElseIf Index = 5 Then
Label14(1).Caption = "1,5" ElseIf Index = 6 Then
Label14(1).Caption = "1,6" ElseIf Index = 7 Then
Label14(1).Caption = "1,7" ElseIf Index = 8 Then
Label14(1).Caption = "1,8" ElseIf Index = 9 Then
Label14(1).Caption = "1,9" ElseIf Index = 10 Then Label14(1).Caption = "1,a" ElseIf Index = 11 Then Label14(1).Caption = "1,b" ElseIf Index = 12 Then Label14(1).Caption = "1,c" End If
End Sub
Private Sub Command2_Click() Dim filetujuan As String
CommonDialog1.Filter = "Text Files (*.txt)|*.txt" CommonDialog1.InitDir = "C:\"
CommonDialog1.ShowSave
If Trim(CommonDialog1.FileName) = "" Then Exit Sub 'Label9.Caption = Trim(CommonDialog1.FileName) INIFileName = App.Path & "\Template.txt"
filetujuan = Trim(CommonDialog1.FileName)
Result1 = WritePrivateProfileString("ATAS", "Servo1", Label8(1).Caption, INIFileName)
Result2 = WritePrivateProfileString("ATAS", "Servo2", Label8(2).Caption, INIFileName)
Result3 = WritePrivateProfileString("ATAS", "Servo3", Label8(3).Caption, INIFileName)
Result4 = WritePrivateProfileString("ATAS", "Servo4", Label8(4).Caption, INIFileName)
Result5 = WritePrivateProfileString("ATAS", "Servo5", Label8(5).Caption, INIFileName)
Result6 = WritePrivateProfileString("ATAS", "Servo6", Label8(6).Caption, INIFileName)
Result7 = WritePrivateProfileString("BAWAH", "Servo1", Label14(1).Caption, INIFileName)
Result8 = WritePrivateProfileString("BAWAH", "Servo2", Label14(2).Caption, INIFileName)
Result9 = WritePrivateProfileString("BAWAH", "Servo3", Label14(3).Caption, INIFileName)
Result10 = WritePrivateProfileString("BAWAH", "Servo4", Label14(4).Caption, INIFileName)
Result11 = WritePrivateProfileString("BAWAH", "Servo5", Label14(5).Caption, INIFileName)
Result12 = WritePrivateProfileString("BAWAH", "Servo6", Label14(6).Caption, INIFileName)
FileCopy INIFileName, filetujuan End Sub
Private Sub Command3_Click()
CommonDialog1.Filter = "Text Files (*.txt)|*.txt" CommonDialog1.InitDir = "C:\"
CommonDialog1.ShowOpen
If Trim(CommonDialog1.FileName) = "" Then Exit Sub Label10.Caption = Trim(CommonDialog1.FileName) INIFileName = Trim(CommonDialog1.FileName) getisistr abisload = True Label8(7).Caption = nSa1 Label8(8).Caption = nSa2 Label8(9).Caption = nSa3 Label8(10).Caption = nSa4 Label8(11).Caption = nSa5 Label8(12).Caption = nSa6 End Sub
Private Sub Command36_Click(Index As Integer) Label8(2).Caption = Command36(Index).Caption If Index = 0 Then
Label14(2).Caption = "2,0" ElseIf Index = 1 Then
Label14(2).Caption = "2,1" ElseIf Index = 2 Then
Label14(2).Caption = "2,2" ElseIf Index = 3 Then
Label14(2).Caption = "2,3" ElseIf Index = 4 Then
Label14(2).Caption = "2,4" ElseIf Index = 5 Then
Label14(2).Caption = "2,5" ElseIf Index = 6 Then
Label14(2).Caption = "2,7" ElseIf Index = 7 Then
Label14(2).Caption = "2,8" ElseIf Index = 8 Then
Label14(2).Caption = "2,8" ElseIf Index = 9 Then
Label14(2).Caption = "2,9" ElseIf Index = 10 Then Label14(2).Caption = "2,a" ElseIf Index = 11 Then Label14(2).Caption = "2,b" ElseIf Index = 12 Then Label14(2).Caption = "2,c" End If
End Sub
Private Sub Command4_Click() abisload = True
If abisload = True Then ' urut = 1 ' Timer2.Enabled = True Label8(1).Caption = nSa1 Label8(2).Caption = nSa2 Label8(3).Caption = nSa3 Label8(4).Caption = nSa4
Label8(5).Caption = nSa5 Label8(6).Caption = nSa6 Label14(1).Caption = nSb1 Label14(2).Caption = nSb2 Label14(3).Caption = nSb3 Label14(4).Caption = nSb4 Label14(5).Caption = nSb5 Label14(6).Caption = nSb6 DoEvents Label10.Caption = "" Label8(7).Caption = "" Label8(8).Caption = "" Label8(9).Caption = "" Label8(10).Caption = "" Label8(11).Caption = "" Label8(12).Caption = "" abisload = False End If End Sub
Private Sub Command5_Click() Form2.Show 1
End Sub
Private Sub Command54_Click(Index As Integer) Label8(3).Caption = Command54(Index).Caption If Index = 0 Then
Label14(3).Caption = "3,0" ElseIf Index = 1 Then
Label14(3).Caption = "3,1" ElseIf Index = 2 Then
Label14(3).Caption = "3,2" ElseIf Index = 3 Then
Label14(3).Caption = "3,3" ElseIf Index = 4 Then
Label14(3).Caption = "3,4" ElseIf Index = 5 Then
ElseIf Index = 6 Then
Label14(3).Caption = "3,6" ElseIf Index = 7 Then
Label14(3).Caption = "3,7" ElseIf Index = 8 Then
Label14(3).Caption = "3,8" ElseIf Index = 9 Then
Label14(3).Caption = "3,9" ElseIf Index = 10 Then Label14(3).Caption = "3,a" ElseIf Index = 11 Then Label14(3).Caption = "3,b" ElseIf Index = 12 Then Label14(3).Caption = "3,c" End If
End Sub
Private Sub Command6_Click() jumlahfile = List1.ListCount hitfile = 1
INIFileName = pathload & List1.List(0) getisistr Label8(7).Caption = nSa1 Label8(8).Caption = nSa2 Label8(9).Caption = nSa3 Label8(10).Caption = nSa4 Label8(11).Caption = nSa5 Label8(12).Caption = nSa6 Label8(1).Caption = nSa1 Label8(2).Caption = nSa2 Label8(3).Caption = nSa3 Label8(4).Caption = nSa4 Label8(5).Caption = nSa5 Label8(6).Caption = nSa6 Label14(1).Caption = nSb1 Label14(2).Caption = nSb2 Label14(3).Caption = nSb3 Label14(4).Caption = nSb4 Label14(5).Caption = nSb5 Label14(6).Caption = nSb6
Label8(7).Caption = "" Label8(8).Caption = "" Label8(9).Caption = "" Label8(10).Caption = "" Label8(11).Caption = "" Label8(12).Caption = "" DoEvents Timer3.Enabled = True End Sub
Private Sub Timer3_Timer() If hitfile <= (jumlahfile - 1) Then
INIFileName = pathload & List1.List(hitfile) getisistr Label8(7).Caption = nSa1 Label8(8).Caption = nSa2 Label8(9).Caption = nSa3 Label8(10).Caption = nSa4 Label8(11).Caption = nSa5 Label8(12).Caption = nSa6 Label8(1).Caption = nSa1 Label8(2).Caption = nSa2 Label8(3).Caption = nSa3 Label8(4).Caption = nSa4 Label8(5).Caption = nSa5 Label8(6).Caption = nSa6 Label14(1).Caption = nSb1 Label14(2).Caption = nSb2 Label14(3).Caption = nSb3 Label14(4).Caption = nSb4 Label14(5).Caption = nSb5 Label14(6).Caption = nSb6 Label8(7).Caption = "" Label8(8).Caption = "" Label8(9).Caption = "" Label8(10).Caption = "" Label8(11).Caption = "" Label8(12).Caption = ""
DoEvents
hitfile = hitfile + 1
ElseIf hitfile > (jumlahfile - 1) Then List1.Clear
Timer3.Enabled = False
End If End Sub
Private Sub Command72_Click(Index As Integer) Label8(4).Caption = Command72(Index).Caption If Index = 0 Then
Label14(4).Caption = "4,c" ElseIf Index = 1 Then
Label14(4).Caption = "4,b" ElseIf Index = 2 Then
Label14(4).Caption = "4,a" ElseIf Index = 3 Then
Label14(4).Caption = "4,9" ElseIf Index = 4 Then
Label14(4).Caption = "4,8" ElseIf Index = 5 Then
Label14(4).Caption = "4,8" ElseIf Index = 6 Then
Label14(4).Caption = "4,7" ElseIf Index = 7 Then
Label14(4).Caption = "4,5" ElseIf Index = 8 Then
Label14(4).Caption = "4,4" ElseIf Index = 9 Then
Label14(4).Caption = "4,3" ElseIf Index = 10 Then Label14(4).Caption = "4,2" ElseIf Index = 11 Then Label14(4).Caption = "4,1" ElseIf Index = 12 Then Label14(4).Caption = "4,0" End If
End Sub
Label8(5).Caption = Command90(Index).Caption If Index = 0 Then
Label14(5).Caption = "5,0" ElseIf Index = 1 Then
Label14(5).Caption = "5,1" ElseIf Index = 2 Then
Label14(5).Caption = "5,2" ElseIf Index = 3 Then
Label14(5).Caption = "5,3" ElseIf Index = 4 Then
Label14(5).Caption = "5,4" ElseIf Index = 5 Then
Label14(5).Caption = "5,5" ElseIf Index = 6 Then
Label14(5).Caption = "5,6" ElseIf Index = 7 Then
Label14(5).Caption = "5,7" ElseIf Index = 8 Then
Label14(5).Caption = "5,8" ElseIf Index = 9 Then
Label14(5).Caption = "5,9" ElseIf Index = 10 Then Label14(5).Caption = "5,a" ElseIf Index = 11 Then Label14(5).Caption = "5,b" ElseIf Index = 12 Then Label14(5).Caption = "5,c" End If
End Sub
Private Sub Form_Load() For i = 1 To 6
Label8(i).Caption = 0
Label14(i).Caption = CStr(i) & ",7" Next i
Combo1.ListIndex = 0 End Sub
Private Sub Timer1_Timer() 'If urut = 1 Then
MSComm1.Output = Label14(1).Caption ' urut = urut + 1
'ElseIf urut = 2 Then
MSComm1.Output = Label14(2).Caption ' urut = urut + 1
'ElseIf urut = 3 Then
MSComm1.Output = Label14(3).Caption ' urut = urut + 1
'ElseIf urut = 4 Then
MSComm1.Output = Label14(4).Caption ' urut = urut + 1
'ElseIf urut = 5 Then
MSComm1.Output = Label14(5).Caption ' urut = urut + 1
'ElseIf urut = 6 Then
MSComm1.Output = Label14(6).Caption ' urut = 1
'End If End Sub
Private Sub Timer2_Timer() If urut = 1 Then
Label8(1).Caption = LCase(nSa1) Label14(1).Caption = LCase(nSb1) Label8(7).Caption = ""
urut = urut + 1 ElseIf urut = 2 Then
Label8(2).Caption = LCase(nSa2) Label14(2).Caption = LCase(nSb2) Label8(8).Caption = ""
urut = urut + 1 ElseIf urut = 3 Then
Label8(3).Caption = LCase(nSa3) Label14(3).Caption = LCase(nSb3) Label8(9).Caption = ""
urut = urut + 1 ElseIf urut = 4 Then
Label8(4).Caption = LCase(nSa4) Label14(4).Caption = LCase(nSb4) Label8(10).Caption = ""
urut = urut + 1 ElseIf urut = 5 Then
Label8(5).Caption = LCase(nSa5) Label14(5).Caption = LCase(nSb5) Label8(11).Caption = ""
urut = urut + 1 ElseIf urut = 6 Then
Label8(6).Caption = LCase(nSa6) Label14(6).Caption = LCase(nSb6) Label8(12).Caption = "" urut = 1 Timer2.Enabled = False End If DoEvents End Sub
3. Listing Porgram Form 2 Private Sub Command1_Click() Form1.List1.Clear If File1.ListCount > 0 Then For i = 0 To File1.ListCount - 1 'File1.ListIndex = i Form1.List1.AddItem File1.List(i) Next i End If pathload = Dir1.Path If Right(pathload, 1) <> "\" Then pathload = pathload & "\" End If
'Form1.Command6.Value = True Unload Me
End Sub
Private Sub Dir1_Change() File1.Path = Dir1.Path pathload = Dir1.Path
If Right(pathload, 1) <> "\" Then pathload = pathload & "\" End If
Label1.Caption = pathload End Sub
Private Sub Drive1_Change()
End Sub
Private Sub Form_Load() Drive1.Drive = "C"
Dir1.Path = Left(Drive1.Drive, 2) & "\" File1.FileName = "*.txt" File1.Path = Dir1.Path If File1.ListCount > 0 Then For i = 0 To File1.ListCount - 1 'File1.ListIndex = i List1.AddItem File1.List(i) Next i End If End Sub
LAMPIRAN PROGRAM CODE MATLAB Lampiran Listing Program
Menu1.m function varargout = Menu1(varargin)
% MENU1 Application M-file for Menu1.fig % FIG = MENU1 launch Menu1 GUI.
% MENU1('callback_name', ...) invoke the named callback.
% Last Modified by GUIDE v2.0 08-Oct-2002 07:22:37 % Latest Modified by FA2 v3.0 20-Nov-2008
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
% Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
try
if (nargout)
[varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else
feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end
%Function untuk tombol masuk ke menu Direct Kinematics
function varargout = Pilih_Direct_Callback(h, eventdata, handles, varargin) Menu21 %buka window menu input direct Kinematics
delete(handles.Menu1) % hapus menu pilihan simulasi (direct atau inverse)
%Function untuk tombol masuk ke menu Inverse Kinematics
function varargout = Pilih_Inverse_Callback(h, eventdata, handles, varargin) Menu31 % buka window menu input inverse Kinematics
Petunjuk % buka window menu petunjuk didepan window input inverse Kinematics delete(handles.Menu1) % hapus menu pilihan simulasi (direct atau inverse)
Menu21.m function varargout = Menu21(varargin)
% MENU1 Application M-file for Menu21.fig % FIG = MENU1 launch Menu21 GUI.
% MENU1('callback_name', ...) invoke the named callback.
% Last Modified by GUIDE v2.5 30-Nov-2008 18:14:31 % Latest Modified by FA2 v3.0 20-Nov-2008
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
% Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; end
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
try
if (nargout)
[varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else
feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); end end
%function untuk memilih salah satu arah pada setiap joint function mutual_exclude(off)
set(off,'value',0)
% jika pilih radio button arah positif untuk joint 1
function varargout = Positif_J1_Callback(h, eventdata, handles, varargin) off = [handles.Negatif_J1];
mutual_exclude(off)
% jika pilih radio button arah negatif untuk joint 1
function varargout = Negatif_J1_Callback(h, eventdata, handles, varargin) off = [handles.Positif_J1];
mutual_exclude(off)
% jika pilih radio button arah positif untuk joint 2
function varargout = Positif_J2_Callback(h, eventdata, handles, varargin) off = [handles.Negatif_J2];
mutual_exclude(off)
% jika pilih radio button arah negatif untuk joint 2
function varargout = Negatif_J2_Callback(h, eventdata, handles, varargin) off = [handles.Positif_J2];
mutual_exclude(off)
% jika pilih radio button arah positif untuk joint 3
function varargout = Positif_J3_Callback(h, eventdata, handles, varargin) off = [handles.Negatif_J3];
mutual_exclude(off)
% jika pilih radio button arah negatif untuk joint 3
function varargout = Negatif_J3_Callback(h, eventdata, handles, varargin) off = [handles.Positif_J3];
mutual_exclude(off)
% jika pilih radio button arah positif untuk joint 4
function varargout = Positif_J4_Callback(h, eventdata, handles, varargin) off = [handles.Negatif_J4];
mutual_exclude(off)
% jika pilih radio button arah negatif untuk joint 4
function varargout = Negatif_J4_Callback(h, eventdata, handles, varargin) off = [handles.Positif_J4];
mutual_exclude(off)
% jika pilih radio button arah positif untuk joint 5
function varargout = Positif_J5_Callback(h, eventdata, handles, varargin) off = [handles.Negatif_J5];
mutual_exclude(off)
% jika pilih radio button arah negatif untuk joint 5
function varargout = Negatif_J5_Callback(h, eventdata, handles, varargin) off = [handles.Positif_J5];
mutual_exclude(off)
% function untuk mem-validasi dan memasukkan sudut dari joint 1 function varargout = Input_J1_Callback(h, eventdata, handles, varargin)
global user_entry_J1
user_entry_J1 = str2double(get(h,'string')); if isnan(user_entry_J1)
errordlg('Masukkan Angka!','Harus Angka','modal') set(h,'string','');
else
if (user_entry_J1 > 90) | (user_entry_J1 < 0)
errordlg('Input Joint 1 tidak boleh lebih dari 90 derajat atau Kurang dari 0 derajat','Batas derajat','modal')
set(h,'string',''); else
if (get(handles.Negatif_J1,'value') == get(handles.Positif_J1,'value')) errordlg('Tentukan dulu arahnya','Arah','modal');
set(h,'string',''); end;
end; end
% function untuk mem-validasi dan memasukkan sudut dari joint 2 function varargout = Input_J2_Callback(h, eventdata, handles, varargin) global user_entry_J2
user_entry_J2 = str2double(get(h,'string')); if isnan(user_entry_J2)
errordlg('Masukkan Angka!','Harus Angka','modal') set(h,'string','');
else
if (user_entry_J2 > 90) | (user_entry_J2 < 0)
errordlg('Input Joint 2 tidak boleh lebih dari 90 derajat atau Kurang dari 0 derajat','Batas derajat','modal')
set(h,'string',''); else
if (get(handles.Negatif_J2,'value') == get(handles.Positif_J2,'value')) errordlg('Tentukan dulu arahnya','Arah','modal');
set(h,'string',''); end;
end; end
% function untuk mem-validasi dan memasukkan sudut dari joint 3 function varargout = Input_J3_Callback(h, eventdata, handles, varargin) global user_entry_J3
user_entry_J3 = str2double(get(h,'string')); if isnan(user_entry_J3)
errordlg('Masukkan Angka!','Harus Angka','modal') set(h,'string','');
else
errordlg('Input Joint 3 tidak boleh lebih dari 90 derajat atau Kurang dari 0 derajat','Batas derajat','modal')
set(h,'string',''); else
if (get(handles.Negatif_J3,'value') == get(handles.Positif_J3,'value')) errordlg('Tentukan dulu arahnya','Arah','modal');
set(h,'string',''); end;
end; end
% function untuk mem-validasi dan memasukkan sudut dari joint 4 function varargout = Input_J4_Callback(h, eventdata, handles, varargin) global user_entry_J4
user_entry_J4 = str2double(get(h,'string')); if isnan(user_entry_J4)
errordlg('Masukkan Angka!','Harus Angka','modal') set(h,'string','');
else
if (user_entry_J4 > 90) | (user_entry_J4 < 0)
errordlg('Input Joint 4 tidak boleh lebih dari 90 derajat atau Kurang dari 0 derajat','Batas derajat','modal')
set(h,'string',''); else
if (get(handles.Negatif_J4,'value') == get(handles.Positif_J4,'value')) errordlg('Tentukan dulu arahnya','Arah','modal');
set(h,'string',''); end;
end; end
% function untuk mem-validasi dan memasukkan sudut dari joint 5 function varargout = Input_J5_Callback(h, eventdata, handles, varargin) global user_entry_J5
user_entry_J5 = str2double(get(h,'string')); if isnan(user_entry_J5)
errordlg('Masukkan Angka!','Harus Angka','modal') set(h,'string','');
else
if (user_entry_J5 > 0) | (user_entry_J5 < 0)
errordlg('Input Joint 5 tidak boleh lebih atau kurang dari 0 derajat','Batas derajat','modal')
set(h,'string',''); else
if (get(handles.Negatif_J5,'value') == get(handles.Positif_J5,'value')) errordlg('Tentukan dulu arahnya','Arah','modal');
end; end; end
% Function bagi tombol reset yang akan menghapus semua input baik arah maupun sudut-sudut joint
function varargout = Reset_Callback(h, eventdata, handles, varargin) set(handles.Negatif_J1,'value',0); set(handles.Positif_J1,'value',0); set(handles.Negatif_J2,'value',0); set(handles.Positif_J2,'value',0); set(handles.Negatif_J3,'value',0); set(handles.Positif_J3,'value',0); set(handles.Negatif_J4,'value',0); set(handles.Positif_J4,'value',0); set(handles.Negatif_J5,'value',0); set(handles.Positif_J5,'value',0); set(handles.Input_J1,'string',''); set(handles.Input_J2,'string',''); set(handles.Input_J3,'string',''); set(handles.Input_J4,'string',''); set(handles.Input_J5,'string','');
% Funtion untuk mengambil input, memproses melalui perhitungan direct Kinematics, lalu hasilnya ditampilkan
function varargout = Kalkulasi_Direct_Callback(h, eventdata, handles, varargin) global user_entry_J1 user_entry_J2 user_entry_J3 user_entry_J4 user_entry_J5 Theta1 Theta2 Theta3 Theta4 Theta5
if isempty(get(handles.Input_J1,'string')) | isempty(get(handles.Input_J2,'string')) | isempty(get(handles.Input_J3,'string')) | isempty(get(handles.Input_J4,'string')) | isempty(get(handles.Input_J5,'string')),
errordlg('Masih ada input yang kurang nih!','Kurang lengkap','modal') else
%Mengambil input untuk Theta1, Theta2, Theta3, Theta4 dan Theta5 if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string'))*-1;
Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))...
& (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
& (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1;
Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'max')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'));
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'max'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string')); Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'max'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))...
& (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1; Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string')); Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'min'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'max'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'))*-1;
Theta2 = str2double(get(handles.Input_J2,'string')); Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics else
if (get(handles.Positif_J1,'value') == get(handles.Positif_J1,'max'))... & (get(handles.Positif_J2,'value') == get(handles.Positif_J2,'min'))... & (get(handles.Positif_J3,'value') == get(handles.Positif_J3,'min'))... & (get(handles.Positif_J4,'value') == get(handles.Positif_J4,'min'))... & (get(handles.Positif_J5,'value') == get(handles.Positif_J5,'min')) Theta1 = str2double(get(handles.Input_J1,'string'));
Theta2 = str2double(get(handles.Input_J2,'string'))*-1; Theta3 = str2double(get(handles.Input_J3,'string'))*-1; Theta4 = str2double(get(handles.Input_J4,'string'))*-1; Theta5 = str2double(get(handles.Input_J5,'string'))*-1;
HitDirect %Function untuk menghitung input direct Kinematics Menu22 %buka menu tampilan hasil perhitungan Direct Kinematics end; end; end; end; end; end; end; end; end; end; end; end; end;
end; end; end; end; end; end; end; end; end; end; end; end; end; end; end; end; end
% Kembali ke menu utama (1) dengan mereset Theta 1 sampai 5 jadi kosong lagi function varargout = Ke_Menu_Utama_Callback(h, eventdata, handles, varargin) Theta1 = [];
Theta2 = []; Theta3 = []; Theta4 = []; Theta5 = [];
Menu1 % buka window menu1
delete(handles.Menu21) % tutup window menu input direct Kinematics HitDirect.m
% HitDirect.m script file untuk menyelesaikan perhitungan Direct Kinematics robot RV-M1
% Deklarasi dari variabel-variabel global
global Theta1 Theta2 Theta3 Theta4 Theta5 t11 t21 t31 t12 t22 t32 t13 t23 t33 t14 t24 t34 t41 t42 t43 t44
% menentukan parameter-parameter berdasarkan konvensi Denavit Hartenberg Alpha1 = 0; Alpha2 = 90; Alpha3 = 0; Alpha4 = 90; Alpha5 = 180; a1 = 100; a2 = 90; a3 = 60; a4 = 60; a5 = 60; d1 = 120; d2 = 40;
d3 = 0; d4 = 0; d5 = 0; Theta1 = Theta1; Theta2 = Theta2; Theta3 = Theta3; Theta4 = Theta4; Theta5 = Theta5;
t14=[];t24=[];t34=[]; % t14 t24 dan t34 diset jadi matriks kosong
% Parameter dimasukkan ke dalam Matriks transformasi homogenous A01 = [cos(Theta1*pi/180) -cos(Alpha1*pi/180)*sin(Theta1*pi/180) sin(Alpha1*pi/180)*sin(Theta1*pi/180) a1*cos(Theta1*pi/180); ... sin(Theta1*pi/180) cos(Alpha1*pi/180)*cos(Theta1*pi/180) -sin(Alpha1*pi/180)*cos(Theta1*pi/180) a1*sin(Theta1*pi/180); ... 0 sin(Alpha1*pi/180) cos(Alpha1*pi/180) d1; ... 0 0 0 1;];
A12 = [cos(Theta2*pi/180) -cos(Alpha2*pi/180)*sin(Theta2*pi/180) sin(Alpha2*pi/180)*sin(Theta2*pi/180) a2*cos(Theta2*pi/180); ... sin(Theta2*pi/180) cos(Alpha2*pi/180)*cos(Theta2*pi/180) -sin(Alpha2*pi/180)*cos(Theta2*pi/180) a2*sin(Theta2*pi/180); ... 0 sin(Alpha2*pi/180) cos(Alpha2*pi/180) d2; ... 0 0 0 1;];
A23 = [cos(Theta3*pi/180) -cos(Alpha3*pi/180)*sin(Theta3*pi/180) sin(Alpha3*pi/180)*sin(Theta3*pi/180) a3*cos(Theta3*pi/180); ... sin(Theta3*pi/180) cos(Alpha3*pi/180)*cos(Theta3*pi/180) -sin(Alpha3*pi/180)*cos(Theta3*pi/180) a3*sin(Theta3*pi/180); ... 0 sin(Alpha3*pi/180) cos(Alpha3*pi/180) d3; ... 0 0 0 1;];
A34 = [cos(Theta4*pi/180) -cos(Alpha4*pi/180)*sin(Theta4*pi/180) sin(Alpha4*pi/180)*sin(Theta4*pi/180) a4*cos(Theta4*pi/180); ... sin(Theta4*pi/180) cos(Alpha4*pi/180)*cos(Theta4*pi/180) -sin(Alpha4*pi/180)*cos(Theta4*pi/180) a4*sin(Theta4*pi/180); ... 0 sin(Alpha4*pi/180) cos(Alpha4*pi/180) d4; ... 0 0 0 1;];
A45 = [cos(Theta5*pi/180) -cos(Alpha5*pi/180)*sin(Theta5*pi/180) sin(Alpha5*pi/180)*sin(Theta5*pi/180) a5*cos(Theta5*pi/180); ... sin(Theta5*pi/180) cos(Alpha5*pi/180)*cos(Theta5*pi/180) -sin(Alpha5*pi/180)*cos(Theta5*pi/180) a5*sin(Theta5*pi/180); ... 0 sin(Alpha5*pi/180) cos(Alpha5*pi/180) d5; ... 0 0 0 1;];
T05 = (A01*A12*A23*A34*A45); % perkalian matriks transformasi homogenous 4x4 untuk 5 joint
% komponen T05 disimpan pada variabel t(ij)
% Matriks rotasi 3x3 ditampilkan jika lebih besar atau sama dengan |0.001| --> (1e-3) % Jika lebih kecil dari |0.001| maka komponen matriks rotasi dianggap nol.
if abs(T05(1,1)) < 1e-3 t11 = 0; else t11 = (T05(1,1)); end if abs(T05(2,1)) < 1e-3 t21 = 0; else t21 = (T05(2,1)); end if abs(T05(3,1)) < 1e-3 t31 = 0; else t31 = (T05(3,1)); end if abs(T05(1,2)) < 1e-3 t12 = 0; else t12 = (T05(1,2)); end if abs(T05(2,2)) < 1e-3 t22 = 0; else t22 = (T05(2,2)); end if abs(T05(3,2)) < 1e-3 t32 = 0; else t32 = (T05(3,2)); end if abs(T05(1,3)) < 1e-3 t13 = 0; else t13 = (T05(1,3)); end
if abs(T05(2,3)) < 1e-3 t23 = 0; else t23 = (T05(2,3)); end if abs(T05(3,3)) < 1e-3 t33 = 0; else t33 = (T05(3,3)); end
% matriks posisi 3x1 dibulatkan kebawah 'fix' (bilangan dibelakang koma dihilangkan) t14 = fix(T05(1,4)); t24 = fix(T05(2,4)); t34 = fix(T05(3,4)); % matriks perspektif 1x3 t41 = (T05(4,1)); t42 = (T05(4,2)); t43 = (T05(4,3)); % matriks penskalaan 1x1 t44 = (T05(4,4)); MENU22.M function varargout = Menu22(varargin)
% MENU22 Application M-file for Menu22.fig % FIG = MENU22 launch Menu22 GUI.
% MENU22('callback_name', ...) invoke the named callback.
% Last Modified by GUIDE v2.0 27-Dec-2002 09:50:56 % Latest Modified by FA2 v3.0 20-Nov-2008
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
% Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig);
guidata(fig, handles);
global t11 t21 t31 t12 t22 t32 t13 t23 t33 t14 t24 t34 t41 t42 t43 t44 %Hasil berupa matriks rotasi 3 x 3 (untuk posisi dan orientasi) set(handles.t11,'string',t11) set(handles.t21,'string',t21) set(handles.t31,'string',t31) set(handles.t12,'string',t12) set(handles.t22,'string',t22) set(handles.t32,'string',t32)