Sida 1 av 1

FOR loop basic stamp

Postat: 10 februari 2010, 18:39:33
av Pajn
Jag kan inte få FOR loopar att funka
Ex:

Kod: Markera allt

ba:
  FOR x=1 TO 100
  PULSOUT r,800
  PULSOUT l,700
  PAUSE 20
  NEXT
  GOTO ru
Men koden verkar ändå bara köras en gång.

Re: FOR loop basic stamp

Postat: 10 februari 2010, 18:44:35
av mri
Sorry, har inte programmerat basic på XX antal år, men skall det inte vara:
NEXT x

Re: FOR loop basic stamp

Postat: 10 februari 2010, 18:53:09
av Pajn
Det ger syntax error

Re: FOR loop basic stamp

Postat: 10 februari 2010, 18:59:03
av AndLi
Det står "GOTO ru" men labeln heter ju "ba:"
Nu var det ju iof 10 år sen jag lekte med BasicStampen på allvar.
Borde gett en varning att labeln inte finns.

edit: läser man BS referensmanualen så använder de bara "NEXT" men i inledningen där de beskriver syntaxen står "NEXT {counter}" så den borde vara valfri. Men tydligen inte?

Re: FOR loop basic stamp

Postat: 10 februari 2010, 19:08:04
av Pajn
ru är en annan variabel som den ska gå till efter att den har utfört ba (kort för runt/backa)

Löste det, måste vara mellanrum:

Kod: Markera allt

ba:
  FOR x = 1 TO 100
  PULSOUT r,800
  PULSOUT l,700
  PAUSE 20
  NEXT
  GOTO ru

Re: FOR loop basic stamp

Postat: 10 februari 2010, 19:10:35
av X-IL
Är inte NEXT "slutet" på FOR-loopen? Misstänker att det är tänkt att hoppa till ru när loopen är klar. Annars ser jag inget fel, men jag har inte programmerat STAMP, och inte Basic på många år.

EDIT: Nu hade det lösts medan jag skrev, är det så att X tilldelades värdet 1 istället? Då tycker jag att den borde varna för skräp bakom om det nu var så att FOR 1 (som det borde evalueras till) är giltigt.

Re: FOR loop basic stamp

Postat: 10 februari 2010, 19:11:29
av AndLi
det förklarar varför NEXT x inte heller funka, den kallade helt enkelt inte for loopen för x.
Nu borde altså NEXT x också funka!

Re: FOR loop basic stamp

Postat: 10 februari 2010, 19:23:08
av Pajn
Precis, NEXT är slutet och efter det ska den fint knalla vidare till ru.

Ni kanske ser bättre med hela koden:

Kod: Markera allt

' {$STAMP BS2sx}

INPUT 2
INPUT 10
INPUT 14

irDetectRight VAR Bit
irDetectLeft VAR Bit
bumper VAR Bit
x VAR Byte
r CON 1
l CON 12
DEBUG "start"

TOP:
  bumper = IN10
  IF bumper = 0 THEN ba
  FREQOUT 0, 1, 38500
  irDetectRight = IN2
  FREQOUT 15, 1, 38500
  irDetectLeft = IN13
  IF irDetectRight = 0 THEN le
  IF irDetectLeft = 0 THEN ri
  GOTO fr

fr:
  PULSOUT r,500
  PULSOUT l,1008
  PAUSE 20
  GOTO TOP

ba:
  FOR x = 1 TO 100
  PULSOUT r,800
  PULSOUT l,700
  PAUSE 20
  NEXT
  GOTO ru

ru:
  FOR x = 1 TO 80
  PULSOUT r,800
  PULSOUT l,800
  PAUSE 20
  NEXT
  GOTO TOP

ri:
  FOR x = 1 TO 10
    PULSOUT r,800
    PULSOUT l,800
    PAUSE 20
  NEXT
  GOTO TOP

le:
  FOR x = 1 TO 10
    PULSOUT r,700
    PULSOUT l,700
    PAUSE 20
  NEXT
  GOTO TOP
Jag vet att ru skulle kunna skippas och istället köra en GOSUB ri i en loop, men nu är program minnet inget problem så då är detta enklare (om jag vill lägga in modifieringar)

Re: FOR loop basic stamp

Postat: 10 februari 2010, 19:40:20
av sodjan
Alltså, det *verkliga* problemet med "ba:" och "GOTO ru" var att de
var med i ditt exempel i första inlägget över huvudtaget ! De har ju
inte ett smack med FOR/NEXT looppen att göra i alla fall... :-)

Re: FOR loop basic stamp

Postat: 10 februari 2010, 19:49:19
av Pajn
Förlåt, tog bara hela "funktionen" eller labeln eller vad det ska kallas.

Re: FOR loop basic stamp

Postat: 10 februari 2010, 20:04:50
av vfr
Alltså, ett bra tips för felsökning som påtalats många ggr, är att bryta ner koden tills det bara återstår något som verkligen visar felet och ingen annan oväsentlig kod. I riktigt många fall så hittar man felet själv under tiden man gör det! :D

Re: FOR loop basic stamp

Postat: 11 februari 2010, 01:04:02
av Glenn
Hur avgör du att koden bara körs en gång ? kollar du med oscilloscope ? "pause 20" är väl 20ms, och "pulsout r,800" borde ge en 8ms lång puls (om du kör 4MHz?) på pinne r, "pulsout l,700" en 7ms på pinne l.

Det pulståget är väl inte helt lätt att detektera utan skåp, även om väl förloppet borde ta nåt i stil med 3500ms = 3.5sek ?

Det ser korrekt ut om det är det du vill göra, även om jag inte kan nåt om basic stamp egentligen, däremot PBP som är släkt.

Re: FOR loop basic stamp

Postat: 11 februari 2010, 15:12:47
av Pajn
Pulserna går till ett servo, en puls ger en väldigt liten rörelse medan 100 gör att roboten förflyttar sig med ~ hela sin längd. Men som sagt nu funkar det :)