kennisdag 2025: verkeerslicht
Een programma kan gericht zijn op snelheid, minimaal gebruik van geheugen, gebruiksgemak ...
Dit programma probeert inzichtelijk en begrijpelijk te zijn, vooral voor wie niet bekend is met forth. Niet zozeer voor het technische deel dat de aansturing van de verkeerslicht LEDjes realiseert, maar vooral voor het besturingsdeel.
File verkeerslicht.fth:
\ verkeerslichten, besturing met Nederlandse woorden en met
\ verkeerslicht automaat voor raspberry pi pico -- wj 2025-03
hex
\ \ Technische basis voor de aansturing
\ Twee miniatuur verkeerslichten met LEDs aangesloten
\ aan GPIO en aan GND, geen weerstanden nodig
\ volgorde is rood/oranje/groen op GPIOs 7 9 11 en 14 15 16
\ NB: aansluitnummer op pico board is niet gelijk aan GPIO nummer
\ check pico documentatie voor de juiste aansluitingen
\ Omrekenen GPIO nummers naar lampbits:
\ bits in een 32 bit cell
\ 3322 2222 2222 1111 1111 1100 0000 0000 bitnummer
\ 1098 7654 3210 9876 5432 1098 7654 3210 bitnummer
\ 0001 1100 1010 1000 lampbits
\ G YR G Y R lampkleur
\ 0 0 0 1 c a 8 0 1ca80 = alle lampjes
D0000020 constant GPIO-OE \ Output Enable
D0000010 constant GPIO-OUT \ Output value
create 'ampel \ Duits voor lamp, afgeleid van ampul of glazen bol
\ 1e red yelllow green 2e r y g
04000 , 08000 , 10000 , 080 , 200 , 800 , \ lampbits
: init ( -- ) 0001ca80 GPIO-OE **bis ; \ OE - Output Enable
: alles ( -- lampbits ) 0001ca80 ; \ alle lampjes
init
\ \ Nederlandse opdrachten
: handmatig ." Nederlands-talige besturing is actief" cr ;
: rechter 0 ; \ verkeerslicht
: linker 3 ; \ verkeerslicht
: rode ;
: oranje 1 + ;
: groene 2 + ;
: lamp ( lichtnr -- lampbits ) cells 'ampel + @ ;
: aan ( lampbits -- ) GPIO-OUT **bis ; \ zet lampen met 1 bits aan
: uit ( lampbits -- ) GPIO-OUT **bic ; \ zet lampen met 1 bits uit
alles uit
: seconde ( aantal -- ) dm 1000 * ms ;
: seconden seconde ;
: knipperen ( aantal -- )
alles uit
0 do
rechter oranje lamp linker oranje lamp or dup
aan dm 500 ms uit dm 300 ms
loop ;
: automaat ( -- )
cr alles uit 2 seconden 9 knipperen
6 0 ?do
linker oranje lamp uit rechter rode lamp uit
linker rode lamp aan rechter groene lamp aan dm 10 seconden
rechter groene lamp uit
rechter oranje lamp aan 3 seconden
rechter oranje lamp uit linker rode lamp uit
linker groene lamp aan rechter rode lamp aan 8 seconden
linker groene lamp uit
linker oranje lamp aan 3 seconden
loop
linker oranje lamp uit
linker rode lamp aan 2 seconden
alles uit 20 knipperen 9 seconden
handmatig ;
\ voorbeeld
rechter oranje lamp aan 1 seconde
rechter oranje lamp uit
linker oranje lamp aan 2 seconden
alles uit 1 seconde
automaat many
Getest met noforth voor de pico, versie noForth tv multitask 250222