LED dimmen per schalter

Hallo Leute. Ich habe da ein kleines Sketch welches nicht so ganz funktioniert wie ich es mir erhofft habe... Ich möchte eine LED zwischen zwei Dimm-leveln hin und herschalten können. Ob nun hell oder Dunkel soll mittels einer anliegenden spannung ermittelt werden. Sprich wenn der Eingang HIGH ist soll dimmlevel 1 wenn LOW dimmlevel 2 an der LED anliegen.

Hier mal ein sketch:

int licht = 10;
int beleuchtung = 9;

void setup()
{
  pinMode(licht, INPUT);
  pinMode(beleuchtung, OUTPUT);
}

void loop()
{
  if(licht == 1)
  {
  analogWrite(beleuchtung, 100);
  }
  else
  {
    analogWrite(beleuchtung, 255);
  }
}

Kann mir einer sagen warum das nicht funktioniert? (LED geht an, aber ändert sich nicht)

MFG Uwe

Das Einlesen des Eingangs ist falsch. Du fragst lediglich ab ob 10 == 1

Korrekt: http://arduino.cc/de/Reference/DigitalRead

Auch wenn ich nach HIGH abfrage ändert sich nichts am verhalten. PullUp ist natürlich vorhanden.

Das Problem scheint mir nicht die abfrage des Eingangs zu sein, sondern das schreiben des Dimmwertes... Habe ich da etwas falsch???

MFG

Auch wenn ich nach HIGH abfrage ändert sich nichts am verhalten

if (licht == HIGH)

ist natürlich genauso falsch wie

if ( licht == 1 )

Das Problem ist, dass du das Problem an der falschen Stelle suchst, und vermutlich immer noch kein digitalRead(licht) machst

Ich finde, meine Wahrsage-Glaskugel arbeitet hervorragend :wink:

zu den ganzen groben Fehlern, die ja schon beschrieben wurden, würde ich auch immer einen Schwellwert nehmen, so dass du eine Toleranz hast, also ein logisches größer gleich Schwellwert statt logisch gleich einem Fixwert nehmen. Sprich >=Schwellwert und nicht ==1. Zudem ist es auch immer ordentlicher, diesen Wert als Parameter zu definieren und dann einzusetzen - bei komplexeren Programmen wird es sonst sehr schnell murks und der Fehler lässt sich schlecht finden. Sprich: float schwellwert=0.5f, digitalread()>=schwellwert. Das ist auch logisch, da du ja nur zwei Zustände beschreiben willst. Mit dem, was du da machst, hast du praktisch drei Zustände, nämlich noch alles, was keins der beiden Gleichungen erfüllt .

MFG Daniel

Jetzt habe ich es. Danke an alle :)

Hallo Uwe Genaue Erklährung.

Mit

if ( licht == 1 )

Konntrollierst Du den Inhalt der Variable "licht" mit 1. Die Variable beinnhaltet aber die nummer des Pins und nicht dessen Zustand. Du mußt den Zustand erfragen mit:

pinRead(licht);

und diesen dann auf 1 oder HIGH oder TRUE kontrollieren (ist alles das selbe).

if (pinRead(licht) == 1 )

Kurzerklährung für Biertrinker Das ist so wie Du im Keller kontrollierst ob eine Kiste Bier da ist aber nicht schaust wieviele Flaschen noch in der Kiste sind.

@ Daniel Entschuldge, aber das was Du schreibst ist murks. Du liest einen Digitale Eingang ein und der kann per Definition 2 Zustände: nur 0 oder 1, TRUE oder FALSE, HIGH oder LOW oder wie sonst Du die beiden Zustände noch nennen willst. Wenn Du nicht gerade 0 und 1 benutzt dann ist jeder Wert der nicht null ist automatisch TRUE oder HIGH.

Grüße Uwe

@ Uwefed
Habe es ja heute nachmittag schon hinbekommen und auch von einem anderen erklären lassen wo da mein fehler war.

Trozallem, die erklärung für Biertrinker ist genial XD