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
ach ja, ich mir gerad eingefallen, dass die ja problemlos selber zu machen ist. einfach zufallszahlen bis 100 und dann 0-20 für 20%, 21-60 für 40% usw
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
Ooops, blödes kopieren und einfügen :-) Naturlich nicht immer LED1 an, sondern LED2, LED3, LED4 (von oben nach unten) Gruß Ingo
Hallo Sehr Interssant !! Mich würde auch Intressieren wie so ein Code aussieht ?? Habs gerade versucht klappt bei mir überhaupt nicht. Kann mal jemand ein Beispiel geben ?? Gruß Rainer
@Ingo Henze Würde bedeuten: Wenn z < 10: Alle an ;-) Man muß schon z > 10 && z < xx machen für die nächste LED. Grüße, André
@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é
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
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
@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é
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
Interessant ist eher die Erzeugung der Zufallszahlen, das wird ne runde kniffliger als die LEDs leuchten zu lassen. Haste das denn überhaupt schon gelöst? der Flo
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
Hallo hat denn schon jemand einen Funktionierenden Basic Code ?? Würde mich auch dem Projekt zuordnen wollen. Habe allerdings keine Ahnung wie man da beginnen könnte. LEO
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
quasi russisch-roulette mit hochprozentigem wo man garantiert immer "verliert"?! hört sich gut an ;-)
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...
ah fehler: das do..loop in der zufall-subroutine muss weg und am schluß muss ein return hin!
@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 :)
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ß
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
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.
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...
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
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.
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
ja stimmt. man könnte das random jetzt eigentlich auch ganz weglassen und nur den wert des timers als "zufallszahl" nutzen.
Hallo Jens123 Das verstehe ich jetzt nicht wie man das umsetzen kann. Kannst Du da mal ein beispiel zeigen ? Währe echt interessant. Merci Heinz
Nope =) Streng dein Hirn an, dann schaffst du es auch Timer0 zaehlt immer weiter Du definierst die 4 Zahlenbereiche fuer deine LEDs vergleichst diese mit dem timer und schaltest die led Ganu einfach
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 !!!
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 :-)
Hallo Das teil muß ich auch haben. Habt Ihr denn die Hardware auch schon fertig ?? Wenn ja hätte ich auch gerne den schaltplan.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.