초보자를 위한 NT-ARSv1 (Attitude Reference System) 보강
* Previously…
초보자를 위한 NT-ARSv1(Attitude Reference System)을 게시했었습니다.
이번에는 NT-ARSv1 (Attitude Reference System)을 좀 더
자유롭게 구동하기 위한 보강 Source를 만들어 보았습니다.
Radian 값과 Degree 값 모두 볼 수 있게 되어 있습니다.
비주얼 베이직에서 MSComm은 PC와 통신Port를 연결하기 위한
장치이며 툴 박스에서 마우스 오른쪽 버튼을
클릭한 후 추가 하시면 됩니다.
NT-ARSv1의 값이 <CAH>값으로 나옵니다.
<CAH>는 RS232모드 데이터 출력 값입니다.
* NT-ARSv1 Source
그럼 상세하게 NT-ARS의 <CAH>각도 값을 출력시키기 위한
비주얼 베이직 6.0 Source를 설명해 드리겠습니다.
Private Sub receive_Click()
receive.Enabled = True
Disconnect.Enabled = True
MSComm1.CommPort = 3
MSComm1.Settings = “115200,n,8,1″
MSComm1.PortOpen = True
MSComm1.Output = “<CAH>”
End Sub
‘받기 버튼을 Click할 경우 수행하게 되는 Source ‘PC와 연결된 통신Port는 CommPort3이고 ARS의 각도 정보를 ‘Port를 열고 NT – ARSv1의 <CAH> 값을 출력한다는 것입니다.
NT – ARSv1의 Radian값을 MSComm1을 이용하여 PC로 받음
NT – ARSv1의 Radian값 : 정수로 구현하기 위하여 NT-ARSv1의 출력 값에 1000을 곱한 값
통신속도 115200bps , None Parity , 8 Data Bit , 1 정지비트로 받습니다.
이렇게 되면 1바이트 문자가 전송될 때 실제 나가는 비트 수는 총 10비트입니다.
시작 1비트 + 데이터 8비트 + 종료 1비트 = 10비트
따라서, 10비트씩 전송되므로 115200bps의 경우 byte로 환산하면
115200/10 이므로 1초당 11520byte가 전송됩니다.
이렇게 계산 해보면 1바이트 문자가 전송되는데는 약 1밀리초가 소요됩니다.
NT – ARSv1의 <CAH> 값은 <Roll, Pitch, Rated Roll, Rated Pitch>의 문자열 값입니다.
Private Sub MSComm1_OnComm()
Dim n As Integer
Dim n0 As Integer
Dim n1 As Integer
Dim n2 As String
Dim n3 As Integer
Dim n4 As String
Const pi = 3.141592
Const deg = 180/pi
If MSComm1.PortOpen = False Then
Exit Sub
End If
Static BUF As String
Static tmpBuf As String
tmpBuf = MSComm1.Input
If tmpBuf = “<” Then
BUF = “”
End If
BUF = BUF & tmpBuf
“<”라면 BUF와 tmpBuf에 들어온 문자열을 결합하여 결합한 문자열을 BUF라는 변수로 다시 저장해준다는 것입니다.
If tmpBuf = “>” Then
Text6.Text = BUF
n0 = InStr(1,BUF, “,”)
If n0 > 0 Then
n1 = NumCheck(Mid(BUF, 2, n0 – 2))
Text2.Text = n1
Text3.Text = Format(n1 / 1000 * deg, “###.#”)
End If
<Roll,..에서 R과 마지막 l까지의 문자를 출력해 준다는 의미입니다.
Text2는 Radian , Text3은 Degree 값의 소수점 한자리 수 까지만 출력하게 나타낸 것입니다.
n = InStr(n0 + 1, BUF, “,”)
If n > 0 Then
n4 = Mid(BUF, 2, n – 2)
Text1.Text = Text1.Text & “<” & n4 & “>” & vbCrLf
‘문자열 BUF에서 2번째 자리부터 n-2개의 문자만 출력해준다는 것입니다. ‘Text1은 Text1의 값을 연속해서 더해주어 Text1의 값이 연속해서 나온다는 것입니다.
여기서는 <Roll,P(←n0+1자리)itch,←지금 나오는 ,의 자리 Number가 되겠네요.
<Roll,Pitch..에서 R과 마지막 h까지의 문자를 출력해 준다는 의미입니다.
If n > 0 Then
n2 = Mid(BUF, n0 + 1, n – n0)
Text4.Text = n2
n3 = NumCheck(Mid(BUF, n0 + 1, n – n0))
Text5.Text = Format(n3 / 1000 * deg, “###.#”)
End If
End If
End If
‘Text5은 Degree 소수점 한자리 수 까지만 출력하게 나타낸 것이다는 것입니다.
Text1.SelStart = Len(Text1.Text) + 1
End Sub
이 Source를 통하여 Text1의 화면에 연속적인 Roll,Pitch값이 나올 수 있는 것입니다.
*비주얼 베이직 6.0 NT-ARSv1 Source