Zufalls Funktion

Gast #122483
Lesenswert?

Hallo
Ich programmiersprache mit Bascom.
Geht das mit einem 90s2313 das  wenn man einen taster drückt
zufällig eine von vier leds leuchtet. Also irgend eine der vier Led ???
Welchen Befehl braucht man dazu ??

Kann man auch eine Wahrscheinlichkeit mit dazu bringen ??

z.b. das led 1 10%
         led 2 40%
         led 3 60%
         led 4 80%

Währe sehr dankbar für Antworten.
Danke
Stefan
Gast #122486
Lesenswert?

Die Gewichtung ist nich besonders schwierig, wenn man davon ausgehen
kann, das die Zufallszahlen im Wertebereich gleichverteilt sind.

- Zufallszahl z im Bereich 0 bis 99 erzeugen
- wenn z < 10 dann LED1 ein
- wenn z < 40 dann LED1 ein
- wenn z < 60 dann LED1 ein
- wenn z < 80 dann LED1 ein
- und wieder von vorn anfangen

Gruß
Ingo
Gast #122490
Lesenswert?

@Ingo:

Kannst aber Recht haben. Die Frage von Stefan ist ein wenig unglücklich
gewählt:

> zufällig eine von vier leds leuchtet.
Also nie > 1. Dann aber eine Gesamtwahrscheinlichkeit von > 100% (10% +
40 % + 60% + 80%) haben wollen.
Beides geht nun nicht. Aber ich sehe, daß Du Dich für Variante 2
entschieden hast. also nehm ich meine Verurteilung zurück ;-)

Grüße,
André
Gast #122491
Lesenswert?

Hallo
Tolle Aufgabe finde ich habt Ihr da.
Lösung würde auch mich Interessieren !
Werde Morgen auch mal anfangen zu coden g
Wenn jemand schon ein fertiges listing hat, könnten
wir es ja mal als Projekt verfeinern Oder ?????

Viel Spaß
Flocky
Gast #122492
Lesenswert?

Wenn nie zwei oder mehr LEDs gleichzeitig an sein sollen, geht das so
natürlich nicht, wie ich es oben skizziert habe.
Eigentlich geht es dann gar nicht, denn die Summe der
Wahrscheinlichkeiten ist größer als 100%, wie auch André in seinem
zweiten Beitrag treffend bemerkt hat :-)

Nehmen wir mal den größten Wert von 80% für LED4,dann bleiben für alle
anderen LEDs ja nur noch 20%, in denen sie eingeschaltet werden sollen,
und das schafft man nur noch für LED1.

Man könnte die Verteilung wieder auf 100% runterskalieren, und mit
(gerundeten)
  5%
 21%
 32%
 42%
rechnen.

Dann klappt auch Variante 1.

Man muß halt definieren, was man will. Immer nur genau eine, oder die
gewünschte Wahrscheinlichkeit auch größer 100% in der Summe

Gruß
Ingo
Gast #122493
Lesenswert?

@Ingo:

> Man muß halt definieren, was man will. Immer nur genau eine, oder
die
> gewünschte Wahrscheinlichkeit auch größer 100% in der Summe
Sag ich doch.

Aber solange keine genaue Frage gestellt wird, kann man auch keinen
Code erstellen. Obwohl Deine Erklärung und die anderen Beiträge
eigentlich Hilfe genug sind.

Grüße,
André
Gast #122494
Lesenswert?

Da fällt mir ein, was unser Dr. Richlowsky immer gesagt hatte, bei dem
wir in die Geheimnisse der Assemblerprogrammierung eingeweiht wurden:

"Wenn man sich die Mühe macht, die Frage erstmal ordentlich zu
formulieren, kommt man manchmal dabei bereits selbst auf die Antwort
(Lösung)"

Sinngemäß oder so ähnlich.
Da ist wohl was dran :-)

Gruß
Ingo
Gast #122497
Lesenswert?

Sicher, aber der muss auch erstmal programmiert ("copy+paste"ed)
werden. ;)
Und schliesslich hat er nach einem Befehl dafür gesucht, und was ich
damit sagen wollte ist, dass ich ihn darauf hinweisen wollte dass es
bei µCs i.A. keine random() Funktion gibt.

