⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmservo.frm

📁 16路舵机控制程序。可以同时控制16个舵机
💻 FRM
📖 第 1 页 / 共 3 页
字号:
' **          by Zhai Zhongwu              **
' **                                       **
' *******************************************


'API函数声明:
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Sub CmdAll_Click()


    Running = True
    
    Dim i As Integer
    Dim j As Integer



    For i = 0 To steps2 - 1
        For j = 0 To 15
                  
                sldServo(j).Value = posData2(i, j)
               
        Next j
        
        Call Delay(intTime)
                         
    Next i
    
    
    CmdIns.Enabled = False
    CmdInp.Enabled = False

    Running = False
    
End Sub

'*****************************************
'将单个伺服电机置零位
'*****************************************

Private Sub cmdCenter_Click(Index As Integer)

    sldServo(Index).Value = 127
    
End Sub

Private Sub Ext_Click()

    Pause = False
    Run = True
    
    ctrMSComm.PortOpen = False
    Unload Me
    
End Sub



Private Sub CmdExt_Click()
   
    Pause = False
    Run = True
    
    ctrMSComm.PortOpen = False
    Unload Me
    
End Sub

Private Sub CmdInp_Click()

    Dim j As Integer
    
    For j = 0 To 15
        sldServo(j).Value = Val(Trim(txtServo(j).Text))
    Next j

    
    CmdIns.Enabled = True
    CmdInp.Enabled = False

End Sub

Private Sub CmdIns_Click()

    CmdAll.Enabled = True
    Dim j As Integer
    
    For j = 0 To 15
    
        posData2(steps2, j) = Val(Trim(txtServo(j).Text))
        sldServo(j).Value = posData2(steps2, j)
            
    Next j

    steps2 = steps2 + 1

    CmdIns.Enabled = False
    CmdInp.Enabled = False


End Sub

Private Sub Command1_Click()

    ServoIni.Show
    ServoIni.CmdCancel.Enabled = True
    
    Dim i As Integer
    
    For i = 0 To 15
        ServoIni.ServoName(i).Text = SvoName(i)
        ServoIni.Min(i).Text = SvoMin(i)
        ServoIni.Max(i).Text = SvoMax(i)
        ServoIni.Text1(i).Text = SvoPos(i)
    Next i
    
    

End Sub

Private Sub Command2_Click()

    Dim j As Integer
    
    
    If Running = False Then
        '伺服电机位置初始化
        For j = 0 To 15
            sldServo(j).Value = 127
        Next j
    Else
        MsgBox ("正在运行中,不能置零位!")
    End If
    
End Sub

'*****************************************
'窗体加载时,对各种参数进行初始化
'*****************************************

Private Sub Form_Load()
    On Error Resume Next
    
    Dim j As Integer
    
    '初始化串行口,默认使用端口com1、"9600,n,8,1"、延时300毫秒
    intPort = 1
    strSet = "9600,N,8,1"
    intTime = 300
    
    
    
    '单步执行步数
    steps2 = 0
    
    
    
    '若串口已经打开,则关闭。设置串口参数时,要确保串口关闭。
    If ctrMSComm.PortOpen = True Then
        ctrMSComm.PortOpen = False
    End If
      
    '设置串口号和通信参数
    ctrMSComm.CommPort = intPort
    ctrMSComm.Settings = strSet
  
    '打开串口资源
    ctrMSComm.PortOpen = True
    
    
    start.Show
    Delay (1500)
    Unload start
    
       
    
    '调出伺服电机参数表,进行初始化
    ServoIni.Show
    Run = False          '确定各种参数后,方可往下执行
    While Run = False
    DoEvents
    Wend

    For j = 0 To 15
        sldServo(j).Value = Val(Trim(txtServo(j).Text))
    Next j
    
   
End Sub

'*****************************************
'退出时,一定要关闭串口
'*****************************************

Private Sub Form_Unload(cancel As Integer)
    On Error Resume Next
    
    Pause = False
    Run = True
    ctrMSComm.PortOpen = False

End Sub



Private Sub MNU_Config_PrtSetting_Click()

    PauseCopy = Pause
    Pause = True
    PauseCom.Visible = False
    
    
    config.Show
    config.Port.Text = Str(intPort)
    config.setting.Text = strSet
    config.time.Text = Str(intTime)

End Sub

Private Sub MNU_Config_ServosIni_Click()
    Dim j As Integer
    
    
    If Running = fales Then
        '伺服电机位置初始化
        For j = 0 To 15
            sldServo(j).Value = 127
        Next j
    Else
        MsgBox ("正在运行中,不能置零位!")
    End If
        
