Proton ile rasgele sayı üretmek

Başlatan farukzeynep, 27 Ekim 2004, 07:15:57

farukzeynep

Proton ile 1-8 arası rasgele sayı üretmek istiyorum.Nasıl Yapabilirim?Yardımlarınız için teşekkürler.

fsan

@farukzeynep

proton+ manualine bir gözat.
RANDOM Generate a pseudo-random number
x=random gibi bir yöntem ile

http://www.picbasic.org/forum/showthread.php?t=2085&highlight=random

farukzeynep

Aynen dediğin gibi yaptım fsan.Ama hep aynı sayılar üretiliyor ve istediğim sınırlar içerisinde sayılar üretemiyorum.Bir çözüm lütfen...

fsan

merhaba,
Proton+ helpte "RANDOM" yazinca asagidaki örnege rastladim

Alıntı YapOverview
Seed the random number generator, in order to obtain a more random result.
bunu bir denermisin?
Alıntı YapSEED

Syntax
SEED Value

Availability
All devices.

Overview
Seed the random number generator, in order to obtain a more random result.

Operators
Value can be a variable, constant or expression, with a value from 1 to 65535. A value of $0345 is a good starting point.

Example

' Create and display a RANDOM number
	DEVICE = 16F877
	XTAL = 4
	DIM RND AS WORD
	
	SEED $0345
	CLS
AGAIN:
	RND = RANDOM
	PRINT AT 1,1,DEC RND, "     "
	DELAYMS 500
	GOTO AGAIN

See also: RANDOM.

farukzeynep

Denedim ama olmadı.Hep aynı sayılar üretiliyor.

fsan

biriside de söyle bir sey yapmis
DICE = ((RANDOM / 2) & 6) ' MAKE SURE DICE IS NOT GREATER THAN 6


bu kodda DICE degiskenin 6 dan üsteki sayilari kabul etmemesi saglaniyor.

ftsahin

Pic'in içinde timer olmadığı için random olarak üretilen sayıların hep aynı çıkması normaldir. Gerçekten random sayı üretmek istiyorsanız ya realtime clock kullanmalısınız ya da bir sayı dögüsü içerisinde kullanıcıdan veya başka bir sistemden bilgi alması lazım. Mesela bir döngü içerisinde bir butona basılınca sayının o anki değerine göre rsagele sayı üretirseniz gerçek bir random sayı üretmiş olursunuz.

DumrulBey

Merhaba,

Evet, gerçekten teoride bir saat mekanizmasından alınan veri denklem içine konularak rasgele sayılar üretiliyor. Bir de PIC için kullanabileceğimiz PRM (Parazitik Rasgelelik Metodu) yöntemi var. Tabii ihtiyacınız olan bu sefer saat yerine ADC (Analog Digital Convertor) ve boş bir bacak. Analog bilgi girişi alabileceğimiz bacağa, bir ucu boşta bir kaç tur sarılı bobin koymak yeterli.

Oluşturacağınız denkleme ADC'den aldığınız değer üst ve alt sınır (limit) değerlerini ile üst üste tekrar etme şartını ekleyerek yaparsanız daha işlevsel (functional) bir alt program (sub routine) çıkar. Ben PIC Basic bilmiyorum! Artık bilen bir arkadaş bu alt programı pek zorlanmadan yazabilir. Sadece biraz matematik.

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

fsan

Alıntı yapılan: "fsan"(Resim gizlendi görmek için tıklayın.)
DEVICE 16F84
XTAL 4
SEED $0345

DIM ZAR[6] AS BYTE

'          abcdefg	            a
ZAR[0] =  %10011111 '1      -------
ZAR[1] =  %00100101 '2   f |       | b
ZAR[2] =  %00001101 '3     |   g   |
ZAR[3] =  %10011001 '4      -------
ZAR[4] =  %01001001 '5   e |       | c
ZAR[5] =  %01000001 '6     |       |
'                           -------  o dp
'                              d

TRISA = %11001
TRISB = %00000001
PORTA = 0
PORTB = 0

DIM ZAR1 AS BYTE
DIM ZAR2 AS BYTE
DIM I AS BYTE
DIM X AS BYTE

GOSUB ZAR_AT
X = 0

BASLA:
    IF X = 0 THEN 
    	PORTB = ZAR[ZAR1]
    	HIGH PORTA.1
    	X = 1 
    ELSE 
    	PORTB = ZAR[ZAR2]
    	HIGH PORTA.2
    	X = 0 
    ENDIF
    DELAYMS 10
    IF PORTA.0 = 1 THEN GOSUB ZAR_AT
    LOW PORTA.1
    LOW PORTA.2
GOTO BASLA

ZAR_AT:
	HIGH PORTA.1
	HIGH PORTA.2
	FOR I = 5 TO 0 STEP -1
		HIGH PORTB
		DELAYMS 50
		PORTB = ZAR[I]
		DELAYMS 100
	NEXT
	ZAR1 = ((RANDOM /2) & 5) ' ZAR 6 DAN BÜYÜK OLMASIN
	ZAR2 = ((RANDOM /2) & 5)
RETURN
http://home.no/fsan/projects/Diverse/zar/

iyide arkadaslar,
bu RANDOM komutunu niye yapmislar veya nasil kullanacagiz peki?

yukaridaki kod yazip denedim ehh, sonuc fena değil :P
zamaniniz olursa birde siz gözatin belki benim gözden kacirdigim bir sey vardir

Sevgiler, saygilar..