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!

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
