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