End Sub

'*****************************************
'退出菜单
'*****************************************

Private Sub MNU_File_Exit_Click()
    
    Pause = False
    Run = True
    
    ctrMSComm.PortOpen = False
    Unload Me
       
End Sub


Private Sub MNU_Help_Click()
    
    PauseCopy = Pause
    Pause = True
    PauseCom.Visible = False
       
    frmAbout.Show 1, Me
    
End Sub

Private Sub OnceMore_Click()
    
    Running = True
    Pause = False
    
    PauseCom.Caption = "暂停"
    PauseCom.Enabled = True
    
    Call GoOn
    
    Running = False
    
End Sub

Private Sub open_Click()
    
    Running = True
    Pause = False
    PauseCom.Caption = "暂停"
    
    PauseCom.Enabled = True
    
    
    Dim tmpStr As String
    Dim i As Integer
    Dim j As Integer
    Dim Heads() As String
    
    CommonDialog1.ShowOpen
    strFileName = CommonDialog1.FileTitle
    strFileDirectary = CommonDialog1.FileName
    txtSend1.Text = strFileDirectary
    
    
    If strFileDirectary <> "" Then
    
    '将数据文件的数据读入到二维数组 posDataposData(1 To 255, 0 To 15)
    Open strFileDirectary For Input As #1

    Line Input #1, tmpStr
    tmpStr = Trim(tmpStr)
    steps = CInt(tmpStr)

    'ReDim posData(1 To steps, 0 To 15)


    For i = 0 To steps - 1

        Line Input #1, tmpStr
        tmpStr = Trim(tmpStr)
        
        Do While InStr(tmpStr, "  ") > 0
            tmpStr = Replace(tmpStr, "  ", " ")
        Loop
        
        Heads = Split(tmpStr)
        
        For j = 0 To 15
             posData(i, j) = CInt(Heads(j))
        Next j
                         
    Next i
    
    
    Close #1
    
    End If
    
    
    
    Call GoOn
    
    Running = False
    
     
End Sub

Private Sub PauseCom_Click()

    If PauseCom.Caption = "暂停" Then
        Pause = True
        PauseCom.Caption = "继续"
    Else
        Pause = False
        PauseCom.Caption = "暂停"
       
    End If
    

End Sub


Private Sub sldServo_Change(Index As Integer)
    On Error Resume Next
    
    
    txtServo(Index).Text = Str(sldServo(Index).Value)
    
 
    Dim Buffer As Variant
    Dim ByteArray() As Byte
    ReDim ByteArray(0 To 2)

    ByteArray(0) = 255                          '发送的第一字节,同步字节(0xff)
    ByteArray(1) = Index                        '发送的第二字节,伺服电机号(1~16),对应Index号(0~15)
    ByteArray(2) = sldServo(Index).Value        '发送的第三字节,位置参数(0~254)
        
    Buffer = ByteArray
    
    
    ctrMSComm.OutBufferCount = 0
    ctrMSComm.Output = Buffer
    ctrMSComm.InBufferCount = 0

      
End Sub
Private Sub sldServo_Scroll(Index As Integer)

    sldServo_Change (Index)
    
End Sub
'延时函数
Public Sub Delay(PauseTime As Double)
     
    Dim start As Double
    start = timeGetTime                             '记下开始时间

    While timeGetTime < start + PauseTime           '循环等待
    DoEvents                                        '转让控制权,以便让操作系统处理其它的事件。
    Wend

End Sub

Public Sub GoOn()

    Dim i As Integer
    Dim j As Integer

    PauseCom.Enabled = True
    Pause = False
    OnceMore.Enabled = False
    For j = 0 To 15
            cmdCenter(j).Enabled = False
    Next j
    
    
    

   '根据文件输入的数据,实现所有伺服电机的联动
    For i = 0 To steps - 1
    
    
        While Pause <> False
        DoEvents
        Wend
        
        For j = 0 To 15
                  
                sldServo(j).Value = posData(i, j)
                
               
        Next j
        
        Call Delay(intTime)
                         
    Next i
    
    
    OnceMore.Enabled = True
    PauseCom.Enabled = False
    
    
    For j = 0 To 15
            cmdCenter(j).Enabled = True
    Next j
   

End Sub

Private Sub txtServo_Change(Index As Integer)

    '显示屏中的数字发生改变,才允许出入操作
    CmdIns.Enabled = True
    CmdInp.Enabled = True
    
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -