V章で利用したプログラム

'-------------------------------------------------
'  タイマ1,2を使った速度,加速度の測定
'-------------------------------------------------
'
DECLARE SUB DisplayFkey (fkeycode!)
DECLARE SUB InitScreen ()
DECLARE SUB GetCount (count1!,count2!)
DECLARE SUB ClearCount ()
DECLARE SUB SetUnittime (unit,time!)
DECLARE SUB StartDevice ()
DECLARE SUB EndDevice ()
DECLARE SUB LargePrintB (y!, x!, printdata!)
DECLARE SUB LargePrintA (y!, x!, stringdata$)
DECLARE SUB Large1char (y!, x!, 1cod!)

dist = .00254 * 16
unit.time = 10

InitScreen

status = 1
displaymode = 1

ON KEY(5) GOSUB Fkey5: ON KEY(6) GOSUB Fkey6
ON KEY(7) GOSUB Fkey7: ON KEY(8) GOSUB Fkey8

StartDevice
  SetUnittime unit, time
  WHILE status
    GOSUB RsetScreen
    WHILE INKEY$ <> " "
      KEY(5) ON: KEY(6) ON: KEY(7) ON: KEY(8) ON
      GOSUB Calculate
      KEY(5) STOP: KEY(6) STOP: KEY(7) STOP: KEY(8) STOP
      GOSUB DisplayData
    WEND
  WEND
EndDevice

END

ResetScreen:
  ClearCount
  CLS
  IF displaymode = 1 THEN GOSUB Fkey6
  IF displaymode = 2 THEN GOSUB Fkey7
  IF displaymode = 3 THEN GOSUB Fkey8
RETURN

Calculate:
  CALL GetCount(count1, count2)
  time1 = count1 * unit.time * .000001
  time2 = count2 * unit.time * .000001
  time = time1 - time2 / 2
  IF time2 <> 0 THEN
    velerror = 0: vel = dist / time2
    ELSE
    velerror = 1
  END IF
  IF velerror = 0 AND time <> 0 THEN
    accerror = 0: acc = vel / time
    ELSE
    accerror = 1
  END IF
RETURN

DisplayData:
  SELECT CASE displaymode
    CASE 1
      COLOR 7
      LargePrintB 3, 1, time1
      LargePrintB 13, 1, time2
    CASE 2
      COLOR 6
      LargePrintB 3, 1, time1
      IF velerror = 0 THEN LargePrintB 13, 1, vel
      IF velerror = 1 THEN LargePrintA 13, 1, "………"
    CASE 3
      COLOR 5
      IF accerror = 0 THEN LargePrintB 8, 1, acc
      IF accerror = 1 THEN LargePrintA 8, 1, "………"
   END SELECT
RETURN

Fkey5:
  DisplayFkey 5
  COLOR 6
  LOCATE 20, 1: PRINT "時間測定の基準パルス幅を設定します(2〜65536μsec)"
  VIEW PRINT 21 TO 21
  LINE INPUT tmpdata$
  tmpdata = INT(VAL(tmpdata$))
  IF tmpdata > 1 AND tmpdata < 65536 THEN
     unit.time = tmpdata
     SetUnittime unit.time
     ClearCount
  END IF
  InitScreen
  IF displaymode = 1 THEN GOSUB Fkey6
  IF displaymode = 2 THEN GOSUB Fkey7
  IF displaymode = 3 THEN GOSUB Fkey8
RETURN

Fkey6:
  display = 1
  CLS
  COLOR 7
  LOCATE 1, 10: PRINT "センサ間の通過時間[s]     (スペースキーでリセット)";
  LargePrintB 3, 1, time1
  LargePrintB 13, 1, time2
  LOCATE 22, 50: PRINT "基準パルス"; unit.time; "マイクロ秒";
  DisplayFkey 6
RETURN

Fkey7:
  displaymode = 2
  CLS
  COLOR 6
  LOCATE 1, 10: PRINT "時間[s]と速度[m/s]     (スペースキーでリセット)";
  LargePrintB 3, 1, time
  IF velerror = 0 THEN LargePrintB 13, 1, vel
  IF velerror = 1 THEN LargePrintA 13, 1, "………"
  LOCATE 22, 50: PRINT "基準パルス"; unit.time; "マイクロ秒";
  DisplayFkey 7
RETURN

Fkey8:
  displaymode = 3
  CLS
  COLOR 5
  LOCATE 1, 10: PRINT "加速度[m/s^2]     (スペースキーでリセット)";
  LargePrintB 3, 1, time
  IF accerror = 0 THEN LargePrintB 8, 1, acc
  IF accerror = 1 THEN LargePrintA 8, 1, "………"
  LOCATE 22, 50: PRINT "基準パルス"; unit.time; "マイクロ秒";
  DisplayFkey 8
RETURN

SUB ClearCount
  PRINT #1, "f";
END SUB

SUB DisplayFkey (fkeycode)
  IF fkeycode = 1 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 1: PRINT "f・1"; : LOCATE 25, 1: PRINT "   "; 
  IF fkeycode = 2 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 9: PRINT "f・2"; : LOCATE 25, 9: PRINT "   "; 
  IF fkeycode = 3 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 17: PRINT "f・3"; : LOCATE 25, 17: PRINT "   "; 
  IF fkeycode = 4 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 25: PRINT "f・4"; : LOCATE 25, 25: PRINT "   "; 
  IF fkeycode = 5 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 33: PRINT "f・5"; : LOCATE 25, 33: PRINT "時間幅"; 
  IF fkeycode = 6 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 41: PRINT "f・6"; : LOCATE 25, 41: PRINT "測定値"; 
  IF fkeycode = 7 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 49: PRINT "f・7"; : LOCATE 25, 49: PRINT "速 度"; 
  IF fkeycode = 8 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 57: PRINT "f・8"; : LOCATE 25, 57: PRINT "加速度"; 
  IF fkeycode = 9 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 65: PRINT "f・9"; : LOCATE 25, 65: PRINT "   "; 
  IF fkeycode = 10 THEN COLOR 14 ELSE COLOR 13
  LOCATE 24, 73: PRINT "f・10"; : LOCATE 25, 73: PRINT "   "; 
END SUB

SUB EndDevice
  CLOSE #1
END SUB

SUB GetCount (count1, count2)
  PRINT #1, "t"; : LINE INPUT #1, count1$
  PRINT #1, "s"; : LINE INPUT #1, count2$
  count1 = VAL(count1$)
  count2 = VAL(count2$)
END SUB

SUB InitScreen
  CLS
  VIEW PRINT 1 TO 25
END SUB

SUB Large1char (y, x, lcod)
  STATIC lc$(), status
  IF status = 0 THEN
    DIM lc$(-5 TO 10, 0 TO 6)
    status = 1
    lc$(-5, 0) = "■■■■": lc$(-4, 0) = "    ": lc$(-3, 0) = "    ":
    lc$(-5, 1) = "■■■■": lc$(-4, 1) = "    ": lc$(-3, 1) = "    ":
    lc$(-5, 2) = "■■■■": lc$(-4, 2) = "    ": lc$(-3, 2) = "    ":
    lc$(-5, 3) = "■■■■": lc$(-4, 3) = " ■ ■": lc$(-3, 3) = "■■■■":
    lc$(-5, 4) = "■■■■": lc$(-4, 4) = "    ": lc$(-3, 4) = "    ":
    lc$(-5, 5) = "■■■■": lc$(-4, 5) = "    ": lc$(-3, 5) = "    ":
    lc$(-5, 6) = "■■■■": lc$(-4, 6) = "    ": lc$(-3, 6) = "    ":

    lc$(-2, 0) = "    ": lc$(-1, 0) = "    ":
    lc$(-2, 1) = "    ": lc$(-1, 1) = "    ":
    lc$(-2, 2) = "    ": lc$(-1, 2) = "    ":
    lc$(-2, 3) = "    ": lc$(-1, 3) = "    ":
    lc$(-2, 4) = "    ": lc$(-1, 4) = "    ":
    lc$(-2, 5) = "  ■■": lc$(-1, 5) = "    ":
    lc$(-2, 6) = "  ■■": lc$(-1, 6) = "    ":

    lc$(0, 0) = " ■■ ": lc$(1, 0) = "  ■ ": lc$(2, 0) = " ■■ ":
    lc$(0, 1) = "■  ■": lc$(1, 1) = "  ■ ": lc$(2, 1) = "■  ■":
    lc$(0, 2) = "■  ■": lc$(1, 2) = "  ■ ": lc$(2, 2) = "   ■":
    lc$(0, 3) = "■  ■": lc$(1, 3) = "  ■ ": lc$(2, 3) = ""  ■:
    lc$(0, 4) = "■  ■": lc$(1, 4) = "  ■ ": lc$(2, 4) = " ■■ ":
    lc$(0, 5) = "■  ■": lc$(1, 5) = "  ■ ": lc$(2, 5) = "■   ":
    lc$(0, 6) = " ■■ ": lc$(1, 6) = " ■■■": lc$(2, 6) = "■■■■":

    lc$(3, 0) = "■■■ ": lc$(4, 0) = "■ ■ ": lc$(5, 0) = "■■■■":
    lc$(3, 1) = "   ■": lc$(4, 1) = "■ ■ ": lc$(5, 1) = "■   ":
    lc$(3, 2) = "   ■": lc$(4, 2) = "■ ■ ": lc$(5, 2) = "■■■ ":
    lc$(3, 3) = " ■■ ": lc$(4, 3) = "■ ■ ": lc$(5, 3) = "   ■":
    lc$(3, 4) = "   ■": lc$(4, 4) = "■■■■": lc$(5, 4) = "   ■":
    lc$(3, 5) = "   ■": lc$(4, 5) = "  ■ ": lc$(5, 5) = "   ■":
    lc$(3, 6) = "■■■ ": lc$(4, 6) = "  ■ ": lc$(5, 6) = "■■■ ":

    lc$(6, 0) = " ■■ ": lc$(7, 0) = "■■■■": lc$(8, 0) = " ■■ ":
    lc$(6, 1) = "■   ": lc$(7, 1) = "■  ■": lc$(8, 1) = "■  ■":
    lc$(6, 2) = "■   ": lc$(7, 2) = "■  ■": lc$(8, 2) = "■  ■":
    lc$(6, 3) = "■■■ ": lc$(7, 3) = "  ■ ": lc$(8, 3) = " ■■ ":
    lc$(6, 4) = "■  ■": lc$(7, 4) = "  ■ ": lc$(8, 4) = "■  ■":
    lc$(6, 5) = "■  ■": lc$(7, 5) = "  ■ ": lc$(8, 5) = "■  ■":
    lc$(6, 6) = " ■■ ": lc$(7, 6) = "  ■ ": lc$(8, 6) = " ■■ ":

    lc$(9, 0) = " ■■ ": lc$(10, 0) = "    ":
    lc$(9, 1) = "■  ■": lc$(10, 1) = "    ":
    lc$(9, 2) = "■  ■": lc$(10, 2) = " ■■■":
    lc$(9, 3) = "■  ■": lc$(10, 3) = " ■  ":
    lc$(9, 4) = " ■■■": lc$(10, 4) = " ■■■":
    lc$(9, 5) = "   ■": lc$(10, 5) = " ■  ":
    lc$(9, 6) = " ■■ ": lc$(10, 6) = " ■■■":

  END IF

  LOCATE y, x: PRINT lc$(lcod, 0);
  LOCATE y + 1, x: PRINT lc$(lcod, 1);
  LOCATE y + 2, x: PRINT lc$(lcod, 2);
  LOCATE y + 3, x: PRINT lc$(lcod, 3);
  LOCATE y + 4, x: PRINT lc$(lcod, 4);
  LOCATE y + 5, x: PRINT lc$(lcod, 5);
  LOCATE y + 6, x: PRINT lc$(lcod, 6);

