Hilfe beim Programieren

Hallo Leute,

habe einen kleinen Sketch geschrieben, mit dem ich mehrere Led´s unabhängig voneinander flackern lassen kann.

Desweiteren möchte ich, dass der Script erst anfängt wenn am analogen Eingang eine 5 Volt Spannung anliegt. Leider funktioniert das nicht so wie gewünscht. Solange keine Spannung anliegt bleiben die Led´s zwar aus, sobald jedoch die 5 anliegen Leuchten ein paar Led´s ohne zu flackern.

Was habe ich falsch gemacht?

Hier der Sketch

#include <TrueRandom.h>

int ledPin1 = 9;
int ledPin2 = 10;
int ledPin3 = 11;
int ledPin4 = 6;
int ledPin5 = 5;
int ledPin6 = 3;
int analogPin = 0;

void setup ()
{
pinMode (ledPin1, OUTPUT);
pinMode (ledPin2, OUTPUT);
pinMode (ledPin3, OUTPUT);
pinMode (ledPin4, OUTPUT);
pinMode (ledPin5, OUTPUT);
pinMode (ledPin6, OUTPUT);
pinMode (A0, INPUT);
}

void loop () {

if (analogRead(A0) < 400)

analogWrite (ledPin1, LOW);
analogWrite (ledPin2, LOW);
analogWrite (ledPin5, LOW);
analogWrite (ledPin6, LOW);
analogWrite (ledPin3, LOW);
analogWrite (ledPin4, LOW);

if (analogRead(A0) > 900)

{

analogWrite (ledPin1, TrueRandom.random (50,255));
analogWrite (ledPin3, TrueRandom.random (100,255));
analogWrite (ledPin4, TrueRandom.random (140,255));
analogWrite (ledPin5, TrueRandom.random (100,255));
analogWrite (ledPin6, TrueRandom.random (140,255));

delay (TrueRandom.random (100 ,200));

}

}

Danke schonmal im vorraus

Was habe ich falsch gemacht?

  • Du hast deinen Sketch nicht in Code Tags gesetzt.

  • Du verwendest eine private Bibliothek ( TrueRandom ), ohne zu sagen woher sie kommt und welche Version du verwendest, und ohne dass dies nötig wäre.

  • Funktioniert denn TrueRandom.random (140,255) wie gewünscht ?
    ( soll wohl vermutlich ein byte im Bereich 140 .. 255 liefern )

  • Verändert sich die Helligkeit wie gewünscht, wenn du entsprechende Werte fest vorgibst ?

  • Verkleinere das Ganze erstmal auf einen einzigen PWM - Pin und Testausgaben per Serial.println und schau genau hin ...

  • Alles was z.Zt. in setup() steht und die Zeile
    int analogPin = 0;
    stört zwar nicht, ist aber überflüssig.

  • Die Zeilen

  analogWrite (ledPin2, LOW) ;

und folgende werden immer ausgeführt, unabhängig vom Analogeingang A0. Hast du dir da Klammern gedacht ?

Ist es Absicht dass es keine Zeile mit

analogWrite (ledPin2, TrueRandom.random (100,255));

gibt?

Ich habe das mal schnell nachgebaut. Weil ich aber die Bibliothek TrueRandom nicht habe, verwende ich das "normale" Random - ich denke aber, das sollte keinen allzu großen Unterschied machen.

