decodifcador DTMF decoder dtmf mt8870 con arduino

Hola Que tal, mi nombre es jorge castellar, les dejo un programa para arduino, cuya funcion es decodificar tono dtmf con u MT8870 esto es util para vigilancia, domotica o cualquier otro uso. decodificador

/*

Programa : MT8870 Autor... : Jorge Luis Castellar - jcastellar@gmail.com Fecha... : 2010-03-02 Funcion. : Decodifica Tonos DTMF Del MT8870

Link.... :

*/

define IRQ_PIN 2 // Puerto Del MCU, Conectado SID (Presencia De datos )

define D0_PIN 3 // Puerto Recibe dato Binario 0

define D1_PIN 4 // Puerto Recibe dato Binario 1

define D2_PIN 5 // Puerto Recibe dato Binario 2

define D3_PIN 6 // Puerto Recibe dato Binario 3

byte irq_state;

void setup() { // Configura El Puerto Serial 9600,8,N,1 Serial.begin(9600);

// Pone Los Puerto En Modo De Lectura pinMode(IRQ_PIN, INPUT); pinMode(D0_PIN, INPUT); pinMode(D1_PIN, INPUT); pinMode(D2_PIN, INPUT); pinMode(D3_PIN, INPUT);

}

void loop() { // Espera a Que Haya Una Senal o Tono irq_state = digitalRead(IRQ_PIN);

if ( irq_state == 1 ) {

Serial.print("Key : "); char key = read_codigo(); // Lee El Codigo DTMF Serial.println(key); // Imprime La Tecla recibida delay(80); // Pausa Para Sincronizar La Senal o IRQ

} } /-------------------------------------------------------------/ byte read_codigo() { byte dato; // Variable Que Tiene El Valor byte De La tecla char key; // Variable Que Tiene El Valor Char tecla

byte D0,D1,D2,D3; // Variable Donde Se Lee el Estado

// Lee Los Estado Logico o Binario Del MT8870 (1 o 0 , ON o OFF ) D0 = digitalRead(D0_PIN); D1 = digitalRead(D1_PIN); D2 = digitalRead(D2_PIN); D3 = digitalRead(D3_PIN);

// Covierte De Binario A BYTE o ENTERO // Escribe Los BITS En Una Variable dato bitWrite(dato,0,D0); bitWrite(dato,1,D1); bitWrite(dato,2,D2); bitWrite(dato,3,D3);

// Convierte La Tecla a CHAR if ( dato == 1 ) key = '1'; if ( dato == 2 ) key = '2'; if ( dato == 3 ) key = '3'; if ( dato == 4 ) key = '4'; if ( dato == 5 ) key = '5'; if ( dato == 6 ) key = '6'; if ( dato == 7 ) key = '7'; if ( dato == 8 ) key = '8'; if ( dato == 9 ) key = '9';

if ( dato == 10 ) key = '0'; if ( dato == 11 ) key = '*'; if ( dato == 12 ) key = '#'; if ( dato == 13 ) key = 'A'; if ( dato == 14 ) key = 'B'; if ( dato == 15 ) key = 'C'; if ( dato == 0 ) key = 'D';

return key;

}

/-------------------------------------------------------------/ /-------------------------------------------------------------/