# DTMFOUT Example

Syntax: DTMFOUT

NOTE: The example below is written for the BS2 and will run on any of the BS2-family modules. Modify the $STAMP directive (as required) before downloading to the BS2e, BS2sx, BS2p, BS2pe, or BS2px.

     DTMFOUT.BS2
    ' This demo program is a rudimentary memory dialer. Since DTMF digits fit
    ' within a nibble (four bits), the program below packs two DTMF digits into
    ' each byte of three EEPROM data tables. The end of a phone number is marked
    ' by the nibble $F, since this is not a valid phone-dialing digit.
    ' Conditional compilation sets the timing adjustment factor so that the
    ' output will sound the same on any BS2 module.

    ' {$STAMP BS2}
    ' {$PBASIC 2.5}

    Spkr            PIN     10              ' DTMF output on pin 10

    #SELECT $STAMP
      #CASE BS2, BS2E, BS2PE
        TmAdj       CON     $100            ' x 1.0 (time adjust)
      #CASE BS2SX
        TmAdj       CON     $280            ' x 2.5
      #CASE BS2P
        TmAdj       CON     $3C5            ' x 3.77
      #CASE BS2PX
        TmAdj       CON     $605            ' x 6.02
    #ENDSELECT

    eeLoc           VAR     Byte            ' EEPROM address of stored number
    eeByte          VAR     Byte            ' Byte containing two DTMF digits
    dtDig           VAR     eeByte.NIB1     ' Digit to dial
    phone           VAR     Nib             ' Pick a phone #
    hiLo            VAR     Bit             ' Bit to select upper and lower nib

    Parallax        DATA    $19,$16,$62,$48,$33,$3F  ' Phone: 1-916-624-8333
    ParallaxFax     DATA    $19,$16,$62,$48,$00,$3F  ' Phone: 1-916-624-8003
    Information     DATA    $15,$20,$55,$51,$21,$2F  ' Phone: 1-520-555-1212

    Main:
      FOR phone = 0 TO 2
        ' retrieve address
        LOOKUP phone, [Parallax, ParallaxFax, Information], eeLoc
        GOSUB Dial_Number
        PAUSE 2000
      NEXT
      END

    Dial_Number:
      DO
        READ eeLoc, eeByte                  ' Retrieve byte from EEPROM
        eeLoc = eeLoc + 1                   ' point to next pair of digits
        FOR hiLo = 0 TO 1                   ' Dial upper and lower digits
          IF (dtDig = $F) THEN EXIT         ' Hex $F is end-of-number flag
          DTMFOUT Spkr,                     ' dial digit
                  150 */ TmAdj, 25, [dtDig] ' 150 ms on, 25 ms off
          eeByte = eeByte << 4              ' Shift in next digit
        NEXT
      LOOP UNTIL (dtDig = $F)
      RETURN

Go to Welcome page

BASIC Stamp Help Version 2.5.4

Copyright © Parallax Inc.

8/8/2012