Hallo allemaal,
Ik wil 2 servo's telkens een nieuwe random positie laten krijgen, maar dit lukt me niet. Of jullie mij daarbij willen helpen:+
Tot nu toe heb ik dit:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;Algemene constanten
SYMBOL HoogsteGetal = 700 ;Bepaalt de maximale waarde die getrokken kan worden
SYMBOL LaagsteGetal = 1900 ;Bepaalt de minimale waarde die getrokken kan worden
;Compiler berekeningen
SYMBOL DeelFactor = 65535 / ((HoogsteGetal + 1) - LaagsteGetal) ;Bereken waarde voor deling
;Variabele declareren
;WORD
DIM POSITIE AS WORD ;WORD(!) variabele bevat de positie van de motor-as
DIM X AS WORD ;In WORD variabele 'x' komen de willekeurige getallen
;BYTE
DIM Teller AS BYTE ;Teller voor FOR...NEXT lus
DIM RND AS BYTE
CLEAR ;Wis alle RAM geheugen
GOTO Hoofdprogramma
;Subroutine
Load_RND:
FOR Teller = 1 TO 11 ;Toevalsgenerator 11x schudden
SEED X + 2221 ;Verhoog 'x' met 2221, wat een nieuwe startwaarde oplevert
X = RANDOM ;Geef willekeurige waarde aan variabele 'x'
NEXT
RND = X / DeelFactor
RND = RND + LaagsteGetal ;Verhogen met laagste getal
IF RND > HoogsteGetal THEN Load_RND ;Af en toe kan 'RND' hoger worden, dan nog een keer
RETURN
Hoofdprogramma:
WHILE 1=1
GOSUB Load_RND
FOR POSITIE = RND TO RND - 50 STEP -10
SERVO PORTA.0, POSITIE ;Stuur 'Positie' pulsjes naar PORTA.0
DELAYMS 20 ;20mSec = 50Hz, eventueel wijzigen bij ander type motor
NEXT
GOSUB Load_RND
FOR POSITIE = RND - 50 TO RND STEP 10
SERVO PORTA.1, POSITIE ;Stuur 'Positie' pulsjes naar PORTA.0
DELAYMS 20 ;20mSec = 50Hz, eventueel wijzigen bij ander type motor
NEXT
WEND
END
Maar dit werkt niet. Hoe zou ik het aan moeten pakken?
Gr
Sander
Doorgaan in je oude topic!
http://www.circuitsonline.net/forum/view/78195