Public Class Form1 Dim Desen As Graphics Dim Creion_rosu As Pen Dim Creion_albastru As Pen Dim Creion_gri As Pen Dim Creion_pic As Pen Dim Pens_r As SolidBrush Dim Pens_v As SolidBrush Dim Pens_pic As SolidBrush Dim font_nina As Font Dim date_r(11) As String REM Date receptionate Dim date_c(11) As String REM Date check - verificate daca sunt ok Dim com_r(11) As String REM Comenzi remore Dim com_c(11) As String REM Comenzi remore check - verificate daca sunt ok Dim delimiter(11) As Char Dim led(10) As Integer REM led-urile l1-l8 Dim but(10) As Integer REM buroanele B1-B8 Dim remote As Integer REM semafor care indica daca avem comanda locala sau remote Public Sub Termo(ByVal x0 As Integer, ByVal y0 As Integer, ByVal w As Integer, ByVal h As Integer, ByVal val_m As Integer, ByVal val As Integer) Dim j As Integer REM desenez contur termometru Desen.DrawRectangle(Creion_albastru, x0, y0, w, h) REM desenez gradatii For j = 0 To h Step 5 If j Mod 25 = 0 Then Desen.DrawLine(Creion_gri, x0 + w + 2, y0 + j, x0 + w + 12, y0 + j) Desen.DrawString(System.Convert.ToString(val_m - j * val_m / h), font_nina, Pens_r, x0 + w + 20, y0 + j - 7) Else Desen.DrawLine(Creion_gri, x0 + w + 2, y0 + j, x0 + w + 7, y0 + j) End If Next j REM afisaare bara termometru Desen.FillRectangle(Pens_pic, x0 + 1, y0 + 1, w - 1, h - 2) Desen.FillRectangle(Pens_r, x0 + 1, h + y0 - val, w - 1, val) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Desen = Me.CreateGraphics() Creion_rosu = New Pen(Brushes.Red, 1) Creion_albastru = New Pen(Brushes.Blue, 1) Creion_gri = New Pen(Brushes.Gray, 1) Creion_pic = New Pen(Me.BackColor, 1) Pens_r = New SolidBrush(Color.Red) Pens_v = New SolidBrush(Color.LightGreen) Pens_pic = New SolidBrush(Me.BackColor) font_nina = New Font("Nina", 8) Desen.Clear(Me.BackColor) If Not Me.SerialPort1.IsOpen() Then Me.SerialPort1.Open() Me.Label1.Text = "Portul a fost deschis" Else Me.Label1.Text = "Portul este deja deschis deschis" End If Me.SerialPort1.Write("M1,0") Dim delimStr As String delimStr = " ,.:\t" delimiter = delimStr.ToCharArray() REM Initializare vectori led, but, date_r si date_c date_r = "0,0,0,0,0,0,0,0,0,0,0".Split(delimiter) date_c = "0,0,0,0,0,0,0,0,0,0,0".Split(delimiter) com_r = "0,0,0,0,0,0,0,0,0,0,0".Split(delimiter) com_c = "0,0,0,0,0,0,0,0,0,0,0".Split(delimiter) Dim j As Integer For j = 1 To 8 led(j) = 0 but(j) = 0 Next j End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim cda, txt As String Dim val_cmd, suma As Integer Dim val_l As Integer Dim val_max, inalt, val_t, j As Integer Dim adr As String Dim com_t As String REM starea comutatoarelor sub forma de text If Not Me.SerialPort1.IsOpen() Then Me.SerialPort1.Open() End If If Me.RadioButton1.Checked Then remote = 0 Me.Label10.Text = "Local control" If Me.CheckBox1.Checked Then led(0) = 1 Else led(0) = 0 End If If Me.CheckBox2.Checked Then led(1) = 1 Else led(1) = 0 End If If Me.CheckBox3.Checked Then led(2) = 1 Else led(2) = 0 End If If Me.CheckBox4.Checked Then led(3) = 1 Else led(3) = 0 End If If Me.CheckBox5.Checked Then led(4) = 1 Else led(4) = 0 End If If Me.CheckBox6.Checked Then led(5) = 1 Else led(5) = 0 End If If Me.CheckBox7.Checked Then led(6) = 1 Else led(6) = 0 End If If Me.CheckBox8.Checked Then led(7) = 1 Else led(7) = 0 End If val_cmd = 128 * led(7) + 64 * led(6) + 32 * led(5) + 16 * led(4) + 8 * led(3) + 4 * led(2) + 2 * led(1) + led(0) If Me.CheckBox9.Checked Then REM Pentru vizualizare la http://www.science.upm.ro/~traian/sitef/web_sitef/start.html REM adr = "www.science.upm.ro/~traian/sitef/web_sitef/act_val.php?id=1234&a0=" + date_c(0) + "&a1=" + date_c(1) + "&a2=" + date_c(2) + "&a3=" + date_c(3) + "&a4=" + date_c(4) + "&digi=" + date_c(7) + "&com=" + val_cmd.ToString() + "&remote=0" REM Pentru vizualizare la http://webtech.upm.ro/sitef/web_sitef/start.html adr = "http://webtech.upm.ro/sitef/web_sitef/act_val.php?id=1234&a0=" + date_c(0) + "&a1=" + date_c(1) + "&a2=" + date_c(2) + "&a3=" + date_c(3) + "&a4=" + date_c(4) + "&digi=" + date_c(7) + "&com=" + val_cmd.ToString() + "&remote=0" Me.WebBrowser1.Navigate(adr) Me.Timer1.Interval = 1000 Me.Label11.Text = val_cmd.ToString() Else Me.Timer1.Interval = 100 Me.Label11.Text = "Local dysplay" End If End If If Me.RadioButton2.Checked Then Me.Timer1.Interval = 1000 Me.CheckBox9.Checked = True Me.Label11.Text = val_cmd.ToString() remote = 1 REM adr = "www.science.upm.ro/~traian/instruments/index.php?id=1234&cd=" + date_c(0) REM Pentru vizualizare la http://www.science.upm.ro/~traian/sitef/web_sitef/start.html REM adr = "www.science.upm.ro/~traian/sitef/web_sitef/act_val.php?id=1234&a0=" + date_c(0) + "&a1=" + date_c(1) + "&a2=" + date_c(2) + "&a3=" + date_c(3) + "&a4=" + date_c(4) + "&digi=" + date_c(7) + "&com=" + val_cmd.ToString() + "&remote=1" REM Pentru vizualizare la http://webtech.upm.ro/sitef/web_sitef/start.html adr = "http://webtech.upm.ro/sitef/web_sitef/act_val.php?id=1234&a0=" + date_c(0) + "&a1=" + date_c(1) + "&a2=" + date_c(2) + "&a3=" + date_c(3) + "&a4=" + date_c(4) + "&digi=" + date_c(7) + "&com=" + val_cmd.ToString() + "&remote=1" Me.WebBrowser1.Navigate(adr) com_t = Me.WebBrowser1.DocumentText.Trim Me.Label10.Text = com_t If com_t.Length > 0 Then com_r = com_t.Split(delimiter) End If If com_r.Length = 10 Then REM Verific daca am primit 10 valori REM Verific daca suma de control e corecta suma = Convert.ToInt16(com_r(0)) + 2 * Convert.ToInt16(com_r(1)) + 4 * Convert.ToInt16(com_r(2)) + 8 * Convert.ToInt16(com_r(3)) + 16 * Convert.ToInt16(com_r(4)) + 32 * Convert.ToInt16(com_r(5)) + 64 * Convert.ToInt16(com_r(6)) + 128 * Convert.ToInt16(com_r(7)) If suma = Convert.ToInt16(com_r(8)) Then com_c = com_t.Split(delimiter) End If End If If Convert.ToInt16(com_c(0)) = 1 Then led(0) = 1 Me.CheckBox1.Checked = True Else led(0) = 0 Me.CheckBox1.Checked = False End If If Convert.ToInt16(com_c(1)) = 1 Then led(1) = 1 Me.CheckBox2.Checked = True Else led(1) = 0 Me.CheckBox2.Checked = False End If If Convert.ToInt16(com_c(2)) = 1 Then led(2) = 1 Me.CheckBox3.Checked = True Else led(2) = 0 Me.CheckBox3.Checked = False End If If Convert.ToInt16(com_c(3)) = 1 Then led(3) = 1 Me.CheckBox4.Checked = True Else led(3) = 0 Me.CheckBox4.Checked = False End If If Convert.ToInt16(com_c(4)) = 1 Then led(4) = 1 Me.CheckBox5.Checked = True Else led(4) = 0 Me.CheckBox5.Checked = False End If If Convert.ToInt16(com_c(5)) = 1 Then led(5) = 1 Me.CheckBox6.Checked = True Else led(5) = 0 Me.CheckBox6.Checked = False End If If Convert.ToInt16(com_c(6)) = 1 Then led(6) = 1 Me.CheckBox7.Checked = True Else led(6) = 0 Me.CheckBox7.Checked = False End If If Convert.ToInt16(com_c(7)) = 1 Then led(7) = 1 Me.CheckBox8.Checked = True Else led(7) = 0 Me.CheckBox8.Checked = False End If val_cmd = 128 * led(7) + 64 * led(6) + 32 * led(5) + 16 * led(4) + 8 * led(3) + 4 * led(2) + 2 * led(1) + led(0) End If cda = "M1," + val_cmd.ToString() Me.SerialPort1.Write(cda) txt = "" txt = Me.SerialPort1.ReadExisting() If txt.Length > 0 Then REM Me.Label1.Text = txt REM Despachetare date date_r = txt.Split(delimiter) End If If date_r.Length = 10 Then REM Verific daca am primit 9 valori REM Verific daca sum ade control e corecta suma = Convert.ToInt16(date_r(0)) + Convert.ToInt16(date_r(1)) + Convert.ToInt16(date_r(2)) + Convert.ToInt16(date_r(3)) + Convert.ToInt16(date_r(4)) + Convert.ToInt16(date_r(5)) + Convert.ToInt16(date_r(6)) + Convert.ToInt16(date_r(7)) If suma Mod 1024 = Convert.ToInt16(date_r(8)) Then Me.Label1.Text = txt date_c = txt.Split(delimiter) End If End If REM Afisez valorile despachetate Me.Label2.Text = date_c(0) Me.Label3.Text = date_c(1) Me.Label4.Text = date_c(2) Me.Label5.Text = date_c(3) Me.Label6.Text = date_c(4) Me.Label7.Text = date_c(5) Me.Label8.Text = date_c(6) Me.Label9.Text = date_c(7) REM Calculez valoarea butoanelor val_l = Convert.ToUInt16(date_c(7)) For j = 0 To 7 If (val_l Mod 2) = 1 Then but(8 - j) = 1 Else but(8 - j) = 0 End If val_l = System.Math.Floor(val_l / 2) Next j REM Afisez intrarile digitale (starea butoanelor) For j = 0 To 7 Me.Desen.DrawRectangle(Creion_albastru, 5 + j * 46, 28, 13, 13) Next j For j = 1 To 8 If but(j) = 1 Then Me.Desen.FillRectangle(Pens_v, 7 + (j - 1) * 46, 30, 10, 10) Else Me.Desen.FillRectangle(Pens_pic, 7 + (j - 1) * 46, 30, 10, 10) End If Next j REM Afisez intrarile analogice val_max = 1024 inalt = 200 val_t = inalt * Convert.ToInt16(date_c(0)) / val_max Call Termo(5, 75, 15, inalt, val_max, val_t) val_t = inalt * Convert.ToInt16(date_c(1)) / val_max Call Termo(69, 75, 15, inalt, val_max, val_t) val_t = inalt * Convert.ToInt16(date_c(2)) / val_max Call Termo(133, 75, 15, inalt, val_max, val_t) val_t = inalt * Convert.ToInt16(date_c(3)) / val_max Call Termo(197, 75, 15, inalt, val_max, val_t) val_t = inalt * Convert.ToInt16(date_c(4)) / val_max Call Termo(263, 75, 15, inalt, val_max, val_t) val_t = inalt * Convert.ToInt16(date_c(5)) / val_max Call Termo(327, 75, 15, inalt, val_max, val_t) val_t = inalt * Convert.ToInt16(date_c(6)) / val_max Call Termo(393, 75, 15, inalt, val_max, val_t) End Sub End Class