Skip to content

Instantly share code, notes, and snippets.

@SrikanthKrish
Created June 25, 2012 18:20
Show Gist options
  • Save SrikanthKrish/2990327 to your computer and use it in GitHub Desktop.
Save SrikanthKrish/2990327 to your computer and use it in GitHub Desktop.
DTMF decoder code
#include <PinChangeInt.h>
#define PIN1 2
#define PIN2 3
#define PIN3 4
uint8_t latest_interrupted_pin;
uint8_t interrupt_count[20]={0}; // 20 possible arduino pins
int i;
void quicfunc() {
latest_interrupted_pin=PCintPort::arduinoPin;
interrupt_count[latest_interrupted_pin]++;
};
// You can assign any number of functions to any number of pins.
// How cool is that?
int number[11];
void pin3func() {
number[i]=(PINC&0x0f);
i++;
// Serial.print("Pin "); Serial.print(PIN3, DEC); Serial.println("!");
}
char ph[12];
void setup()
{
Serial.begin(115200);
if (SD.begin(10))
{
Serial.println("Card initialised ....");
}
pinMode(PIN1, INPUT); digitalWrite(PIN1, HIGH);
PCintPort::attachInterrupt(PIN1, &quicfunc, FALLING); // add more attachInterrupt code as required
pinMode(PIN2, INPUT); digitalWrite(PIN2, HIGH);
PCintPort::attachInterrupt(PIN2, &quicfunc, FALLING);
DDRC=0x00;
pinMode(PIN3, INPUT); digitalWrite(PIN3, HIGH);
PCintPort::attachInterrupt(PIN3, &pin3func, RISING);
Serial.println("---------------------------------------");
Serial.println("Ready");
DTMF();
}
void DTMF()
{
while(i != 10)
{
delay(100);
}
for(i=9;i>=0;i--)
{
if(number[i]==10) number[i]=0;
ph[i]=number[i]+'0';
//Serial.println(number[i],DEC);
}
ph[10] = '\0';
Serial.println(ph);
i=0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment