MM
Learn by practice..
Hallo,
Eindelijk na veel proberen en testen een leuk programma geschreven. Nu ben ik aardig op weg maar snap nog niet alles, nu heb ik het volgende probleem: hieronder heb ik een stukje van mijn programma gezet en aangegeven welke regel ik weg wil halen alleen als ik dit doe krijg ik foutmeldingen (3stuks) onder andere dat mijn repeat/until lus niet correspondeerd.Mijn vraag, wat doe ik fout of zie ik over het hoofd?het zal iets simpels zijn maar ik kon er niet uit.
HoofdProgramma:
While 1 = 1
Toggle RunningLed
DelayMS 200
High LedsDim
Begin:
If SensorBegin = 0 Then
If SensorEind = 1 Then
GoSub LoopOp
Repeat
If SensorEind = 0 Then
High BuitenLamp
Repeat
If SensorBegin = 0 Then GoTo Begin
DelayMS 200
Inc Timer4
Until Timer4 = 200 Then
GoSub LoopTerug
Low BuitenLamp
Clear Timer4
GoTo Begin
Else
If SensorBegin = 0 Then GoTo Begin
DelayMS 500
Inc Timer2
EndIf
Until Timer2 = 20 Then
GoSub LoopTerug
Clear Timer2
EndIf
ElseIf SensorStoep = 0 Then
If SensorBegin = 1 Or SensorEind = 1 Then ;(DEZE REGEL WEG)
Repeat
GoSub LoopStoep
If SensorBegin = 0 Then
Break
DelayMS 100
Inc Timer1
EndIf
Until Timer1 = 10 Then
GoSub AllesLaag
Clear Timer1
EndIf
ElseIf SensorEind = 0 Then
If SensorBegin = 1 Then
GoSub LoopOpAchterstevoren
Repeat
If SensorBegin = 0 Then
DelayMS 5000
GoSub LoopOpAchterstevorenTerug
Else
DelayMS 500
Inc Timer3
EndIf
Until Timer3 = 50 Then
GoSub LoopOpAchterstevorenTerug
Clear Timer3
EndIf
Else
Daglicht = Pot Ldr, 200
If Daglicht > 30 Then
Low LedsDim
GoSub AllesLaag
GoTo ControleDonker
EndIf
EndIf
Wend
EndWat doe ik hier verkeerd?
Bvd,
Martin
[Bericht gewijzigd door Henry S. op (0%)]
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Ik mis oa. de 'Wend' onder de 'while' in het hoofdprogramma
En 2 repeats in 1 until
[Bericht gewijzigd door Kareltje op (17%)]
MM
Learn by practice..
De 'Wend' klopt dat je die mist deze staat wel in programma maar met kopieeren en plakken niet goed gegaan. maar ik zie geen 2 repeats met maar 1 until.
[Bericht gewijzigd door Henry S. op (39%)]
Op 1 november 2011 20:51:13 schreef Fuzzbass:
Als je correct zou inspringen, kom je er vanzelf achter.
Netjes documenteren kan ook helpen.
If SensorBegin = 0 Then
If SensorEind = 1 Then
GoSub LoopOp
Repeat '1ste repeat
If SensorEind = 0 Then
High BuitenLamp
Repeat '2de repeat
If SensorBegin = 0 Then GoTo Begin
DelayMS 200
Inc Timer4
Until Timer4 = 200 Then
GoSub LoopTerug
Low BuitenLamp
Clear Timer4
GoTo Begin
MM
Learn by practice..
If SensorBegin = 0 Then
If SensorEind = 1 Then
GoSub LoopOp
Repeat
If SensorEind = 0 Then
High BuitenLamp
Repeat
If SensorBegin = 0 Then GoTo Begin
DelayMS 200
Inc Timer4
Until Timer4 = 200 Then ;1e until
GoSub LoopTerug
Low BuitenLamp
Clear Timer4
GoTo Begin
Else
If SensorBegin = 0 Then GoTo Begin
DelayMS 500
Inc Timer2
EndIf
Until Timer2 = 20 Then ; 2e until
GoSub LoopTerug
Clear Timer2
Voor de duidelijkheid het programma werkt nu perfect. Als ik de regel die ik aangeef weghaal dan krijg ik foutmeldingen.
[Bericht gewijzigd door Henry S. op (29%)]
Klopt ook wel, bij elke repeat hoort ook een until
Dus, bij elke repeat die je weg haalt, moet je ook de until verwijderen, anders krijg je inderdaad foutmeldingen.
MM
Learn by practice..
Ook dat begrijp ik maar ik haal dat alleen niet weg. zoals je kan zien haal ik de regel boven de eerste repaet weg:
ElseIf SensorStoep = 0 Then
If SensorBegin = 1 Or SensorEind = 1 Then ;(DEZE REGEL WEG)
Repeat
GoSub LoopStoep
If SensorBegin = 0 Then
En daar snap ik niets van want het principe blijfd hetzelfde, het enige wat ik doe is 2 extra voorwaarden weghalen voordat hij aan zijn repaet/until lus mag gaan beginnen.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
MM
Learn by practice..
Zat ik toch verkeerd te kijken heb elke keer rond de verkeerde Endif zitten kijken. Nu werkt het wel. Bedankt voor het mee denken.
Op 1 november 2011 21:11:47 schreef Henry S.:
[...]
Netjes documenteren kan ook helpen.
Het zou ook helpen als sommige dingen duidelijk worden verteld. Zo kunnen met volgende post daar rekening mee worden gehouden. Als een vraag/post niet duidelijk is en er word half op gereageerd zal ook de volgende post geen verbetering hebben.
[Bericht gewijzigd door Henry S. op (14%)]
Wat ook kan helpen is eerst de FAQ te lezen voordat je gaat klagen over de antwoorden... ook is dat mede handig om onnodige quotes te voorkomen (zie de edits bij je posts).
Verder is het een feit dat documenteren helpt omdat je dan code in delen overzichtelijke delen opsplitst. Samen met netjes indenten zie je dan precies of je routine wel of niet af is.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je moet je ook nooit blind staren op de inhoud van een foutmelding. Die komt zelden op de regel waar de fout optreedt, maar op het punt waar de compiler er achter komt dat de boel uit de pas begint te lopen. Ook is de foutmelding vaak anders. Dit omdat de compiler er in dit geval achter komt bij de repeat loop dat er ergens iets mist...
(De compiler weet uiteraard niet waar de If...Then zou moeten staan)
MM
Learn by practice..
Ik snap het. nu ik het terug zie ik ook dat alles drie de meldingen maar met 1 foutje te maken had. Weer wat geleerd, beetje bij beetje komt het wel goed. morgen maar even kijken of het werkt.
Als je iets in een code wijzigd, zet er dan achter, wat je gedaan hebt.
Nu zet je 2 lappen code in het topic, en laat anderen raden zelf uitzoeken wat je gedaan hebt.
Die 'rem'regels zijn er niet voor niets.
Hieronder een voorbeeld hoe je het duidelijk kan brengen:
If irsens2 = laag Then 'rechtersensor ziet opstakel
Print At 2, 3, "detect links"
GoSub stoppen
DelayMS 200
GoSub rechtsaf
DelayMS 2000
GoSub rechtdoor 'deze heb ik nu boven de volgende IF gezet
EndIf
If irsens2 = hoog Then
Print At 2, 3, " vrij "
EndIf
Until toets3 = hoog xor toets5 = hoog xor toets7 = hoog xor toets9 = hoog 'deze lus beeindigen wanneer er een aandere mode geselekteerd word
Return
Dit is een stukje code waarin ik hulp gevraagt heb.
MM
Learn by practice..
Als dit gelijk werd gevraagd had ik alle commentaar er in laten staan ik heb achter elke regel iets staan. ik dacht eigenlijk dat het er minder overzichtelijk door werd voor jullie. Daarom heb ik alles eerst weggehaald voor ik het poste. Maar dan weet ik dat voor de volgende keer.Dit is een duidelijke opmerking.
@ Henry S.
Als er iets word gewijzigd zonder uit te leggen wat kan ik mij daar niet op aan passen. En ja, de FAQ heb ik gelezen maar aangezien ik nog steeds een mens ben zie ik weleens iets over het hoofd of denk ik dat ik het begrijp (wat dan niet zo is).
Klagen over de antwoorden doe ik niet, ik vraag enkel iets meer uitleg.
Edit:
Jullie bedoelen dit?:
While 1 = 1
Daglicht = Pot Ldr, 200 ;LDR meting
If Daglicht < 10 Then ;Als het donker word dan..
GoSub HoofdProgramma ;Spring naar Hoofdprgramma
DelayMS 500 ;Meting om de halve seconde
EndIf
Wend
HoofdProgramma: ;Begin van Hoofdprogramma:
While 1 = 1 ;Continu lus
Toggle RunningLed ;Als led aan = uit zetten en andersom
DelayMS 200 ;Snelheid waarmee runningled knipperd
High LedsDim ;Zet leds op dim stand (8,6Volt)
Begin:
If SensorBegin = 0 Then ;Als sensor begin hoog is dan..
If SensorEind = 1 Then ;Als sensor eind laag is..
GoSub LoopOp ;Spring naar subroutine LoopOp
Repeat
If SensorEind = 0 Then ;Als sensor eind hoog is..
High BuitenLamp ;Zet buitenlamp aan
Repeat
If SensorBegin = 0 Then GoTo Begin ;Als sensor begin hoog is terug springen naar Begin
DelayMS 200
Inc Timer4 ;Verhoog timer4
Until Timer4 = 200 Then ;Tot timer4 =200
GoSub LoopTerug ;Spring naar subroutine LoopTerug
Low BuitenLamp ;Zet buitenlamp uit
Clear Timer4 ;Zet timer4 op 0
GoTo Begin ;Spring naar Begin:
Else
If SensorBegin = 0 Then GoTo Begin ;Als sensor eind niet hoog is dan..
DelayMS 100
Inc Timer2 ;Verhoog timer2
EndIf
Until Timer2 = 90 Then ;Tot timer2 =90
GoSub LoopTerug ;Spring naar subroutine LoopTerug
Clear Timer2 ;Zet timer2 op 0