--- /dev/null
+/*
+ * DTFM
+ * <~~Harvie 2oo8
+ */
+
+/*
+DTMF keypad frequencies (with sound clips)
+ 1209 Hz 1336 Hz 1477 Hz 1633 Hz
+697 Hz 1 2 3 A
+770 Hz 4 5 6 B
+852 Hz 7 8 9 C
+941 Hz * 0 # D
+
+DTMF event frequencies
+Event Low frequency High frequency
+Busy signal 480 Hz 620 Hz
+Dial tone 350 Hz 440 Hz
+Ringback tone (US) 440 Hz 480 Hz
+*/
+
+#define dtfmpin 13
+
+void dtfm_tone(char outpin, float low, float high) {
+ int duration = 300;
+ char pin;
+ long pos, startmillis = millis();
+ while((pos = millis()-startmillis) <= duration) {
+ pin = false;
+ if( sin((pos*low)/1000*(2*PI)) > 0) pin = true;
+ if( sin((pos*high)/1000*(2*PI)) > 0) pin = true;
+
+ if(pin) digitalWrite(outpin, HIGH); else digitalWrite(outpin, LOW);
+ }
+}
+
+int dtfm_key(char outpin, char key) {
+ switch (key) {
+ case '1': dtfm_tone(outpin, 697, 1209); break;
+ case '2': dtfm_tone(outpin, 697, 1336); break;
+ case '3': dtfm_tone(outpin, 697, 1477); break;
+
+ case '4': dtfm_tone(outpin, 770, 1209); break;
+ case '5': dtfm_tone(outpin, 770, 1336); break;
+ case '6': dtfm_tone(outpin, 770, 1477); break;
+
+ case '7': dtfm_tone(outpin, 852, 1209); break;
+ case '8': dtfm_tone(outpin, 852, 1336); break;
+ case '9': dtfm_tone(outpin, 852, 1477); break;
+
+ case '*': dtfm_tone(outpin, 941, 1209); break;
+ case '0': dtfm_tone(outpin, 941, 1336); break;
+ case '#': dtfm_tone(outpin, 941, 1477); break;
+
+ default: return 0;
+ }
+ return 1;
+}
+
+void dtfm_dial(char outpin, char *keys) {
+ for(char i=0;keys[i]!=0;i++) { dtfm_key(outpin, keys[i]); delay(100); }
+}
+
+void setup() // run once, when the sketch starts
+{
+ pinMode(dtfmpin, OUTPUT); // sets the digital pin as output
+ //dtfm_dial(dtfmpin, "739136794");
+ dtfm_tone(dtfmpin, 1, 10);
+}
+
+void loop() // run over and over again
+{
+delay(10000);
+}