Was sofort auffällt ist:

  • Led2 bleibt immer aus - das war zu erwarten, denn die wird ja nie eingeschalten, sondern bei jedem Durchlauf nur aus.
  • Led4 und Led6 flackern kaum merklich. Auch das war zu erwarten, denn zwischen den Werten 140 und 255 ist kein sehr großer visueller Helligkeitsunterschied bei LEDs zu erkennen.
    Du solltest also den niedrigeren Wert deutlich kleiner als 140 ansetzen.
    Wenn du bei allen analogWrite (.......(50,255) machst flackert es deutlich sichtbar.

Danke erstmal für die Antworten.

Ich habe den Code jetzt etwas verändert, indem ich analogRead in klammern gesetzt habe.

#include <TrueRandom.h>

int ledPin1 = 9;
int ledPin2 = 10;
int ledPin3 = 11;
int ledPin4 = 6;
int ledPin5 = 5;
int ledPin6 = 3;
int analogPin = 0;

void setup ()
{
pinMode (ledPin1, OUTPUT);
pinMode (ledPin2, OUTPUT);
pinMode (ledPin3, OUTPUT);
pinMode (ledPin4, OUTPUT);
pinMode (ledPin5, OUTPUT);
pinMode (ledPin6, OUTPUT);
pinMode (A0, INPUT);
}

void loop () {

if (analogRead(A0) < 200)

{
analogWrite (ledPin1, LOW);
analogWrite (ledPin2, LOW);
analogWrite (ledPin5, LOW);
analogWrite (ledPin6, LOW);
analogWrite (ledPin3, LOW);
analogWrite (ledPin4, LOW);

}

{

if (analogRead(A0) > 800)

{
analogWrite (ledPin1, TrueRandom.random (50,255));
analogWrite (ledPin2, TrueRandom.random (140,255));
analogWrite (ledPin3, TrueRandom.random (100,255));
analogWrite (ledPin4, TrueRandom.random (140,255));
analogWrite (ledPin5, TrueRandom.random (100,255));
analogWrite (ledPin6, TrueRandom.random (140,255));
delay (TrueRandom.random (40 ,70));
}

}
}

Sobald keine Spannung mehr anliegt sind die Led´s aus.

Wenn der analoge Pin nicht verbunden ist läuft das Programm so wie es soll.

Verbinde ich den analogen Pin allerdings mit einer 5 V Quelle läuft das Programm zwar, allerdings viel langsamer.

Woran kann das nun liegen?

Woran kann das nun liegen?

Ich sehe es!

Kannst du mir auch sagen was ich falsch gemacht habe ? :slight_smile:

Bin wirklich ein absoluter Anfänger beim Programmieren.

Kannst du mir auch sagen was ich falsch gemacht habe ?

Ja!
Dein Kommunikationsverhalten ist unbefriedigend.

sonert:
Kannst du mir auch sagen was ich falsch gemacht habe ? :slight_smile:

Bin wirklich ein absoluter Anfänger beim Programmieren.

Benutze nicht einfach Bibliotheken, ohne nachzudenken, was sie machen. Lese die Beschreibungen.

Google führt mich zu: GitHub - sirleech/TrueRandom: Arduino random number library (forked from google code)

Dort steht in der Beschreibung: TrueRandom uses Analog 0. Do not connect anything to this pin.

Schließt du das was an, hast du keine Zufallszahlen mehr. Das Verhalten der Lampen ist nicht mehr wie erwartet.

Ich verstehe nicht, weshalb du dir so etwas extravagentes wie truerandom ins Sketch holst, wo auch der normale Zufallsgenerator des Arduinos reicht. Unbekannte Libs können gerne unerwartete Ergebnisse bringen.

Abgesehen davon dass TrueRandom nicht wirklich zufällig ist und der verwendete Algorithmus die Entropie deutlich einschränkt. Der Name suggeriert etwas anderes als was gemacht wird.

Für Flackern reicht wie gesagt auch der normale Zufallsgenerator. Selbst mit immer dem gleichen Seed merkst du nicht dass die Sequenz immer gleich ist

Verbinde ich den analogen Pin allerdings mit einer 5 V Quelle läuft das Programm zwar, allerdings viel langsamer.
Woran kann das nun liegen?

An deinem Sketch natürlich:

if (analogRead(A0) > 800) {
  // ...
  delay (TrueRandom.random (40  ,70));
}

Hier sind übrigens CodeTags zu sehen. Es gibt viele Möglichkeiten, einen Sketch lesbarer darzustellen als du es tust.

Eigentlich wollte ich mir dein Zeugs ja nicht mehr ansehen, aber wir sind hier leider viel zu nett :wink:

Das Drama ist halt der absichtliche Kurzschluss!
Eine Gnade des Herstellers, wenn da kein Rauch austritt.