kennisdag 2025: verkeerslicht

2025-03-14

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