This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.¶
Note: Any required file(s) are available in the attachments tab (top right).
DATALOG.BAS
100 ''''''''''''''''''''''''''''''''''''''''''''''''''''''
110 ' DATALOG.BAS
120 ' Every second this program will:
130 ' - measure the voltage on pins 1 to 10
140 ' - get the logic level on pins 11 to 20
150 ' - display the data on both the USB and video outputs
160 ' - record it in the file DATALOG.XLS
170 ''''''''''''''''''''''''''''''''''''''''''''''''''''''
180 '
190 ' configure pins 1 to 10 as analog inputs
200 FOR i = 1 TO 10 : SETPIN i, 1 : NEXT i
210 '
220 ' configure pins 11 to 20 as digital inputs
230 FOR i = 11 TO 20 : SETPIN i, 2 : NEXT i
240 '
250 ' zero the data file and print the heading
260 OPEN "DATALOG.XLS" FOR output AS #1
270 PRINT #1, "TIME"; CHR$(9);
280 FOR i = 1 TO 20 : PRINT #1, "PIN";i;CHR$(9); : NEXT
285 PRINT #1
290 CLOSE #1
300 '
310 ' start the loop
320 TIME$ = "00:00:00" ' zero the time
330 DO
340 TIMER = 0 ' used to time one second
350 t = t - 1
360 IF t <= 0 THEN ' clear screen every 10 loops
370 PRINT CHR$(27) + "[2J";
380 CLS
390 t = 10
400 ENDIF
410 ' position the cursor at the top of the screen
420 LOCATE 0, 0 ' Cursor home (video)
430 PRINT CHR$(27) + "[H"; ' Cursor home (USB)
440 LOCATE 0, 0 ' Cursor home (video)
450 PRINT " Run Time: "; TIME$: PRINT
460 ' da$ is used to hold the analog data for the card
465 ' dd$ is used to hold the digital data
470 da$ = TIME$ + CHR$(9) : dd$ = ""
480 FOR i = 1 TO 10
485 ' handle the analog pins
490 PRINT " Pin "; FORMAT$(i, "%2g = ");
520 PRINT FORMAT$(PIN(i) * 0.995, "%1.3f"); "V ";
530 da$ = da$ + STR$(PIN(i)) + CHR$(9)
550 ' handle the digital inputs
555 PRINT " Pin "; FORMAT$(i+10, "%2g = ");
560 IF PIN(i+10) THEN PRINT "HIGH" ELSE PRINT "LOW "
570 dd$ = dd$ + STR$(PIN(i+10)) + CHR$(9)
600 NEXT i
610 OPEN "DATALOG.XLS" FOR append AS #1
620 PRINT #1, da$; dd$
630 CLOSE #1
640 '
650 ' wait for the one second mark to come up
660 DO WHILE TIMER < 1000 : LOOP
670 LOOP