PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Visual Basic und atmega 32 (rs232)



bastian07
20.03.2007, 18:22
Hallo zusammen

habe ein Problem und zwar baue ich gerade an einem Projekt welches ich "Room Control" getauft habe. Ich kann bi jetzt sämtliche Lampen und meine Heizung in Abhängigkeit der Temperatur steuern sowohl über Infrarot (rc-5) als auch über ein Programm am Rechner.
Da ich in VB (Visual Studio) leider nicht so bewandert bin hab ich mir dieses Programm aus Codeschnipseln zusammen gebastelt. Ich sende per Knopfdruck ein "a" und der mC verarbeitet dies dann und schaltet die Lampe etc.
Mein Programm empfängt auch die Temperatur eines kty über den einfachen Printbefehl. (Print Temp)
Jetzt mein Problem:
Ich habe mehrere Temp fühler und würde gerne alle in meinem Programm anzeigen können und zwar ohne auf einen Button zu drücken. Also mit einem Timer.
Jetzt ist mein Problem aber das der Print befehl ja nicht zielgerichtet ist und mein Programm nicht weiss von welchem Temp. Fühler nun die Daten kommen und in welchem Label er sie anzeigen soll.
Das ist der Code der die Daten empfängt:



Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
SetText(SerialPort1.ReadExisting)
End Sub
Private Sub SetText(ByVal [text] As String)

' InvokeRequired required compares the thread ID of the
' calling thread to the thread ID of the creating thread.
' If these threads are different, it returns true.

If InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
lblkty1.Text = [text] & " °C "
End If

End Sub

Das Promm muss also irgendwie erkennen von welchem Fühler nun die Daten kommen.
Hoffe man kann mein Problem verstehen und mir vielleicht auch helfen

tippo
20.03.2007, 18:34
Du könntest mit dem Microcontroller anstatt "print temperatur" einfach "print temperatur sensor1" senden.
In VB überprüfst du dann mit einer IF Abfrage welcher Sensor im String steht und gibst es auf dass ensprechende Label aus.

mfG
tippo

bastian07
20.03.2007, 19:21
Hört sich schonmal sehr gut an nur wie bewerkstelli9ge ich das.
Vielleicht ein kleines bsp zur Hand?
Wie gesagt bin in VB nicht sehr bewandert.

tippo
20.03.2007, 19:33
Auswendig weiß ich es leider auch nicht, aber google einfach mal nach "VB String" oder ähnlich, da findest sicher etwas.

mfG
Tippo

bastian07
20.03.2007, 20:18
Ich danke dir vielmals hab es mit deinen Hinweisen Lösen können für alle die es noch interessiert:


If InStr(text, "kty1:") = 1 Then
lblkty1.Text = [text]
ElseIf InStr(text, "kty2:") = 1 Then
lblkty2.Text = [text]
End If

wobei "text" die Variable ist, die von der Seriellen schnitstelle beschrieben wird.
Gruß Bastian07