ACENDER EQUIPAMENTOS POR CELULAR , PROJECTO DTMF

Viva, companheiros, há muito que tencionava me iniciar com o Arduino e elaborar alguns projectos de automaçao, mas como primeiro projecto, não está a correr nada bem....ou pelo menos como esperava.

O que se passa e o seguinte: eu estou a usar o seguinte tutorial que esta neste site:

http://arduino-ce.blogspot.com/

é logo o primeiro que aparece.

O que me está a acontecer é o seguinte: Eu ja consegui estabelecer ligacao entre o arduino e o telemovel, mas sempre que clico em uma tecla correspondente a um tom DTMF, o arduino nao corresponde a essa tecla... exemplo se carregar na tecla 3 ele retorna como 8, se carregar na tecla 5 ele retorna 4.. e assim em adiante...

pensava que tinha o integrado e o cristal danificados... comprei outros mas nao resultou...
Tambem troquei de telemovel... mas continua igual..

Já nao sei o que fazer... se alguem quiser exprimentar por favor exprimente e comunique aqui os resultados obtidos.

E se alguem tiver uma sugestao, para me explicar porque isto nao funciona tambem agradecia.

Obrigado

3 = 0011 8 = 1000

5 = 0101 4 = 0100

Estava a tentar estabelecer aqui um padrão.

Copiaste o código literalmente como estava no site? Se sim, o problema estará no descodificador DTMF ou ligações. Assim sendo, para poderes definir se é nas ligações ou no chip, desliga as ligações do descodificador ao Arduino e faz jumpers nas entradas digitais do Arduino referentes a Q0, 1, 2, 3 e vê se ao fazer isso o Arduino responde correctamente. Se responder, o problema estará no lado do descodificador.

Podes colocar aqui os resultados que obténs carregando em todas as teclas?

Estive brincando com isso mês passado com o mesmo tutorial que você e tive problemas também, aquele codigo está todo confuso e errado, segue um trecho do código do próprio site, não sei como colocam sem testar...

#define pinBit01  3 // STD
#define pinBit02  4 // Q3
#define pinBit03  5 // Q2
#define pinBit04  6 // Q1
#define pinBitStd 7 // Q0

Como a gente presume que o código já foi debugado acha que é falta de atenção na montagem ou componente queimado né,
na protoboard não ia pra frente então fiz a montagem em uma placa universal e corrigi o código. Segue o meu código para testar antes de desmontar a protoboard...

#define RELE1 2 // Conectado ao fio branco do módulo Relé(Figura4)

#define pinBitStd 3
#define pinBit04  4
#define pinBit03  5
#define pinBit02  6
#define pinBit01  7

int tecla = 0;

int bit01 = 0;   
int bit02 = 0; 
int bit03 = 0; 
int bit04 = 0; 
int bitStd= 0; 

int RELE1_STATE = LOW; // Estado do Relé LOW (Desligado)

void setup() { 
  Serial.begin(9600); // Iniciamos a Serial com Baudrate 9600
  pinMode(RELE1, OUTPUT); // Definimos o pino do Relé como Saída
  Serial.println(" ");
  Serial.println("Aguardando tecla de comando..."); // Exibimos a mensagem no terminal...
}

void loop(){ 

//  bitStd = digitalRead(pinBitStd); //Lê o estado do pino STD e armazena em 'bitStd' 

while(!digitalRead(pinBitStd)){;}
  
  if (digitalRead(pinBitStd)) {//Se estiver em nível alto fará as leituras 
                       //dos bits dos pinos Q3, Q2, Q1 e Q0

    bit01 = digitalRead(pinBit01);   
    bit02 = digitalRead(pinBit02); 
    bit03 = digitalRead(pinBit03); 
    bit04 = digitalRead(pinBit04); 

    tecla = (bit04 * 8) + (bit03 * 4) + (bit02 * 2) + (bit01 * 1);//Conversão binária para 
                                                                  //decimal (ver Vídeo1)

//    Serial.print("Recebido: "); // Exibe a mensagem

    switch (tecla){ // Seleciona a tecla pressionada

    case 1: // Tecla 1
      Serial.print("1");     
      /* COMANDO PARA RELE1 */
      RELE1_STATE = !RELE1_STATE; // Guarda o estado INVERTIDO do Relé.     
      break;

    case 2: // Tecla 2
      Serial.print("2");               
      break;

    case 3: // Tecla 3
      Serial.print("3");
      break;

    case 4: // Tecla 4
      Serial.print("4");
      break;

    case 5: // Tecla 5
      Serial.print("5");
      break;

    case 6: // Tecla 6
      Serial.print("6");
      break;

    case 7: // Tecla 7
      Serial.print("7");
      break;

    case 8: // Tecla 8
      Serial.print("8");
      break;

    case 9: // Tecla 9
      Serial.print("9");
      break;

    case 10: // Tecla 0
      Serial.print("0");
      break;

    case 11: // Tecla *
      Serial.print("*");
      break;

    case 12: // Tecla #
      Serial.print("#");
      break; 
    }

//    digitalWrite(RELE1, RELE1_STATE);//Liga ou desliga o Relé1 conforme o estado (HIGH/ LOW)

    // Zeram-se todas as variáveis 
    //tecla = 0;
    //bit01 = 0;   
    //bit02 = 0; 
    //bit03 = 0; 
    //bit04 = 0; 
    //bitStd= 0; 
delay (100); // Aguarda 500 milissegundos
  } // Sai do switch
while(digitalRead(pinBitStd)){;}
  
} // Volta pro loop...

Observe que os pinos estão configurados no meu codigo como os desenhos do site, então siga as instruções de montagem.

FABIO

Muito obrigado.... agora sim funciona na perfeicao estive tao perto....

Mais uma questao a voces..

Agora para tornar este projecto seguro...

Dá para colocar um PIN antes de carregar na tecla que activa o rele?

Ou seja, quando ligo para o telemovel, em vez de carregar na tecla 2 para ligar o rele... pressionar primeiro o meu codigo ex: 2012 e so depois tecla 2... ou 3 4 5.. etc

Se sim, que alteracao deva fazer a esse codigo?

Muito obrigado