Anoniem
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?
Anoniem
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%)]