Go Down

Topic: Arduino Diecimila + Visual Studio 2010 (Read 1 time) previous topic - next topic

silentforce

Hallo,

ich habe ein Programm in VB2010, mit dem ich die Ports auf meinem Board ansteuern kann. Das funktioniert auch super...nun würde ich gerne die Daten die ich an einem Port auslese an mein VB Programm schicken! Den Port zum auslesen habe ich bereits vorbereitet, d.h. das Funktioniert auch, aber ich habe keine Ahnung wie ich den Code schreiben soll, der dann die ausgelesenen Daten an das VB Prog schickt.

Und ich wollte dann die ausgelesenen Daten im VB-Prog in einer Text Box anzeigen lassen...


Hier der Code für's Board:


int LED=13;
int IO_5=5;
int input=0;
int pin2=2;
int value;

void setup()
{
 Serial.begin(9600);
 pinMode(LED,OUTPUT);  
 pinMode(IO_5,OUTPUT);
 pinMode(pin2,INPUT);
}


void loop()
{

 input=Serial.read();
 value=digitalRead(pin2);
 
 switch(input)
 {
   case 10:
   digitalWrite(LED,HIGH);
   break;
   
   case 20:
   digitalWrite(LED,LOW);
   break;
 
   case 30:
   digitalWrite(IO_5,HIGH);
   break;
   
   case 40:
   digitalWrite(IO_5,LOW);
   break;
   
   case 50:
   Serial.println(value)
   
   case 100:
   digitalWrite(LED,LOW);
   digitalWrite(IO_5,LOW);
   break;
   
 }  


}



hier der Code vom VB-Prog:

Imports System.IO.Ports.SerialPort

Public Class Form1

   Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
       If SerialPort1.IsOpen Then
           SerialPort1.Write(ChrW(100))
       End If
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       'Verfügbare Comports suchen
       Dim ports As String() = GetPortNames()
       Dim Port As String

       'Combobox richtig sortieren
       ComboBox_Comport.Items.Clear()

       If ports.Length > 0 Then

           ' für alle COM-Nr. < 10 ein Leerzeichen einfügen
           For ii As Integer = 0 To (ports.Length - 1)
               If CInt(ports(ii).Substring(3)) < 10 Then
                   ports(ii) = "COM " & ports(ii).Substring(3)
               End If
           Next

           Array.Sort(ports)

           ' das Leerzeichen in "COM x" wieder entfernen
           For ii As Integer = 0 To (ports.Length - 1)
               ports(ii) = "COM" & ports(ii).Substring(3).Trim
           Next

       End If

       'In die Combobox übernehmen
       For Each Port In ports
           ComboBox_Comport.Items.Add(Port)
       Next Port

       'Buttons setzen
       Button_Disconnect.Enabled = False
       Button_Connect.Enabled = False

   End Sub

   Private Sub ComboBox_Comport_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox_Comport.SelectedIndexChanged

       'Comport auswählen
       If ComboBox_Comport.SelectedItem <> "" Then
           Button_Connect.Enabled = True
       End If

   End Sub

   Private Sub Button_Connect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Connect.Click

       'Comport verbinden
       Try

           'Buttons freigeben-/ sperren
           Button_Connect.Enabled = False
           Button_Disconnect.Enabled = True
           ComboBox_Comport.Enabled = False

           'Comport Einstellungen
           SerialPort1.PortName = ComboBox_Comport.Text
           SerialPort1.BaudRate = 9600
           SerialPort1.Open()

           Timer1.Enabled = True

       Catch ex As Exception

           'Fehlermeldung
           MessageBox.Show("Achtung die Schnittstelle konnte nicht geöffnet werden! " + e.ToString _
                      , "Ausnahmefehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
           Button_Connect.Enabled = True
           Button_Disconnect.Enabled = False
           ComboBox_Comport.Enabled = True

       End Try

   End Sub

   Private Sub Button_Disconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Disconnect.Click

       'Verbindung trennen
       SerialPort1.Write(ChrW(100))
       Timer1.Enabled = False
       Button_Connect.Enabled = True
       Button_Disconnect.Enabled = False
       ComboBox_Comport.Enabled = True
       SerialPort1.Close()

   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       If SerialPort1.IsOpen Then
           SerialPort1.Write(ChrW(10))
       End If
   End Sub

   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
       If SerialPort1.IsOpen Then
           SerialPort1.Write(ChrW(20))
       End If
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       If SerialPort1.IsOpen Then
           SerialPort1.Write(ChrW(30))
       End If
   End Sub

   Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
       If SerialPort1.IsOpen Then
           SerialPort1.Write(ChrW(40))
       End If
   End Sub

   Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
       If SerialPort1.IsOpen Then
           SerialPort1.Write(ChrW(50))


       End If
       TextBox1.Text = SerialPort1.ReadLine


   End Sub
End Class




Vielleicht kann mir ja jemand helfen, bin halt noch newbee auf dem Gebiet :-)

Danke im Voraus

Gruß SilentForce

Megaionstorm

Receiving Data From A Microcontroller:
http://www.rentron.com/receiving_data.htm
Mein Arduino Projekte Blog:
http://ardu-megatank.blogspot.de/

silentforce

also, das hilft mir nicht weiter... ich möchte ja nur einen bestimmten Text ( z.b. der aus einer Variablen ) empfangen und nich den ganzen Port abhören...


weis noch jemand was?


LG silentforce

Timmy

#3
Dec 31, 2010, 02:43 pm Last Edit: Dec 31, 2010, 02:45 pm by Timmy Reason: 1
@Silentforce

Ich habe das Auslesen eines Analog pins meines Arduino mit Hilfe von Visual Basic 2008 so gelöst

Code auf dem Arduino duemilanove

//Analog Pin 0 wird ausgelesen, habe am Pin simpel Werte mit Hilfe eines Potis erzeugt
int Analogwert=0;

         void setup()
      {
        Serial.begin(9600);
      }

      void loop()
      {

        Analogwert=analogRead(0);
        Serial.println(Analogwert);
        delay(1000);
      }

Code VB 2008 --> dürfte aber in 2010 nicht anders sein

du brauchst die Methode DataReceived

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

       Dim AnalogWert As String
       
       Try
               Control.CheckForIllegalCrossThreadCalls = False

               AnalogWert = SerialPort1.ReadLine
                       
                             'Eintrag in die ListBox an oberster Stelle
                   lst_AnalogLesen.Items.Insert(0,AnalogWert)                      
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try
   End Sub

Damit liest der Port die Daten aus und gibt sie direkt in der Listbox aus

Hoffe ich konnte dir weiterhelfen?

Gruß





Go Up