DTMFOUT Example

BS2 icon BS2e icon BS2sx icon BS2p icon BS2pe icon BS2px icon

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