greetings, der Flo
Gast #122499
Lesenswert?

Hallo Danke erst mal an Euch alle.
Sorry das mit meiner % verteilung wahr wohl mist.

Nehmen wir mal als Neue % Werte

 das     led 1  5%
         led 2 20%
         led 3 25%
         led 4 50%
---------------------------
  gesamt   =  100%

Frequenz 4 Mhz
Taster auf PD1 (aktiv wenn High)
Led 1  auf PB1
Led 2  auf PB2
Led 3  auf PB3
Led 4  auf PB4

Schön währe noch ein lauflicht wie eine auslosung bis nur noch eine Led
an ist.
Led bleibt solange an bis der Taster nochmal gedrücht wird.

Leider finde auch ich den anfangsfaden nicht so richtig.

Für Beispiele bin ich sehr Dankbar.

(Das Teil soll überigens der gag auf unserer Halloween Party am 31.
werden Wobei
led 1  dann z.b. 2cl Jack Daniels trinken muß
led 2  dann z.b. 2cl Jägermeister trinken muß
usw...
Ist doch eine Gute Idee um für Stimmung zu sorgen oder ???ß

Gruß
Stefan W
Gast #122501
Lesenswert?

Dim I As Byte

Do
Debounce Pind.1 , 1 , Zufall , Sub
Loop

Zufall:
Do
  I = Rnd(100)   'get random number from 0-99
  Select Case I
   Case 0 To 4 : Portb = &B0100000
   Case 5 To 24 : Portb = &B0010000
   Case 25 To 49 : Portb = &B0001000
   Case 51 To 99 : Portb = &B0000100
  End Select
Loop

Pausen und blinken und sowas kannste ja selbst einbauen...
Gast #122503
Lesenswert?

@florian:
"Und schliesslich hat er nach einem Befehl dafür gesucht, und was ich
damit sagen wollte ist, dass ich ihn darauf hinweisen wollte dass es
bei µCs i.A. keine random() Funktion gibt. "

gibts auch bei anderen systemen in der regel nicht, alles nur pfusch :)
Gast #122504
Lesenswert?

Hay anfänger
Vielen Dank
Denkst Du das es wirklich so einfach geht ??
Werde es heute abend gleich mal probieren.
Bin gerade beim Hardware zusammenbauen.
Wenns klappt gebe ich hier nochmal gleich bescheid.
Und das Ergebnis von der Party werde ich Euch nach dem Härtetest
auch noch mitteilen.
Freue mich schon das Ding zu testen.

Danke an alle

Gruß
Stefan Weiß
Gast #122505
Lesenswert?

Hallo
Funktioniert schon sehr Gut.

Aber hier noch das Problem
Wenn die erste zahl generiert wird dann kommt immer die Zahl 49
Also strom aus und ein , dann Taster Pind.1 das erste mal kommt
immer 49 kann man da vieleicht was dran ändern ????
Gibt es da eine bessere lösung für das Lauflicht bei der ziehung ???

Gruß
Stefan






$regfile = "2313def.dat"
$crystal = 4000000
Config Portb = Output
Portb.5 = 0
Config Pind.1 = Input
Dim Z As Byte

Do
Debounce Pind.1 , 1 , Generator , Sub
Loop

Generator:
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Wait 1
Portb.1 = 1
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Waitms 300

Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Portb.4 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Waitms 200
Portb.1 = 1
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Waitms 300

Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Portb.4 = 1
Waitms 100
Portb.1 = 0
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Waitms 200
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0


Z = Rnd(100)
Select Case Z
Case 0 To 4 : Goto 1
Case 5 To 24 : Goto 2
Case 25 To 48 : Goto 3
Case 49 To 99 : Goto 4
End Select
Return


1:
Portb.1 = 1
Return

2:
Portb.2 = 1
Return

3:
Portb.3 = 1
Return

4:
Portb.4 = 1
Return
Gast #122506
Lesenswert?

Hay
Gib hald einfach einen festen startwert vor der sogenannten
zufallsauswahl an.
Lauflicht einfach mit bit verschiebung weiß aber auch nicht genau wie.

machs besser
ist aber eine lustige idee.
Gast #122507
Lesenswert?

