ik ben bezig meteen stoplicht wat je met 5 knoppen de tijd kan instellen
maar er gaat iets niet goed en ik kan de fout niet vinden
zou iemand willen kijken

toets 2 en 4 zijn voor het kiezen van de tijd die je wil instellen
en 1 en 3 voor + en -
oke om in het instel routine te komen en om er weer uit te gaan

mvg

DEVICE = 16F628A
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal

PORTB_PULLUPS = TRUE

CLEAR

;Logische constanten
SYMBOL FALSE = 0 ;Niet waar
SYMBOL HOOG = 1 ;Hoog signaal
SYMBOL LAAG = 0 ;Laag signaal
SYMBOL TRUE = 1 ;Waar

SYMBOL rood = PORTA.0
SYMBOL oranje = PORTA.1
SYMBOL groen = PORTA.2

SYMBOL rood2 = PORTA.3 ;
SYMBOL oranje2 = PORTA.4 ; toetslicht
SYMBOL groen2 = PORTA.5 ;

SYMBOL toets1 = PORTB.3 ; t1
SYMBOL toets2 = PORTB.2 ; t2 o t4
SYMBOL toets3 = PORTB.1 ; t3
SYMBOL toets4 = PORTB.0 ;
SYMBOL oke = PORTB.4

DIM tijd1 AS WORD, tijd2 AS WORD, tijd3 AS WORD, toets AS BYTE, var1 AS WORD

tijd1 = 500
tijd2 = 500
tijd3 = 500

main:
WHILE oke = LAAG : WEND

HIGH rood
LOW oranje
LOW groen

FOR var1 = 0 TO tijd1

IF oke = LAAG THEN GOTO check:

DELAYMS 1

NEXT

LOW rood
LOW oranje
HIGH groen

FOR var1 = 0 TO tijd2

IF oke = LAAG THEN GOTO check:

DELAYMS 1

NEXT

LOW rood
HIGH oranje
LOW groen

FOR var1 = 0 TO tijd3

IF oke = LAAG THEN GOTO check:

DELAYMS 1

NEXT

GOTO main

END

check:
WHILE oke = LAAG : WEND
WHILE toets1 = LAAG : WEND
WHILE toets2 = LAAG : WEND
WHILE toets3 = LAAG : WEND
WHILE toets4 = LAAG : WEND

IF toets1 = LAAG AND toets > 1 THEN toets = toets - 1
IF toets3 = LAAG AND toets < 3 THEN toets = toets + 1

IF toets2 = LAAG AND toets = 1 AND tijd1 > 1 THEN tijd1 = tijd1 + 1
IF toets4 = LAAG AND toets = 1 AND tijd1 < 5000 THEN tijd1 = tijd1 - 1

IF toets2 = LAAG AND toets = 2 AND tijd2 > 1 THEN tijd2 = tijd2 + 1
IF toets4 = LAAG AND toets = 2 AND tijd2 < 5000 THEN tijd2 = tijd2 - 1

IF toets2 = LAAG AND toets = 3 AND tijd3 > 1 THEN tijd3 = tijd3 + 1
IF toets4 = LAAG AND toets = 3 AND tijd3 < 5000 THEN tijd3 = tijd3 - 1

LOW rood2
LOW oranje2
LOW groen2

SELECT toets

CASE 1 : HIGH rood2

CASE 3 : HIGH oranje2

CASE 2 : HIGH groen2

ENDSELECT

IF oke = LAAG THEN GOTO main:

GOTO check
END

Even code tags gebruiken?

Waarom staat overal dat while :wend erin?

Wat ik zou doen


main:
high rood
low groen & oranje
for a = 0 to B
    If oke = low then ;als er op low gedrukt word
       delayms 100 ;antidender
       goto checktijd1 ;stel tijd 1 in
    endif
    delayms 1
Next
dan hetzelfde maar dan met andere kleuren

checktijd1: tijd dat ie op rood staat
High rood ; geeft aan dat je met de tijd voor rood bezig ;bent

If toets1 = low then
    delayms 25  ;antidender
    inc tijd1 
endif

if toets3 = low then
    delayms 25
    dec tijd1

If toets1 = low then
    delayms 100 
    goto checktijd2:
endif

if oke = low then
    delayms 100
    goto main

checktijd2:
zelfde als checktijd1, maar dan andere tijd en
if toets3 = low then
    delayms 100
    goto checktijd1 dan kan je terug
endif

Hij loopt door de main loop heen (gewoon die jij gepost had) totdat er op oke gedrukt word, dan gaat hij naar het instellen van tijd 1. Om aan te geven dat je tijd 1 instelt gaat de rode lamp aan (tijd 1 hoort bij rood toch?). Dan kan je met 2 & 4 de tijd veranderen. Als je dan op oke drukt ga je naar het instellen van tijd 2, dan gaat de groene lamp aan etc etc.

