Hallo liebe Leute! Nun wirds schwer....ich bin schon ziemlich weit mit meinem Programm für die Messung der Lichtschranken. Nun habe ich eine Frage zu Visual Basic. So ist nun der Stand der Dinge. Sobald man in meinem VB-Programm auf "Connect" klickt und anschließend am Mikrocontroller-Board auf "Connect"-Taste drückt, dann sendet der Controller ein "J" an das VB-Programm, was bedeutet, dass das Board an den PC angeschlossen ist. Sobald man nun auf die Schaltfläche "Hole Daten" im VB-Programm klickt, soll er nun die einzelnen Daten (Registerwerte des Timers bzw. Variablen der Timer-Überläufe) schicken. Ich habe es nun so gemacht: Ich sende jetzt erstmal character (sprich Zeichen). Das könnte jetzt z.B. so aussehen: A x B x C x D "A" soll in die textbox1 geschrieben werden. Sobald IMMER ein "x" gesendet wird, soll auf die Textbox2, Textbox3, usw. die Werte im VB-Programm ausgegeben werden. Nur, wie schreibe ich " sobald IRGENDWAS UND ein X UND IRGENDWAS kommt, springe zur nächsten Textbox" Danke!!
ach, was ich noch vergessen habe, was wahrscheinlich aber nicht allzu wichtig ist...Um die Daten vom Mikrocontroller-Board zu holen, muss man an diesem Board auf die "Send-Taste" drücken. Ich will nämlich nichts vom PC aus an den controller senden, das würde zu weit gehen.
Du musst den empfangen String aufteilen, schau mal bei www.activevb.de nach, da gibts mit Sicherheit Beispiele. Gruß, Richard Zink
hm, habe zwar gesucht aber nicht wirklich was gefunden. Aber es ist ja im prinzip kein String, den mein Mikrocontroller sendet eben nicht auf einmal die Daten raus, sondern "schickt, frägt ob senden bereit, schickt das "x", frägt ob senden bereit, schickt das nächste...." danke
Du brauchst dafür eine statemachine: http://de.wikipedia.org/wiki/Automat_%28Informatik%29 http://de.wikipedia.org/wiki/Finite_State_Machine
1 | dim state as integer |
2 | dim buf as string |
3 | |
4 | sub automat_input( s as string ) |
5 | |
6 | if s = "x" then |
7 | |
8 | textbox(state).text = buf |
9 | state = state + 1 |
10 | if state >= 4 then state = 0 |
11 | buf = empty |
12 | |
13 | exit sub |
14 | end if |
15 | |
16 | if s = "j" then |
17 | ' board verbunden! |
18 | buf = empty |
19 | state = 0 |
20 | exit sub |
21 | end if |
22 | |
23 | buf = buf & s |
24 | end sub |
Gruß, Feadi
ok vielen Dank erstmal. Könntest du jedoch den von dir geschickten Code kommentieren, da ich ihn auch verstehen möchte ;-) Vielen Dank
...und wo kann ich das hinkopieren? form load? Button (wenn ich draufklicke, soll er empfangen?)
habe es jetzt erstmal mit Word versucht: Option Explicit Dim wdApp As Object Dim doc As Object Private Sub Command1_Click() 'Word starten On Error Resume Next Set wdApp = CreateObject("Word.Application.8") 'Word öffnen wdApp.Visible = True 'Word sichtbar machen? Set doc = wdApp.Documents.Add 'Neues Word-Dokument erstellen doc.Range.InsertAfter "Hallo" & vbCrLf '"Hallo" einfügen und Cursor an Anfang in neue Zeile End Sub Private Sub Command2_Click() 'Word beenden doc.SaveAs "C:\test.doc" 'Speichere Datei (Var für Textbox: "Path") wdApp.Quit 'Word schließen End Sub
> Könntest du jedoch den von dir geschickten Code > kommentieren, da ich ihn auch verstehen möchte ;-) Der Code ist schon eine recht gute Dokumentation. Ich wüsste auch nicht was genau ich daran noch kommentieren könnte. Und das Denken wollte ich Dir eigentlich nicht abnehmen ;) Besser ist, Du würdest den Code einfach mal durch den Simulator schicken. Die Funktion automat_input braucht als Parameter ('s') die Zeichen die der µC sendet. Eins nach dem Anderen. Eins noch: Die Textboxen müssen alle 'textbox' heissen, und brauchen ein Index. Gruß, Feadi
also...verstanden hab ichs jetzt, aber ich weiß nicht mit welchem Objekt ich die Funktion ausführen soll. Timer? Schaltfläche? Wenn ichs jedoch mit einer schaltfläche ausführe, dann muss ja genau in diesem moment vom Controller der string gesendet werden oder? Sprich wenn ichs so ausführe: Call Automat_input(mscomm1.input) habe textbox1-4 mit textbox(0) bist textbox(3) benannt. funktioniert wiegeagt nicht. Könntest mir noch einen schritt helfen?? Danke!
ich drücke wigesagt am Mikrocontroller eine Taste, und nachdem ich die gedrückt habe, schickt der Controller postwendend den String "126x47x28x277" und den soll er dann auf die 4 Textboxen (textbox(0)-textbox(3)) aufteilen danke!
1 | Dim state As Integer |
2 | Dim buf As String |
3 | |
4 | Sub automat_input(s As String) |
5 | |
6 | If Len(s) > 1 Then |
7 | Dim i As Integer |
8 | |
9 | For i = 1 To Len(s) |
10 | automat_input Mid(s, i, 1) |
11 | Next i |
12 | |
13 | Exit Sub |
14 | End If |
15 | |
16 | If s = "x" Or s = Chr(10) Then |
17 | |
18 | Textbox(state).Text = buf |
19 | state = state + 1 |
20 | If state >= 4 Then state = 0 |
21 | buf = Empty |
22 | |
23 | if s = chr(10) then state = 0 |
24 | |
25 | Exit Sub |
26 | End If |
27 | |
28 | If s = "j" Then |
29 | ' board verbunden! |
30 | buf = Empty |
31 | state = 0 |
32 | Exit Sub |
33 | End If |
34 | |
35 | buf = buf & s |
36 | End Sub |
37 | |
38 | |
39 | Private Sub Form_Load() |
40 | MSComm1.PortOpen = True |
41 | |
42 | End Sub |
43 | |
44 | Private Sub MSComm1_OnComm() |
45 | Debug.Print "MSComm1_OnComm" |
46 | |
47 | automat_input MSComm1.Input |
48 | |
49 | End Sub |
50 | |
51 | Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer) |
52 | If KeyCode = 13 Then |
53 | automat_input Text2.Text & Chr(10) |
54 | |
55 | Text2.Text = Empty |
56 | End If |
57 | End Sub |
So, diesen Code habe ich gerade getestet. Die Textbox 'Text2' habe ich zum testen von automat_input verwendet. Das MSComm Steuerelement ruft die MSComm1_OnComm Funktion auf, wenn Daten zum lesen bereit sind. Dort musst Du automat_input füttern. Dein µC muss an den String noch ein '\n' drannhängen: "12x34x56x78\n" wäre dann ein gültiger String. Das '\n' Zeichen wird benötigt damit die automat_input Funktion weiß wo der String aufhört. Gruß, Feadi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.