Verständnisfrage bezüglich LED Experimente

Hallo,
spiel seit ein paar Tagen mit dem Arduino Uno und ein paar LEDs herum.

Nun habe ich einige Fragen und hoffe jemand kann mir weiterhelfen.

Ersteinmal hab ich 4 LEDs an den Arduino geschlossen PIN 7 bis 10, natürlich mit Vorwiederstand. Nun hab ich ein klein Programm, zum rumspielen geschrieben. Der Ardunio ist per USB an den Rechner geschlossen und über das VB Programm kommuniziere ich über die "serielle Schnittstelle". Als erstes habe ich die LEDs nur über Buttons an und aus geschaltet, das war auch kein Problem. Im Prinzip gibt das VB Programm den Pin und den Wert 0 oder 255 weiter an den Arduino und da Pin 9 sowie Pin 10 PWM unterstützen wollte ich auch eine LED dimmen. Also habe ich ein Button der den Wert 255 durch x teilt und in die Variable y im Single speichert, dann an den Arduino per Byte also ohne Nachkommastelle weitergibt und das gleiche für einen Button zum ausdimmen. Wenn ich nun den Button zum einschalten drücke wird die LED eingeschaltet bis sie die volle stärke erreicht hat aber auch andere LEDs werden ohne das es gewünscht ist mit Strom versorgt und leuchten dann. Wo liegt mein Fehler? Desweiteren ist mir aufgefallen, das obwohl ich immer die gleichen Werte per VB Programm an den Arduino sende die LED gelegentlich mitten im Dimmvorgang hell aufleuchtet, das passiert zwar nicht immer aber wenn x besonders groß ist zum Beispiel 100 merkt man das es zwischen drin immer ein helles aufblinken gibt. Woran liegt das?

Weitere Fragen die sich mir stellen sind:

Wenn ich nun über einen Pin 3 LEDs einschalten will, die über eine externe Versorgung verfügen (12Volt), wie stell ich dieses am besten an? Ein Relais?
Wenn ich nun den externen Stromkreis dimmen möchte was wäre da die beste Möglichkeit?

Gruß Dani

Woran das liegt? - Du hast falsch programmiert. Solange hier keiner eine funktionierende Kristallkugel hat mußt Du schon Deinen Code posten bevor Dir jemand sagen kann was genau das Problem ist.

Zur ersten Frage:
Ich auch Kristallkugel.
Zur 2.Frage:
Mit einem Transistor.
http://itp.nyu.edu/physcomp/Tutorials/HighCurrentLoads
Grüße Uwe

Code auf dem Arduino

byte pin;
byte staerke;

void setup()
{
Serial.begin(9600);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
}

void loop()
{
if (Serial.available() >= 2) {
pin = Serial.read();
staerke = Serial.peek();
analogWrite(pin, staerke);
}
}

Code im VB Programm

Public Class Form1
Dim x As Single
Dim y As Single
'Dim ser As New System.IO.Ports.SerialPort
Public Sub Ardu(ByVal pin As Byte, ByVal msg As Byte)
Dim aryByte(2) As Byte
If Not (SerialPort1.IsOpen = True) Then
SerialPort1.Open()
End If
aryByte(0) = pin
aryByte(1) = msg
SerialPort1.Write(aryByte, 0, 2)

End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
y = 255 / 20
x = 0
'MsgBox(y)
timDimmer.Start()

End Sub

Private Sub timDimmer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timDimmer.Tick

If x < 255 - y Then
If x < y Then
x = x + 1
Ardu(9, x)
Else
x = x + y
Ardu(9, x)
End If

'Ardu(10, x)
Else

timDimmer.Stop()
'MsgBox(x)
End If
End Sub
End Class

void loop()
{
if (Serial.available() >= 2) {
    pin = Serial.read();
    staerke = Serial.peek();
    analogWrite(pin, staerke);
  }
}

Wieso benutzt Du Serial.peek();? So liest Du 2 mal den übertragenen Wert, einmal als staerke und das 2. mal als pin.
Benutze beides mal Serial.read();

Grüße Uwe

uwefed:
Wieso benutzt Du Serial.peek();? So liest Du 2 mal den übertragenen Wert, einmal als staerke und das 2. mal als pin.
Benutze beides mal Serial.read();

Grüße Uwe

Danke für die Info, das scheint einige Probleme verursacht zu haben.

Auch das mit dem Transistor hat auf anhieb geklappt.

gut
Gratuliere
Gute Nacht Uwe