Zo nog even iets aangepast, zo lijkt het meer op de jouwe.

Als je while wend wilt gebruiken als antidender dan moet dat natuurlijk wel in de if loop staan

IF toets1 = LAAG AND toets > 1 THEN
while toets1 = low : wend
toets = toets - 1
endif

Ik vind een kleine delay als antidender makkelijker. Dan hoef je niet steeds opnieuw op het knopje te drukken maar telt hij langzaam door.

Je bent de endif ook vergeten.

code tags is gaan gebruiken?

om te zorgen dat je eerst de knop moet loslaten voor die verder gaat

hij werkt nu en dit is het geworden

DEVICE = 16F628A
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal

PORTB_PULLUPS = TRUE

CLEAR

;Logische constanten
SYMBOL FALSE = 0 ;Niet waar
SYMBOL HOOG = 1 ;Hoog signaal
SYMBOL LAAG = 0 ;Laag signaal
SYMBOL TRUE = 1 ;Waar

SYMBOL rood = PORTA.0
SYMBOL oranje = PORTA.1
SYMBOL groen = PORTA.2

SYMBOL rood2 = PORTA.3 ;
SYMBOL oranje2 = PORTA.6 ;4 toetslicht
SYMBOL groen2 = PORTA.7 ;5

SYMBOL toets1 = PORTB.3 ; t1
SYMBOL toets2 = PORTB.2 ; t2 o t4
SYMBOL toets3 = PORTB.1 ; t3
SYMBOL toets4 = PORTB.0 ;
SYMBOL oke = PORTB.4

DIM tijd1 AS WORD, tijd2 AS WORD, tijd3 AS WORD, toets AS BYTE, var1 AS WORD

tijd1 = 500
tijd2 = 500
tijd3 = 500

main:
WHILE oke = LAAG : WEND

HIGH rood
LOW oranje
LOW groen

FOR var1 = 0 TO tijd1
IF oke = LAAG THEN ;als er op oke gedrukt word
WHILE oke = LAAG : WEND
GOTO check ;stel tijd in
ENDIF
DELAYMS 1
NEXT

LOW rood
LOW oranje
HIGH groen

FOR var1 = 0 TO tijd2
IF oke = LAAG THEN ;als er op oke gedrukt word
WHILE oke = LAAG : WEND
GOTO check ;stel tijd in
ENDIF
DELAYMS 1
NEXT

LOW rood
HIGH oranje
LOW groen

FOR var1 = 0 TO tijd3
IF oke = LAAG THEN ;als er op oke gedrukt word
WHILE oke = LAAG : WEND
GOTO check ;stel tijd in
ENDIF
DELAYMS 1
NEXT

GOTO main

END

check:

IF toets1 = LAAG AND toets > 1 THEN
WHILE toets1 = LAAG : WEND
toets = toets - 1
ENDIF

IF toets3 = LAAG AND toets < 3 THEN
WHILE toets3 = LAAG : WEND
toets = toets + 1
ENDIF

IF toets2 = LAAG AND toets = 1 AND tijd1 > 1 THEN
WHILE toets2 = LAAG : WEND
tijd1 = tijd1 + 100
ENDIF

IF toets4 = LAAG AND toets = 1 AND tijd1 < 5000 THEN
WHILE toets4 = LAAG : WEND
tijd1 = tijd1 - 100
ENDIF

IF toets2 = LAAG AND toets = 2 AND tijd2 > 1 THEN
WHILE toets2 = LAAG : WEND
tijd3 = tijd3 + 100
ENDIF

IF toets4 = LAAG AND toets = 2 AND tijd2 < 5000 THEN
WHILE toets4 = LAAG : WEND
tijd3 = tijd3 - 100
ENDIF

IF toets2 = LAAG AND toets = 3 AND tijd3 > 1 THEN
WHILE toets2 = LAAG : WEND
tijd2 = tijd2 + 100
ENDIF

IF toets4 = LAAG AND toets = 3 AND tijd3 < 5000 THEN
WHILE toets4 = LAAG : WEND
tijd2 = tijd2 - 100
ENDIF

SELECT toets

CASE 1 : HIGH rood2
LOW oranje2
LOW groen2

CASE 2 : HIGH oranje2
LOW rood2
LOW groen2

CASE 3 : HIGH groen2
LOW rood2
LOW oranje2

ENDSELECT

IF oke = LAAG THEN
WHILE oke = LAAG : WEND
GOTO main:
ELSE
GOTO check
ENDIF

END

[Bericht gewijzigd door Anoniem op (95%)]