Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.forth    |    Forth programmers eat a lot of Bratwurst    |    117,927 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 116,922 of 117,927    |
|    Krishna Myneni to All    |
|    kForth serial port interface update    |
|    01 Nov 24 09:18:32    |
      From: krishna.myneni@ccreweb.org              The RS232 serial port interface for kForth (-32/64 for Linux) has been       updated to be able to provide user access to the modem bits e.g. DSR,       CTS etc.              https://github.com/mynenik/kForth-64/blob/master/forth-src/serial.4th              One use is to use the serial port for reading an external switch. Code       example follows for a two-position switch. In my application, I have a       nice big bright red gamer spring-loaded push button switch, which I want       to use to begin an audio recording for recording a practice take on       guitar -- it's not easy to access the keyboard with guitar in hand,       positioned in front of a microphone (the recording code is actually a       Forth script which makes use of the ALSA commands arecord, aplay etc.       but more on that at a later date).              --       Krishna Myneni              === begin rs232-switch.4th ===       \ rs232-switch.4th       \       \ External push button switch connected to serial port       \ via RTS/CTS lines may be queried with this code to       \ find out button status (pushed in/closed or open).       \ This is useful in applications when you can't access       \ the keyboard easily.       \       \ PC Serial Port (DB9 connector)       \       \ 1 DCD <-- ==============       \ 2 RXD <-- \ 1 2 3 4 5 / ( male connector )       \ 3 TXD --> \ 6 7 8 9 /       \ 4 DTR --> =========       \ 5 GND       \ 6 DSR <-- SW1 /==== SW3 ==== SW3       \ 7 RTS --> -->===/ -->\       \ 8 CTS <-- <--1K---==== SW2 <--1K--\==== SW2       \ 9 RI <-- (open/OFF) (closed/ON)       \       \ There is a 1K resistor in series with pin SW2 on the switch.       \       \ To use:       \ 1. Open the com port (COM1 is shown in this example)       \ 2. Enable the switch using RAISE-RTS       \ 3. Query the switch using READ-SWITCH       \ 4. Disable the switch using LOWER-RTS       \ 5. Close the com port       \       include ans-words       include modules       include struct-200x       include struct-200x-ext       include strings       include serial              Also serial              base @       decimal              hex       20 constant CTS_LINE       decimal              variable com               : open-it ( -- ior )        COM1 ∋ serial open com !        com @ 0> IF        com @ c" 8N1" set-params        com @ B57600 set-baud        com @ ∋ serial flush        0        ELSE 1 THEN        com @ lower-rts                     : close-it ( -- ior ) com @ ∋ serial close ;              \ Return true if switch is closed (ON), false otherwise       : read-switch ( -- bOn )        com @ get-modem-bits CTS_LINE and 0<> ;              \ More thorough debugging can be perfomed with TEST-SWITCH       false value user-abort?       : test-switch ( -- )        open-it ABORT" Unable to open serial port!"        read-switch IF        cr ." CTS is raised. Ensure switch is OFF and try again."        cr close-it drop EXIT        THEN        cr ." Press a key on the keyboard to raise RTS."        BEGIN key? UNTIL key drop        com @ raise-rts        cr ." Press and hold the push-button switch."        cr ." If there is no effect, press Esc to exit the test." cr        false to user-abort?        BEGIN        key? dup IF        key 27 = and dup        IF true to user-abort? THEN        THEN        0=        WHILE        read-switch 0=        WHILE        REPEAT        cr ." CTS has been raised (switch is ON)."        cr ." Please release the switch to OFF position."        BEGIN        1000 usleep        read-switch 0=        UNTIL        cr ." CTS is low (switch is OFF)."        THEN        com @ lower-rts        close-it drop        user-abort? IF cr ." Test aborted by user!" cr THEN                            cr cr .( Type 'TEST-SWITCH' to check operation of switch. ) cr              base !       === end rs232-switch.4th ===              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca