출처: '땜스 전자연구소' 블로그
아직 미완성이긴 하지만 땜스 전자연구소에서 설명한대로 GUI 설계를 해보았다.
코드가 완전히 이해되진 않아서 어느정도 수정도 하긴 하였다.
위 사진은 Visual studio 프로그램을 이용해 GUI 디자인을 설계한 것이다.
아직 완성본은 아니지만 약 80%정도 완성 되었다.
각 컨트롤 별로 구분하기 쉽게 이름을 설정해주었다.
Private Sub ComboBox_SerialPort_COM_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_SerialPort_COM.SelectedIndexChanged
If (ComboBox_SerialPort_COM.SelectedIndex = 0) Then
SerialPort_COM.PortName = "COM2"
ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 1) Then
SerialPort_COM.PortName = "COM3"
ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 2) Then
SerialPort_COM.PortName = "COM4"
ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 3) Then
SerialPort_COM.PortName = "COM5"
ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 4) Then
SerialPort_COM.PortName = "COM6"
ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 5) Then
SerialPort_COM.PortName = "COM7"
ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 6) Then
SerialPort_COM.PortName = "COM8"
ElseIf (ComboBox_SerialPort_COM.SelectedIndex = 7) Then
SerialPort_COM.PortName = "COM9"
End If
End Sub 입력하세요
위 코드는 COM포트 부분 옆에 콤보상자가 변하면 그에 따라서 내부적으로 COM2, COM3 등등..이 선택 되게끔 하는 코드이다.
Private Sub ComboBox_SerialPort_Baudrate_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox_SerialPort_Baudrate.SelectedIndexChanged
If (ComboBox_SerialPort_Baudrate.SelectedIndex = 0) Then
SerialPort_COM.BaudRate = 38400
ElseIf (ComboBox_SerialPort_Baudrate.SelectedIndex = 1) Then
SerialPort_COM.BaudRate = 57600
ElseIf (ComboBox_SerialPort_Baudrate.SelectedIndex = 2) Then
SerialPort_COM.BaudRate = 115200
End If
End Sub
Baudrate도 위와 비슷하게 해주었다.
Private Sub Button_Comm_Port_Open_Close_Click(sender As Object, e As EventArgs) Handles Button_SerialPort_Open_Close.Click
If (Flag_SerialPort_Open_Close = False) Then
Flag_SerialPort_Open_Close = True
Try
SerialPort_COM.Open()
Button_SerialPort_Open_Close.Text = "통신포트 닫기"
Button_Bootloader_Connection.Enabled = True
Catch ex As Exception
End Try
ElseIf (Flag_SerialPort_Open_Close = True) Then
Flag_SerialPort_Open_Close = False
Button_SerialPort_Open_Close.Text = "통신포트 열기"
SerialPort_COM.Close()
End If
End Sub
잘 보면 통신포트열기 버튼이 있을 것이다. 통신포트열기 버튼을 누르면 통신포트 닫기로 text가 바뀌게끔 설정하였고 serialport.open 및 close 함수를 통해 포트를 연결 및 해제 할 수 있다.
잘못된 포트를 골랐을 시 예외가 발생하면서 프로그램이 닫히기 때문에 그 부분을 방지하기 위해 Try catch 구문을 통해 그를 방지하였다.
Private Sub Button_MCU_Connection_Click(sender As Object, e As EventArgs) Handles Button_Bootloader_Connection.Click
Button_Bootloader_Connection.Enabled = False
Button_SerialPort_Open_Close.Enabled = False
SerialPort_COM.Write(Arr_Enable_Command, 0, 1)
End Sub
연결 확인 버튼을 누르면 0x7F 명령어를 MCU에 읽히게 하였다.
Arr_Enable_Command를 0x7F로 선언해주었다.
Private Sub Button_Bootloader_Version_Click(sender As Object, e As EventArgs) Handles Button_Bootloader_Version.Click
SerialPort_COM.Write(Arr_Version_Command, 0, 2)
Timer_Bootloader_Version.Enabled = True
GroupBox_Step3.Enabled = True
Button_Bootloader_Version.Enabled = False
End Sub
또한 Bootloader 버전을 보이게 하였고 각 버튼을 누를 때마다 다음 단계로 진행할 수 있게 disable 되어있던 그룹박스들은 Enable 해주었다.
여기까지가 간략하게 코드를 분석 및 수정한 것이고 다음 포스팅에서 이어서 분석 및 수정을 하겠다.