السلام عليكم
ممكن شرح هذا الكود إلى هذه اللوحة الالكترونية اللي تتحكم في الموتور وسرعة الموتور

Public Class Form1 Dim curChr As UShort Dim MotorON As Boolean Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Control.CheckForIllegalCrossThreadCalls = False ' allow worker thread to update main text field MotorON = False ' Initialize Outputer.RunWorkerAsync() ' Start up the serial output thread '================================================== Dim pwm As UShort Dim val As UShort pwm = 126 Stats.Text = "PWM Val = " + Str(pwm) + " (0x" + Hex(pwm) + ")" curChr = pwm ' Modify the global values that outputer will pick up. MotorON = True '=================================================== End Sub ' HScrollBar1_Scroll ' One of two "meaty" functions in this little program. This is called ' whenever the value of the scrollbar is changed. ' We read the current setting of the scroll bar, compute a PWM value ' with some number of consecutive zero bits, and turn the motor on or ' off if the value has changed to or from zero. ' Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll Dim pwm As UShort Dim val As UShort val = HScrollBar1.Value 'Get current value of the scroll bar 'TextBox1.Text = Str(val) ScrollVal.Text = "ScrollVal = " + Str(val) 'report the value to text field If val = 0 Then ' Has the motor been turned OFF? Stats.Text = "Motor OFF" MotorON = False Else ' The motor is ON. Compute a character value with N consecutive 0 bits ' In theory, we could do up to 8 bits by changing the 127 below to 255, ' but something goes wrong somewhere (sign issues?) and we don't get ' distinct speeds. pwm = (255 << (val - 1)) And 127 Stats.Text = "PWM Val = " + Str(pwm) + " (0x" + Hex(pwm) + ")" curChr = pwm ' Modify the global values that outputer will pick up. MotorON = True End If End Sub Private Sub Stats_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Stats.Click End Sub ' Outputer_DoWork is the other meaty function. This is a separate thread, all it ' does is continuously output the current character value to the serial port ' (assuming the motor is ON.) ' Private Sub Outputer_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Outputer.DoWork SerialPort1.Open() ' open the serial port at the beginning of time. While (True) If MotorON Then If Len(OutString.Text) > 25 Then ' make sure our informational display doesn't get too big OutString.Text = "" End If OutString.Text = OutString.Text + Chr(curChr) ' update out informational display SerialPort1.Write(StrDup(100, Chr(curChr))) ' output to the serial port End If End While End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pwm As UShort Dim val As UShort ' val = HScrollBar1.Value 'Get current value of the scroll bar ' ScrollVal.Text = "ScrollVal = " + Str(val) 'report the value to text field val = 2 If val = 0 Then ' Has the motor been turned OFF? Stats.Text = "Motor OFF" MotorON = False Else ' The motor is ON. Compute a character value with N consecutive 0 bits ' In theory, we could do up to 8 bits by changing the 127 below to 255, ' but something goes wrong somewhere (sign issues?) and we don't get ' distinct speeds. pwm = 126 If Button1.Text = "Stop" Then pwm = 126 : Button1.Text = "Start" : GoTo 500 If Button1.Text = "Start" Then pwm = 0 : Button1.Text = "Stop" 500: REM Stats.Text = "PWM Val = " + Str(pwm) + " (0x" + Hex(pwm) + ")" curChr = pwm ' Modify the global values that outputer will pick up. MotorON = True End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim pwm As UShort Dim val As UShort ' val = HScrollBar1.Value 'Get current value of the scroll bar ' ScrollVal.Text = "ScrollVal = " + Str(val) 'report the value to text field val = 2 If val = 0 Then ' Has the motor been turned OFF? Stats.Text = "Motor OFF" MotorON = False Else ' The motor is ON. Compute a character value with N consecutive 0 bits ' In theory, we could do up to 8 bits by changing the 127 below to 255, ' but something goes wrong somewhere (sign issues?) and we don't get ' distinct speeds. ' pwm = 126 If Button3.Text = "Clockwise" Then pwm = 0 : Button3.Text = "Unti-Clockwise" : GoTo 500 If Button3.Text = "Unti-Clockwise" Then Stats.Text = "Motor OFF" : MotorON = False : Button3.Text = "Clockwise" Exit Sub End If 500: REM Stats.Text = "PWM Val = " + Str(pwm) + " (0x" + Hex(pwm) + ")" curChr = pwm ' Modify the global values that outputer will pick up. MotorON = True End If End Sub End Class