Wenn du timer0 ansonsten nicht brauchst, kannst du hiermit eine nahezu
zufällige zahl erzeugen:

$regfile = "2313def.dat"
$crystal = 4000000
Config Portb = Output
Portb.5 = 0
Config Pind.1 = Input
Dim Z As Byte
Dim ___rseed As Word

Config Timer0 = Timer , Prescale = 1
Enable Timer0
Start Timer0

Do
Debounce Pind.1 , 1 , Generator , Sub
Loop

Generator:

'Blink-Blink...

Portb = 0

___rseed = Timer0
Z = Rnd(100)
Select Case Z
Case 0 To 4 : Portb.1 = 1
Case 5 To 24 : Portb.2 = 1
Case 25 To 48 : Portb.3 = 1
Case 49 To 99 : Portb.4 = 1
End Select
Return

zur erklärung von ___rseed: guck dir mal in der bascom-hilfe die
RND-erklärung an.

ps: das mit dem blinken geht um einiges schöner und kürzer ;-) aber wir
haben ja alle mal so angefangen...
Gast #122508
Lesenswert?

Hey danke SUPER
Jetzt klappt es wirklich Super ...
Haben uns heute schon mal ein bisschen mit dem Ding gespielt
macht wirklich spaß.
Nur das lauflicht ist wirklich nicht der Hit.

Den rseed befehl werde ich mir heute abend mal reinziehen.

Das mit dem Lauflicht und blinken usw.... würde mich noch Interessieren
wie man das besser und schöner machen kann ?
Macht man das normal mit Bit manipulation ???


P.S.
Hab übrigens schon einiges dazugelernt, dank Eurer Hilfe
Hab mir gerade das Bascom Buch bestellt, mal sehen ob mir das
was bringt.
Mir kommt es so vor das ich es am einfachsten mit kleinen Beispielen
(Aufgaben) erlernen kann.

Also werde ich mich als nächstes an so ein Lauf und blinklicht
setzen.


Danke nochmal
Stefan
Gast #122509
Lesenswert?

bitte...

wegen dem lauflicht: guck dir mal die shift und rotate befehle in
bascom an. kombiniert mit einer for-schleife oder "do..loop until"
könnte man das ganze etwas kompakter gestalten.

btw: ___rseed ist kein befehl sondern ne art variable, in der die
"startzahl" steht, die die rnd-funktion in bascom nutzt.
Gast #122510
Lesenswert?

hi
wieso sist das denn so schwer??

Variante1:
lass einen timer laufen.
nim einen entprellten taster
drueck den taster
liess das zaehlerregister aus
dann hast du schonmal eine zufallszahl..
das register sollte fo schnell uebergeflossen sein, dass du nicht sagen
kannst wann es in etwa bei 0 , 1 , 2, ,3 ... ist
nun hast du eine zahl
und der timer zaehlt bis 5000 (angenommen)
dann kannst du wenn die zahl zwichen 0 ... 500 ist die erste LED an
machen
ist die Zahl zwichen 501 .... 3000 machst die 2te an und so weiter
je groesser der unterschied ist zwichen der ersten und 2ten zahl um so
groesser ist die warscheinlichkeit, dass der timer da gerade zum
zeitpunkt drin ist, wenn du den taster drueckst

im grunde ganz einfach

evtl. solltest du mit asm anfanngen empfehle ich jedem der sich in die
welt der µCs einarbeiten will

Gruss Jens
Gast #122514
Lesenswert?

Hallo anfänger (obwohl Du sicher keiner bist)
Danke das mit dem lauflicht mit den shift und rotate befehlen habe ich
super hinbekommen. Habs sogar noch verfeinert mit einem zweiten
zufallsgenerator der dann verschiedene Lichteffekte (unterprogramme)
ablaufen lässt.
Jetzt kann sich das ding echt sehen lassen.
Ist ja fast ein Effektlicht mit zusatzfunktion geworden.

Danke hast mir sehr geholfen !!!
Gast #122515
Lesenswert?

bitte bitte...hab ich doch gern gemacht ;-)

mittlerweile bin ich vielleicht wirklich kein anfänger mehr, aber vom
profi noch weit entfernt. im vergleich mit gewissen anderen leuten hier
im forum ist der name bestimmt noch zutreffend :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren