Pages: [1]   Go Down
Author Topic: Schwierigkeiten mit Zufall beim Programmieren.  (Read 1274 times)
0 Members and 1 Guest are viewing this topic.
Witten an der Ruhr
Offline Offline
God Member
*****
Karma: 7
Posts: 757
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Forum

Ich habe mein Aquarien Programm soweit fertig. Also Beleuchtung über RTC an und Aus, Beleuchtung Zeitgesteuert dimmen, Pumpensteuerung, alle Ausgaben die ich auf meinem Terminal sehen möchte, Eingaben für Uhr und Datum über Terminal, Temperatur Anzeige für den Lichtkasten ob Lüfter an oder Aus sein soll, Temperatur Angabe für Wasser. Ich habe mir eine Lochraster Platine mit Rote,Grüne und Blaue  Led`s gelötet und darüber möchte ich 4x im Monat für ca 10 bis 15 Min. an dem Ausgewählten Tag eine Unwetter Simulation erzeugen. Das Problem ist nicht das Programmieren an sich , das habe ich schon hinbekommen , lediglich ist der Code so wie ich Ihn schreibe einfach zu lang. und zwar habe ich das so gelöst. 
analogWrite(ledPin1, 255);
delay(60);
analogWrite(ledPin3, 115);
analogWrite(ledPin1, 115);
delay(10);
analogWrite(ledPin2, 200);
analogWrite(ledPin1, 200);

u.s.w.

Das alles in einer If Abfrage. jedoch wird der Code dadurch Ellen lang, obwohl es im Grunde super funktioniert. Jetzt habe ich mich ein wenig eingelesen und denke das man das auch über Random(x,Y) platz sparender und schöner gestalten kann. Kann mir eventuell einer ein Tutorial über Zufalls Generator in C++ empfehlen oder mir einen Ansatzpungt liefern wie das mit dem Random funktioniert. Ich denke das ich einfach an der Sache vorbei denke und somit nichts richtiges zustande bekomme.

l.G.Jürgen
Logged

l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

Offline Offline
Faraday Member
**
Karma: 119
Posts: 3966
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Da brauchst du keine große Anleitung:
http://arduino.cc/en/Reference/Random

Beachte, dass random(100,200) Zahlen von 100 bis 199 erzeugt, d.h. die untere Grenze ist inklusiv, die obere exklusiv.

Was du verstehen musst, ist dass die Generatoren Pseudo-Random sind. Die werden mit einem sogenannten Seed initialisiert, aber für jeden Seed wird immer die gleiche "Zufalls"-Sequenz abgerufen.

Den Seed kann man hiermit einstellen:
http://arduino.cc/en/Reference/RandomSeed

Wie da beschrieben kannst du einen echten zufälligen Start-Wert erzeugen wenn du einmal analogRead von einem offenen Eingang machst. Offene Eingänge floaten und haben daher einen unbestimmten Wert. Wenn du aber z.B. randomSeed(0) machst, ist die Sequenz immer gleich. Das reicht vielleicht auch, gerade wenn das Gerät wie bei dir selten an-und ausgeschaltet wird.

Du kannst auch random() auf die LED Pins machen.
« Last Edit: July 25, 2013, 05:50:53 pm by Serenifly » Logged

Witten an der Ruhr
Offline Offline
God Member
*****
Karma: 7
Posts: 757
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich danke Dir Serenifly, für deine schnelle Antwort.

l,G.Jürgen
Logged

l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

Offline Offline
Faraday Member
**
Karma: 42
Posts: 2555
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
analogWrite(ledPin1, 255);
delay(60);
analogWrite(ledPin3, 115);
analogWrite(ledPin1, 115);
delay(10);
analogWrite(ledPin2, 200);
analogWrite(ledPin1, 200);

Das wird so aber auch noch nicht klappen. Die Ausgänge werden nirgendswo wieder auf LOW gesetzt, oder aber der Teil wurde hier nicht mitgeschickt.


Habe hier eine kleine Subfunktion (mit Hilfe der Community) erstellt. Sie
Code:
void ledPinsPwm1Flash() {
  static unsigned long previousMillis; 
  unsigned long currentMillis = millis();
  static int interval1, interval2, r;

  if(currentMillis - previousMillis > interval1) {
    r = random(0, ledCount1);
    digitalWrite(ledPinsPwm1[r], HIGH);
    interval1 = ramdom (100,500);
    previousMillis = currentMillis;
    interval2 = random(30, 50);
  }

  if(currentMillis - previousMillis > interval2) {
    digitalWrite(ledPinsPwm1[r], LOW);
  }
}

Kurze Erklärung, eine beliebige LED (hier in einem Array ledPinsPwm1[] zusammengefasst, geht innerhalb von 100 -500ms an und erlischt nach 30-50ms. Damit liese sich ein "Gewitter" mit weißen Leds sehr gut emitieren.
Logged

Keinen technischen Support über PN!
Hat dir meine Antwort gefallen, nicht sparsam mit dem Karma sein smiley-wink

NRW
Offline Offline
Full Member
***
Karma: 3
Posts: 149
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das hört sich richtig spannend an, eine Gewittersimulation. Aber jetzt mal eine OT Frage: Brauchen die Fische das oder machst du das einfach nur, weil es möglich ist?

Frank

Logged

Anfänger, der sich am Mega versucht. (Wegen Pin-Mangel bin ich vom Uno auf den Mega umgestiegen) Aktuelles Projekt: http://mfc-wittgenstein.

Witten an der Ruhr
Offline Offline
God Member
*****
Karma: 7
Posts: 757
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sschultewolter, das ist nur ein Beispiel, im Programm werden die Pinne wieder zurück gesetzt, das Programm läuft ja so schon aber mir gefällt der Code so nicht. Mit Random hätte ich wahrscheinlich mehr Möglichkeiten und bräuchte nicht soviel Platz.
Gelegenheitsbastler, nein die Fische brauchen das nicht, die Brauchen aber auch keine Dimmung oder Temperatur Anzeige, das ist lediglich mein Hobby das Riffaquarium und alles andere ist im Grunde Spielerei.

l.G.Jürgen
Logged

l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1889
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Schlammbeißer (Gewitterfisch)

30 cm langer Schmerlen-Fisch des Süßwassers von aalförmigem Körperbau und mit 10 Mundbarteln, die dem meist am Boden der Gewässer lebenden Tier zum Auffinden der Nahrung dienen (Tast- und Geschmackssinn). Vor Gewittern schnappt der Schlammbeißer Luft an der Oberfläche, weil der Sauerstoffgehalt des Wassers mit steigender Temperatur und fallendem Luftdruck abnimmt (Gewitterfisch). Der Schlammbeißer lebt einzeln, übersteht die Austrocknung des Wohngewässers durch intensive Darmatmung; in Mittel- und Osteuropa verbreitet.




* gewitterfisch.jpg (69.71 KB, 786x622 - viewed 27 times.)
Logged

Witten an der Ruhr
Offline Offline
God Member
*****
Karma: 7
Posts: 757
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich habe keine Schlammfreffer sondern


* mandarin paar.jpg (84.08 KB, 400x300 - viewed 28 times.)
Logged

l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

Germany
Online Online
Faraday Member
**
Karma: 58
Posts: 3045
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
OT Frage: Brauchen die Fische das ?

Ich gehe mal davon aus, dass sie noch nicht mal RGB-gemischtes Licht so sehen wie wir.
Und ob sie 200Hz Multiplexereien nicht gräßlich flimmern sehen, weiß ich nicht.

Aber besser als ein Pangasius auf einer Fischfarm haben sie's allemal, obwohl die dort mehr zu fressen kriegen smiley-wink
Logged

Offline Offline
Sr. Member
****
Karma: 11
Posts: 491
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

OT: Deine Mandarins - also Salzwasser Aquarium !!!
Deshalb der Überwachungsaufwand.
Logged

Arduino UNO,MEGA  Fremdgänger mit dem  Nucleo L152RE   
Dunkel die andere Seite ist. - Klappe, Yoda, und iss deinen Toast :-)

Witten an der Ruhr
Offline Offline
God Member
*****
Karma: 7
Posts: 757
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja rudirabbit, ich habe schon seit etlichen Jahren ein Riff Aquarium, es lief ja früher auch Top. Aber mit dem Arduino zur Überwachung hat man echt alles im Griff. Es ist noch so vieles was ich gerne Verwirklichen möchte mit dem Controller , aber ich fange ja gerade einmal mit dem Programmieren an, aber es macht schon Spaß wenn man sieht das was passiert. smiley

l.G.Jürgen
Logged

l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

Witten an der Ruhr
Offline Offline
God Member
*****
Karma: 7
Posts: 757
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So ich habe alles hin bekommen mit der Unwetter Simulation und habe es sogar als Anzeige auf dem terminal. War doch nicht so schwer mit dem Random, man muss nur ein wenig genauer lesen und sich hinein versetzten. Danke an alle die mir die Links und die Tipps gegeben haben.

l.G.Jürgen
Logged

l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

Pages: [1]   Go Up
Jump to: