LED Steuerung über Serielle Schnittstelle in Visual Basic

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:
Viele Grüße J.

Hallo,

VB.NET?
VB Klassisch?
VBA?

Was hast bisher versucht?

Grüße,
Jürgen

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?

Arduino_VB:
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
Oder wenn A nicht leuchten soll und B für 55 ms:
0;55
wobei 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
B280
dann würde LED B immer später anfangen zu leuchten, und zwar weil der erste Befehl nach dem ersten ausgeführt wird und der zweite Befehl erst, nachdem auch die zweite Zeile empfangen wurde, also einige Millisekunden später.

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

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:

Grüße,
Jürgen

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

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

15 Jahre VB Erfahrung 8)

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

        Dim SendePuffer() As Char

SendePuffer = ("A" & VScrollBar1.Value & Chr(13)).ToCharArray
        SerialPort1.Write(SendePuffer, 0, SendePuffer.Length)




15 Jahre VB Erfahrung 8)

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

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??

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.

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