Torna al Thread

Public Class Form1 Dim tcom As Single ' Dato proveniente della seriale Dim temp As Integer ' Dato convertito da mostrare sulla ProgressBar Dim cont As Integer ' Contatore Dim tref As Single ' Temperatura di riferimento (utilizzata nel codice di calcolo della temperatura da mostrare) Dim vtemp(0 To 15) As Single ' Vettore contenente 16 misurazioni di temperatura, da cui verrà estratta la temp media Dim app As Single ' Variabile ausiliaria, utilizzata per l'ordinamento del vettore Dim scal As String ' Scala di misurazione (°C, °F o °K) Dim dato As String ' dato letto dalla COM Dim Rx$ ' Stringa utilizzata x la lettura dei dati Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Termometro.Minimum = 0 ' Valore minimo di default della ProgressBar Termometro.Maximum = 500 ' Valore di fondo scala di default (100°C * 5, in modo da visualizzare anche valori frazionari) Termometro.Value = 0 ' Inizializzazione della temperatura mostrata sul termometro SerialPort1.PortName = "COM1" SerialPort1.BaudRate = 1200 ' Dati inviati con uno standard RS-232 1200 baud, 8 bit, 1 bit di stop, nessuna parità SerialPort1.Open() cont = 0 ' Inizializzazione contatore End Sub Private Sub Celsius_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Celsius.Click ' Radio Button "Celsius" cliccato: Out_Res.Text = "set" ' Aggiornamento label della temperatura indicata Termometro.Minimum = 0 ' Valore minimo di scala Termometro.Maximum = 500 ' Valore di fondo scala * 5 scal = "°C" ' Unità di misura da visualizzare temp = tcom * 5 ' Temperatura da visualizzare sulla ProgressBar (0 - 100 °C) Termometro.Value = temp ' Aggiornamento termometro Out_Res.Text = tcom & scal ' Aggiornamento label di temperatura End Sub Private Sub Fahrenheit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Fahrenheit.CheckedChanged Out_Res.Text = "set" Termometro.Minimum = 32 * 5 Termometro.Maximum = 212 * 5 scal = "°F" temp = ((tcom * 1.8) + 32) * 5 ' Conversione del dato in Fahrenheit Termometro.Value = temp Out_Res.Text = ((tcom * 1.8) + 32) & scal End Sub Private Sub Kelvin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Kelvin.CheckedChanged Out_Res.Text = "set" scal = "°K" temp = (tcom + 273.15) * 5 Out_Res.Text = tcom + 237.15 & scal ' conversione del dato in Kelvin Termometro.Minimum = 273.15 * 5 Termometro.Maximum = 373 * 5 Termometro.Value = temp End Sub ' Ogni secondo, un timer controlla la COM, leggendone i dati presenti ed aggiornando il form Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Rx$ = SerialPort1.ReadChar ' Legge un dato dalla COM - Genera un errore IOException non gestito. If Len(Rx$) Then ' Se ci sono dati letti... dato = Rx$ ' Copia il carattere letto... If dato = "" Then GoTo Fine ' e, se non ci sono stati errori nel frattempo... dato = Val(Asc(dato)) ' Trasforma il carattere letto nel corrispondente valore ASCII e ne assegna il numero alla variabile Dato tcom = dato * 0.0195 * 20 ' Calcola la temperatura (i valori sono legati alla natura del circuito) If cont < 16 Then ' Se il contatore è < 16... vtemp(cont) = tcom ' Mette nell'array delle temperature il nuovo valore arrivato... cont += 1 ' ed incrementa il contatore. End If If cont = 16 Then ' Se il contatore è 16 (l'array è pieno)... For k = 0 To 14 For j = (k + 1) To 15 If vtemp(k) > vtemp(j) Then ' Ordino l'array, disponendo le temperature in ordine crescente app = vtemp(k) vtemp(k) = vtemp(j) vtemp(j) = app End If Next j Next k cont = 17 ' Incremento ancora il contatore End If tref = vtemp(8) ' Prendo come temperatura di riferimento, il valore medio misurato If cont = 17 Then ' Se il contatore è 17... If tcom >= (tref + 2) Or tcom <= (tref - 2) Then ' Controlla che l'attuale valore misurato non sia troppo distante dal valore di riferimento GoTo Fine ' Se non è troppo distante, tiene il valore medio ed esce dalla subroutine Else tref = tcom ' Altrimenti prende il nuovo valore misurato come temperatura da visualizzare e prosegue End If End If If Celsius.Checked Then ' Controlla la scala selezionata e setta l'unità di misura di conseguenza; poi converte il dato. scal = "°C" temp = tcom ElseIf Fahrenheit.Checked Then scal = "°F" temp = ((tcom * 1.8) + 32) Else scal = "°K" temp = (tcom + 273.15) End If Out_Res.Text = temp & scal ' Scrive temperatura e scala sul label... Termometro.Value = temp * 5 ' Aggiorna la ProgressBar ed esce dalla subroutine End If Fine: End Sub End Class
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5