Go Down

Topic: decodifcador DTMF decoder dtmf mt8870 con arduino (Read 6211 times) previous topic - next topic

shalomsoftware

Mar 02, 2010, 10:52 pm Last Edit: Mar 03, 2010, 09:44 pm by shalomsoftware Reason: 1


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;

}

/*-------------------------------------------------------------*/
/*-------------------------------------------------------------*/

Go Up