Vielen dank jetzt hab ich es endlich....
Schönen Abend noch:)
Gerne.
Ich wollte es nur nicht vorkauen, weil gerade bei random() das Ende eine Hürde ist, die auch ich nicht auf Anhieb darstellen konnte...
Beste Grüße
Außer dem vetauschen des Anschlusses von gnd mit pin 13 ist noch ein Fehler:
Die beiden LED im Kreis sind mi beiden Pins an Masse angeschlossen. Die 5 Senkrechten Löcher der Steckplatine sind miteinander verbunden. Du mußt Eine LEd etwas nach Rechts oder links versetzen.
Außerdem brauchst Du keine 7 Ausgänge sondern es reichen 4 Ausgänge.
Einmal in der Mitte dann die 2 äußeren der 3; dann die 2 Verbleibenden EckLeds und dann die letzten 2 LED. Der Strom muß so gewählt werden daß 2 LE am gleichen Pin keine Überlast darstellen.
zB https://www.pollin.de/productdownloads/D810066B.PDF
Da ein Würfel ja gewürfelt wird (geworfen wird) ist ein Startimpuls für darstellung der nächsten nächste Zufallszahl notwendig. Dies kann zB ein Taster sein.
Da niemand einen Taster Millisekundengenau mehrmals hintereinander drücken bzw loslassen kann ist die Betätigunszeit in Millisekunden bzw Mycrosekunden modulo 6 bereits eine gute Zufallszahl die keiner Pseudozufallsreihe wie random() folgt. Auch ist der Wert von Millis() oder micros() beim Drücken oder Loslassen des Tasters modulo 6 auch eine geignet zufällige Quelle für einen Zufallszahl.
Grüße Uwe
// C++ code
//
long randNumber;
int zahl = 0;
int LED1 = 2;
int LED2 = 3;
int LED3 = 4;
int LED4 = 5;
int LED5 = 6;
int LED6 = 7;
int LED7 = 8;
int LDRvalue = A2;
int LDRIN = A2;
int counterIn = 9;
int switchStatus = 0;
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(LED7, OUTPUT);
Serial.begin(9600);
randomSeed(analogRead(0));
Serial.println("");
Serial.println("start simulation");
}
void loop()
{
switchStatus = digitalRead(counterIn);
Serial.print("Schalterzustand: ");
Serial.println(switchStatus);
delay(3000);
if(switchStatus == 0) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
switchStatus = digitalRead(counterIn);
Serial.println("Würfel ist aus-->nichts machen");
}else {
LDRvalue = analogRead(LDRIN);
Serial.print("LDR: ");
Serial.println(LDRvalue);
if (LDRvalue > 100) {
randNumber = random(7);
Serial.println(randNumber);
delay(50);
Serial.print("randNumber: ");
Serial.print(randNumber);
switch (randNumber) {
case 1:
digitalWrite(LED4, HIGH);
Serial.println(" LED4 an");
break;
case 2:
digitalWrite(LED1, HIGH);
digitalWrite(LED7, HIGH);
Serial.println(" LED 1 und 7 an");
break;
case 3:
digitalWrite(LED1, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED7, HIGH);
Serial.println(" LED 1, 4 und 7 an");
break;
case 4:
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED7, HIGH);
Serial.println(" LED 1, 3, 5 und 7 an");
break;
case 5:
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED7, HIGH);
Serial.println(" LED 1, 3, 4, 5 und 7 an");
break;
case 6:
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
Serial.println(" LED 1, 2, 3, 5, 6 und 7 an");
break;
default:
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
digitalWrite(LED5, HIGH);
digitalWrite(LED6, HIGH);
digitalWrite(LED7, HIGH);
Serial.println("Alle an ");
break;
}
}else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
}
}
Serial.println("::::::::::::::::::::");
delay(10000); //Wait 10 sec
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
Serial.println("");
Serial.println("-----------------------");
Serial.println("");
}
So, jetzt muss ich mich wohl oder übel doch noch mal mit einer Frage melden..
Ich habe jetzt noch hinzugefügt, dass man den Würfel mit einem Schalter an und ausschalten kann und dass er einen LDR wert einliest, nur wenn er an ist.(siehe Anhänge).
Ich möchte es jetzt aber noch gerne so machen, dass er nur eine zufällige Zahl auswählt wenn es dunkel ist d.h. wenn man in Echt seinen Finger auf den LDR quasi "drauflegt". Ich bin langsam am verzweifeln weil ich echt kp hab wo eine Klammer aufhört und die nächste beginnt, weshalb ich echt froh wäre wenn mir das jmd kurz verständlich und easy erklären könnte.
PS: der LDR liest komischerweise auch immer den gleichen Wert ein,. egal ob dunkel oder hell..
LG
Kannst Du.
Wenn Du mal versuchst, ob der Code das tut, was Du vorher konntest.
Wie hast den denn angeschlossen?
Hier erstmal probieren, dann gehts weiter.
[edit] LED-Pins berichtigt. [/edit]
// C++ code
//
long randNumber;
const uint8_t numOfLed = 7;
const uint8_t led[numOfLed] = {2, 3, 4, 5, 6, 7, 8};
int zahl = 0;
int LDRvalue = A2;
int LDRIN = A2;
int counterIn = 9;
bool switchStatus = 0;
void setup()
{
for (uint8_t b = 0; b < numOfLed; b++)
pinMode(led[b], OUTPUT);
Serial.begin(9600);
randomSeed(analogRead(0));
Serial.println("");
Serial.println("start simulation");
}
void loop()
{
switchStatus = digitalRead(counterIn);
Serial.print("Schalterzustand: ");
Serial.println(switchStatus);
delay(3000);
if (switchStatus == 0)
{
ledAus();
switchStatus = digitalRead(counterIn);
Serial.println("Würfel ist aus-->nichts machen");
}
else
{
LDRvalue = analogRead(LDRIN);
Serial.print("LDR: ");
Serial.println(LDRvalue);
if (LDRvalue > 100)
{
randNumber = random(7);
Serial.println(randNumber);
delay(50);
Serial.print("randNumber: ");
Serial.print(randNumber);
switch (randNumber)
{
case 1:
Serial.println(" LED4 an");
break;
case 2:
Serial.println(" LED 1 und 7 an");
break;
case 3:
Serial.println(" LED 1, 4 und 7 an");
break;
case 4:
Serial.println(" LED 1, 3, 5 und 7 an");
break;
case 5:
Serial.println(" LED 1, 3, 4, 5 und 7 an");
break;
case 6:
Serial.println(" LED 1, 2, 3, 5, 6 und 7 an");
break;
default:
Serial.println("Alle an ");
break;
}
wuerfelWert(randNumber);
}
else
{
ledAus();
}
}
Serial.println("::::::::::::::::::::");
delay(10000); //Wait 10 sec
ledAus();
Serial.println("");
Serial.println("-----------------------");
Serial.println("");
}
void wuerfelWert(const uint8_t number)
{
ledAus();
switch (number)
{
case 5:
digitalWrite(led[2], HIGH);
digitalWrite(led[4], HIGH);
// kein break in der 5 ist die 3 enthalten
/* fall through */
case 3:
digitalWrite(led[0], HIGH);
digitalWrite(led[6], HIGH);
// kein break in der 3 ist die 1 enthalten
/* fall through */
case 1:
digitalWrite(led[3], HIGH);
break;
case 6:
digitalWrite(led[1], HIGH);
digitalWrite(led[5], HIGH);
// kein break in der 6 ist die 4 enthalten
/* fall through */
case 4:
digitalWrite(led[2], HIGH);
digitalWrite(led[4], HIGH);
// kein break in der 4 ist die 2 enthalten
/* fall through */
case 2:
digitalWrite(led[0], HIGH);
digitalWrite(led[6], HIGH);
break;
default:
for (uint8_t b = 0; b < sizeof(led); b++)
digitalWrite(led[b], HIGH);
break;
}
}
void ledAus()
{
for (uint8_t b = 0; b < numOfLed; b++)
digitalWrite(led[b], LOW);
}
da greifst aber in den gatsch oder?
```
digitalWrite(led[7], HIGH);
```
Stimmt, ich hab blos die klammern rum gemacht - ich ziehe zurück...
Wie hast Du den LDR denn angeschlossen?
Grüße Uwe
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.