collapse

* Links de Robótica

* Posts Recentes

Recomendação de um opamp para um DAC r2r por jm_araujo
[Hoje às 10:48]


Feira de electricidade e eletrónica por beirao
[Hoje às 00:32]


RN42 e TP-Link MR3020 por doiga
[Ontem às 19:22]


Ajuda Projecto IR / RF por senso
[Ontem às 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]

Autor Tópico: Password  (Lida 623 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline helderjsd

  • Mini Robot
  • *
  • Mensagens: 140
Password
« em: 13 de Janeiro de 2017, 15:56 »
Boas,
Estou aqui a inventar com um DTMF decoder, ligado entre o telemovel e o arduino.
A minha ideia, é usar um DTMF generator no telemovel, e ir "meviando" numeros para o arduino.
Tudo funciona bem, excepto a validação da password.
Adaptei o codigo nos exemplos dos keypad sd ememebranam, e usando a biblioteca password.h

Mas o raio é que isto dá sempre password errada. Com o keypad de memebrana funciona bem e valida correctamente, mas usando o que recebo do DTMF dá erro.
estou a usar o seguinte codigo:
Código: [Seleccione]
#include <Password.h>

int Q4 = 10; // Q4 of MT8870D is connected to Digital Pin 10 of Arduino
int Q3 = 11; // Q3 of MT8870D is connected to Digital Pin 11 of Arduino
int Q2 = 12; // Q2 of MT8870D is connected to Digital Pin 12 of Arduino
int Q1 = 13; // Q1 of MT8870D is connected to Digital Pin 13 of Arduino
int Qt = 7;
int Tirou=0;
Password password = Password( "12345" );

void setup() {
  Serial.begin(9600);
 
  // make the digital pins inputs:
  pinMode(Q1, INPUT);
  pinMode(Q2, INPUT);
  pinMode(Q3, INPUT);
  pinMode(Q4, INPUT);
  pinMode(Qt, INPUT);
}

void loop() {
  int key_number;
  // read the input pin:
  if ((digitalRead(Qt)==HIGH) and (Tirou==0)){
    Tirou=1;
  int read_from_Q1 = digitalRead(Q1);   // Read data from Q1
  int read_from_Q2 = digitalRead(Q2);   // Read data from Q2
  int read_from_Q3 = digitalRead(Q3);   // Read data from Q3
  int read_from_Q4 = digitalRead(Q4);   // Read data from Q4
 
  key_number = (read_from_Q4 * pow(2,3)) + (read_from_Q3 * pow(2,2)) + (read_from_Q2 * pow(2,1)) + (read_from_Q1 * pow(2,0));
 
 /* Serial.print("Binary of key number :"); 
  Serial.print(read_from_Q4);
  Serial.print(read_from_Q3);
  Serial.print(read_from_Q2);
  Serial.print(read_from_Q1);
  Serial.print(" ");
  */
 
  Serial.print("Key pressed is :");
  Serial.print(key_number);
  Serial.println(" ");

  if (key_number==11) {
   
    Serial.println("* - VAMOS VERIFICAR A PASS");
    checkPassword();
    Serial.println(password.evaluate());
  }
  else {
    if (key_number==12) {
      Serial.println("# - PASSWORD LIMPA/RESET");
      password.reset();
    }
    else {
      password.append(key_number);
      Serial.print("Numero adicionado:" );
      Serial.print(key_number);
    }
  }
    //delay(50);
 
  key_number = 0;
  }
  if (digitalRead(Qt)==LOW)
   {
      Tirou=0;
   }
}


void checkPassword(){
  if (password.evaluate()){
    Serial.println("Successo");
   //-----------------------------------------------------
   
    password.reset(); 
  }else{
    Serial.println("Errado");

  }
}

Se introduzir por exemplo os numeros 12345* no telemovel, o monitor mostra o seguinte:

Código: [Seleccione]
Key pressed is :1 Numero adicionado:1
Key pressed is :2 Numero adicionado:2
Key pressed is :3 Numero adicionado:3
Key pressed is :4 Numero adicionado:4
Key pressed is :5 Numero adicionado:5
Key pressed is :11
* - VAMOS VERIFICAR A PASS
Errado
0

Porque raio dá sempre pass errada???

Online jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.167
  • NERD!
Re: Password
« Responder #1 em: 13 de Janeiro de 2017, 16:12 »
Acho que descobri.

A biblioteca password compara strings, e estás a encher a mesma (append) com números quando devias meter chars.
Segundo a documentação http://playground.arduino.cc/Code/Password :
Citar
append(character)

Append a character to the currently guessed password

Troca a linha:
Código: [Seleccione]
password.append(key_number);
Por esta:
Código: [Seleccione]
password.append('0'+key_number);Eu sei que parece estranha, mas é um truque velho para coverter inteiros de 1 digito no char correspondente.
« Última modificação: 13 de Janeiro de 2017, 16:15 por jm_araujo »

Offline helderjsd

  • Mini Robot
  • *
  • Mensagens: 140
Re: Password
« Responder #2 em: 13 de Janeiro de 2017, 16:21 »
PERFEITO :) :) :) :) :)

Nao conhecia esse truque
Obrigadao :)

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.142
Re: Password
« Responder #3 em: 13 de Janeiro de 2017, 22:36 »