collapse

* Posts Recentes

TV Risco Horizontal por SerraCabo
[Ontem às 22:53]


Recuperação de um AGC por SerraCabo
[Ontem às 21:58]


Placa BMS Desliga por almamater
[Ontem às 14:16]


Potênciometro 4.7 ou 5 KOhm com switch por Hugu
[Ontem às 00:02]


é preciso ter cuidado com ESD? por Hugu
[17 de Dezembro de 2018, 18:50]


Valores de alcance de ponta de prova por vasco
[17 de Dezembro de 2018, 14:28]


Como reproteger as pontas de cobre do ferros de soldar? por vasco
[16 de Dezembro de 2018, 18:53]


Bibliotecas para arduino e drivers de stepper - o problema da 'distracção' por SerraCabo
[14 de Dezembro de 2018, 12:12]


Zener BZW04-105? por brunus
[11 de Dezembro de 2018, 17:34]


Artigo 11, 13 e os restantes por jm_araujo
[10 de Dezembro de 2018, 11:05]

Autor Tópico: Password  (Lida 1149 vezes)

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

Offline helderjsd

  • Mini Robot
  • *
  • Mensagens: 144
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???

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.439
  • 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: 144
Re: Password
« Responder #2 em: 13 de Janeiro de 2017, 16:21 »
PERFEITO :) :) :) :) :)

Nao conhecia esse truque
Obrigadao :)

Offline KammutierSpule

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