END SUB

SUB LargePrintA (y, x, stringdata$)
  px = x: py = y: stringsize = LEN(stringdata$)
  dpx = 10
  FOR cnt = 1 TO stringsize
    refchar$ = MID$(stringdata$, cnt, 1)
    SELECT CASE refchar$
      CASE " "
        Large1char py, px, -1
      CASE "."
        Large1char py, px, -2
      CASE "-"
        Large1char py, px, -3
      CASE "・"
        Large1char py, px, -4
      CASE "D" TO "E"
        Large1char py, px, 10
      CASE "0" TO "9"
        Large1char py, px, VAL(refchar$)
      CASE ELSE
        Large1char py, px, -5
    END SELECT
    px = px + dpx
  NEXT
END SUB

SUB LargePrintB (y, x, printdata)
  SELECT CASE printdata
    CASE IS > 99999999
      LargePrintA y, x, "########"
    CASE IS < -99999999
      LargePrintA y, x, "########"
    CASE IS >= 0
      tmpdata# = printdata
      tmpdata# = tmpdata# + .0000005#
      string1$ = LTRIM$(STR$(INT(tmpdata#)))
      IF LEN(string1$) <= 6 THEN
        string2$ = RIGHT$(STR$(INT(1000000# * tmpdata#) + 1000000#), 6)
        string0$ = string1$ + "." + LEFT$(string2$, 7 - LEN(string1$))
        ELSE
        string0$ = LEFT$(" " + string1$, 8)
        END IF
      LargePrintA y, x, string0$
    CASE IS < 0
      tmpdata# = -printdata
      tmpdata# = tmpdata# + .0000005#
      string1$ = LTRIM$(STR$(INT(tmpdata#)))
      IF LEN(string1$) <= 5 THEN
        string2$ = RIGHT$(STR$(INT(100000# * tmpdata#) + 100000#), 5)
        string0$ = "-" + string1$ + "." + LEFT$(string2$, 6 - LEN(string1$))
        ELSE
        string0$ = LEFT$(" -" + string1$, 8)
        END IF
      LargePrintA y, x, string0$
    END SELECT
END SUB

SUB SetUnittime (unit. time)
  PRINT #1, "p"; STR$(unit. time)
END SUB

SUB StartDevice
  OPEN "COM1:9600,N,8,1,ASC" FOR RANDOM AS #1
END SUB


[目次へ]