FOR loop basic stamp

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

FOR loop basic stamp

Inlägg 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.
Användarvisningsbild
mri
Inlägg: 1165
Blev medlem: 15 mars 2007, 13:20:50
Ort: Jakobstad, Finland
Kontakt:

Re: FOR loop basic stamp

Inlägg av mri »

Sorry, har inte programmerat basic på XX antal år, men skall det inte vara:
NEXT x
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: FOR loop basic stamp

Inlägg av Pajn »

Det ger syntax error
Användarvisningsbild
AndLi
Inlägg: 18308
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: FOR loop basic stamp

Inlägg 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?
Senast redigerad av AndLi 10 februari 2010, 19:09:48, redigerad totalt 1 gång.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: FOR loop basic stamp

Inlägg 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
X-IL
EF Sponsor
Inlägg: 8488
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: FOR loop basic stamp

Inlägg 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.
Senast redigerad av X-IL 10 februari 2010, 19:12:42, redigerad totalt 1 gång.
Användarvisningsbild
AndLi
Inlägg: 18308
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: FOR loop basic stamp

Inlägg 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!
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: FOR loop basic stamp

Inlägg 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)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: FOR loop basic stamp

Inlägg 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... :-)
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: FOR loop basic stamp

Inlägg av Pajn »

Förlåt, tog bara hela "funktionen" eller labeln eller vad det ska kallas.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: FOR loop basic stamp

Inlägg 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
Användarvisningsbild
Glenn
Inlägg: 36772
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: FOR loop basic stamp

Inlägg 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.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: FOR loop basic stamp

Inlägg 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 :)
Skriv svar