komentare
[mirrors/Programs.git] / arduino / dtfm / DTFM.pde
... / ...
CommitLineData
1/*
2 * DTFM
3 * <~~Harvie 2oo8
4 */
5
6/*
7DTMF keypad frequencies (with sound clips)
8 1209 Hz 1336 Hz 1477 Hz 1633 Hz
9697 Hz 1 2 3 A
10770 Hz 4 5 6 B
11852 Hz 7 8 9 C
12941 Hz * 0 # D
13
14DTMF event frequencies
15Event Low frequency High frequency
16Busy signal 480 Hz 620 Hz
17Dial tone 350 Hz 440 Hz
18Ringback tone (US) 440 Hz 480 Hz
19*/
20
21#define dtfmpin 13
22
23void dtfm_tone(char outpin, float low, float high) {
24 int duration = 300;
25 char pin;
26 long pos, startmillis = millis();
27 while((pos = millis()-startmillis) <= duration) {
28 pin = false;
29 if( sin((pos*low)/1000*(2*PI)) > 0) pin = true;
30 if( sin((pos*high)/1000*(2*PI)) > 0) pin = true;
31
32 if(pin) digitalWrite(outpin, HIGH); else digitalWrite(outpin, LOW);
33 }
34}
35
36int dtfm_key(char outpin, char key) {
37 switch (key) {
38 case '1': dtfm_tone(outpin, 697, 1209); break;
39 case '2': dtfm_tone(outpin, 697, 1336); break;
40 case '3': dtfm_tone(outpin, 697, 1477); break;
41
42 case '4': dtfm_tone(outpin, 770, 1209); break;
43 case '5': dtfm_tone(outpin, 770, 1336); break;
44 case '6': dtfm_tone(outpin, 770, 1477); break;
45
46 case '7': dtfm_tone(outpin, 852, 1209); break;
47 case '8': dtfm_tone(outpin, 852, 1336); break;
48 case '9': dtfm_tone(outpin, 852, 1477); break;
49
50 case '*': dtfm_tone(outpin, 941, 1209); break;
51 case '0': dtfm_tone(outpin, 941, 1336); break;
52 case '#': dtfm_tone(outpin, 941, 1477); break;
53
54 default: return 0;
55 }
56 return 1;
57}
58
59void dtfm_dial(char outpin, char *keys) {
60 for(char i=0;keys[i]!=0;i++) { dtfm_key(outpin, keys[i]); delay(100); }
61}
62
63void setup() // run once, when the sketch starts
64{
65 pinMode(dtfmpin, OUTPUT); // sets the digital pin as output
66 //dtfm_dial(dtfmpin, "739136794");
67 dtfm_tone(dtfmpin, 1, 10);
68}
69
70void loop() // run over and over again
71{
72delay(10000);
73}
This page took 0.332684 seconds and 4 git commands to generate.