Forum: Mikrocontroller und Digitale Elektronik [Arduino]Code mit Random funktioniert nicht


von LeDran (Gast)


Lesenswert?

Ich will ein Programm schreiben welches auf dem Arduino mit random eine 
Zufallszahl gneriert. Abhängig von dieser soll damit dann ein anderer 
Teil ausgeführt werden.
1
void setup() {
2
  // put your setup code here, to run once:
3
Serial.begin(9600);
4
int s = random(1, 5);
5
}
6
7
void loop() {
8
int s;
9
switch (s){
10
 case 1:
11
  Serial.println(1);
12
delay(800);
13
Serial.println("rot");
14
delay(800);
15
Serial.println("grün");
16
delay(800);
17
Serial.println("bitte eingeben");
18
break;
19
20
case 2:
21
Serial.println(2);
22
delay(800);
23
Serial.println("rot");
24
delay(800);
25
Serial.println("grün");
26
delay(800);
27
Serial.println("bitte eingeben");
28
break;
29
30
case 3:
31
Serial.println(3);
32
delay(800);
33
Serial.println("rot");
34
delay(800);
35
Serial.println("grün");
36
delay(800);
37
Serial.println("bitte eingeben");
38
break;
39
40
case 4:
41
Serial.println(4);
42
delay(800);
43
Serial.println("rot");
44
delay(800);
45
Serial.println("grün");
46
delay(800);
47
Serial.println("bitte eingeben");
48
break;
49
}
50
}

von Georg G. (df2au)


Lesenswert?

für loop() ist s eine lokale Variable. Ausserhalb von loop() kannst du 
mit ihr machen, was du willst. loop() merkt das nicht.

Deklariere s global.

von Karl H. (kbuchegg)


Lesenswert?

Aber auch dann ergibt sich immer noch bei jedem Einschalten des Arduino 
dieselbe Sequenz.

Was ist eigentlich so schwer daran, die Arduino Doku zu lesen. Da steht 
das alles drinnen. Ganz im Gegenteil, die Arduino Doku ist eigentlich 
sogar recht ausführlich.
http://arduino.cc/de/Reference/Random

von Jürgen S. (jurs)


Lesenswert?

LeDran schrieb:
1
> void setup() {
2
> ...
3
> int s = random(1, 5);  // deklariere eine Variable, die nur in "setup" gültig ist
4
> }
5
> 
6
> void loop() {
7
> int s; // deklariere eine Variable, die nur in "loop" gültig ist
8
> ...
9
> }
10
>


Die beiden deklarierten Variablen haben absolut nichts miteinander zu 
tun. Die eine deklarierte Variable gilt nur in der Funktion setup und 
die andere Variable gilt nur in der Funktion loop.

Am besten informierst Du Dich mal über den Gültigkeitsbereich von 
Variablen. Vielleicht möchtest Du, wie vom Vorredner bereits 
vorgeschlagen, stattdessen eine global deklarierte Variable verwenden.

Und: Du erzeugst Pseudo-Zufallszahlen. So wie Du es machst, werden die 
Zufallszahlen immer in derselben Reihenfolge erzegt, d.h. bei 
verschiedenen Aufrufen der random-Funktion werden zwar nacheinander 
verschiedene Zufallszahlen erzeugt, aber die Reihenfolge der erzeugten 
Zufallszahlen ist bei jedem Programmstart exakt identisch. D.h. wenn 
Dein Programm nur einmal eine Zufallszahl erzeugt, wird es bei jedem 
Programmstart dieselbe "Zufallszahl" sein, die erzeugt wird. Wenn Du 
möchtest, dass ab Programmstart weg verschiedene Reihen von 
Zufallszahlen erzeugt werden, muss auch der Zufallszahlengenerator mit 
einem zufälligen Wert initialisiert werden. Siehe auch:
http://arduino.cc/de/Reference/RandomSeed

von Georg G. (df2au)


Lesenswert?

Jürgen S. schrieb:
> Zufallszahlengenerator mit
> einem zufälligen Wert initialisiert werden.

Daran haben sich schon diverse Experten versucht. Der Arduino Vorschlag 
mit dem nicht angeschlossenen Port widerspricht einer guten 
Schaltungsauslegung und ist soooo zufällig auch nicht.

von LeDran (Gast)


Lesenswert?

Ok danke das klappt habe ich schlichtweg übersehen dass es oben 
drinsteht.

Wo jetzt noch der Text mit Nummer und Farbe zwischen den Cases steht 
sollen LEDs in einer vorgegebenen Reihenfolge angesteuert werden. 
Anschließend muss die Reihenfolge wieder über Taster eingegeben werden. 
Habe bei einjem Zahlenschlossbeispiel geshen dass man sowas über ein 
Array lösen kann, werde aber nicht ganz schlau aus der Beschreibung auf 
arduino.cc.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.