Pages: [1]   Go Down
Author Topic: LED Steuerung über Serielle Schnittstelle in Visual Basic  (Read 1222 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,
ich versuche mich gerade an einem kleinen Projekt mit meinem Arduino UNO. An ihn sind einfach zwei LED's mit einem Widerstand angeschlossen.
Nun habe ich in Visual Basic ein Programm erstellt, mit welchem ich die Leuchtdauer dieser LED's steuern will.
Das ganze sieht folgendermaßen aus: http://jank.jimdo.com/projekte/
Jedoch habe ich jetzt das Problem, das ich nicht weiß, wie ich die zwei Variablen (Eingestellte Zeit in VB für LED) an den Arduino schicke, sodass dieser die Variablen den LED's auch richtig zuordnet.
Ich hoffe jemand kann mir helfen smiley-grin
Viele Grüße J.
Logged

Heilbronn
Offline Offline
Full Member
***
Karma: 4
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

VB.NET?
VB Klassisch?
VBA?

Was hast bisher versucht?

Grüße,
Jürgen
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Programm habe ich in dem Programm Visual Basic 2010 Express erstellt. Meine Idee ist es in VB eine Variable "A" und "B" rauszugeben, die im Arduinoprogramm folgendermaßen verwertet werden sollen:

int rot = 13;   //rote LED
int gruen = 12; //grüne LED

void setup()

{               
  pinMode(led, OUTPUT);   
  serial.begin(9600);
}

void loop()
 {
  digitalWrite(rot, HIGH);   
  delay(Hier die Variable "A" einbauen);              // <-- ????
  digitalWrite(gruen, HIGH);   
  delay(Hier die Variable "B einbauen");            // <-- ????
 }     
Die Frage ist, wie sende ich gleichzeitig 2 Zahlen und noch die Buchstaben für die Zuordnung?
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 163
Posts: 3198
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Jedoch habe ich jetzt das Problem, das ich nicht weiß, wie ich die zwei Variablen (Eingestellte Zeit in VB für LED) an den Arduino schicke, sodass dieser die Variablen den LED's auch richtig zuordnet.

Wenn die LEDs auf die exakt selbe Millisekunde startbar sein sollen, denkst Du Dir am besten ein Befehlsprotokoll aus, bei dem ein Befehl beide Steuerzeiten übermittelt, z.B. einfach die Zahlenwerte für die Einschaltdauer mit einem Semikolon getrennt, abgeschlossen mit einem Zeilenende-Zeichen, z.B. wenn A für 140 und B für 280 ms leuchten soll:
140;280<CR>
Oder wenn A nicht leuchten soll und B für 55 ms:
0;55<CR>
wobei <CR> der Platzhalter für das Zeilenende-Zeichen ist. Ich kenne VB nicht, aber in manchen Programmiersprachen dienen Befehle wie "writeln" oder "println" dazu, eine Variable mit anschließendem Zeilenende-Zeichen auszugeben.

Auf Arduinoseite liest Du dann immer eine Zeile von der seriellen Schnittstelle ein und wertest aus, was da als Befehl angekommen ist.

Natürlich kannst Du Befehle auch nacheinander senden, aber dann kommt das Problem der Übertragungszeit dazu: Wenn Du z.B. immer zwei Befehle für jede LED getrennt senden würdest:
A140<CR>
B280<CR>
dann würde LED B immer später anfangen zu leuchten, und zwar weil der erste Befehl nach dem ersten <CR> ausgeführt wird und der zweite Befehl erst, nachdem auch die zweite Zeile empfangen wurde, also einige Millisekunden später.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kennt sich jemand in Visual Basic aus und kann mir weiterhelfen?
Logged

Heilbronn
Offline Offline
Full Member
***
Karma: 4
Posts: 152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

bin eher in der C# Welt zuhause.

Such mal in der MSDN nach serialPort.

Mit entsprechenden Parametern kann der Port initialisiert werden und mit "open" dann geöffnet. usw

Schau mal da ist alles Beschrieben und mit Beispiel:
http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

Grüße,
Jürgen
Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 7
Posts: 311
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Welches Control hast du bitte denn für die numerischen Werte genommen??

Code:
        Dim SendePuffer() As Char
        SendePuffer = ("A" & VScrollBar1.Value & Chr(13)).ToCharArray
        SerialPort1.Write(SendePuffer, 0, SendePuffer.Length)

15 Jahre VB Erfahrung smiley-cool
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Welches Control hast du bitte denn für die numerischen Werte genommen??

Code:
        Dim SendePuffer() As Char
        SendePuffer = ("A" & VScrollBar1.Value & Chr(13)).ToCharArray
        SerialPort1.Write(SendePuffer, 0, SendePuffer.Length)

15 Jahre VB Erfahrung smiley-cool

Die 15 Jahre bemerkt man smiley-grin hab kein Wort verstanden.
Wo muss ich diesen Code einbauen und was bewirkt er?
Was ist mit Control gemeint?
Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 7
Posts: 311
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Controls sind z.B. Textbox, Label, Button, ...

Der Code sendet ein vorangestelltes A mit einem num. Wert und verwendet CR als Umbruchzeichen.
Der Code sollte erst mal zum SendenButton.

Was kann denn dein Programm bis jetzt alles??
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei VScrollBar1 bringt er den fehler, das es nicht deklariert wurde.
Als Control dienen zwei NumericUpDown (siehe Bild in Post 1). Bis jetzt erkennt das Programm nur den COM-Port, es fehlt also noch das komplette Senden.
Logged

Germany, BW
Offline Offline
Sr. Member
****
Karma: 7
Posts: 311
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du musst VScrollBar1 durch den Namen deines NumericUpDown Controls (ectl. NumericUpDown 1) ersetzen.
Logged

Pages: [1]   Go Up
Jump to: