collapse

* Links de Robótica

* Posts Recentes

Palavras Cruzadas por Hugu
[Hoje às 02:48]


Editor online de imagens p/ distorcer imagens trapezoidais p/ rectangulo? por Hugu
[Hoje às 01:26]


[Projecto] Bomba Airsoft por SrMorte
[Ontem às 23:51]


Apresentação por SrMorte
[Ontem às 22:32]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[19 de Setembro de 2017, 10:20]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]

Autor Tópico: Password  (Lida 526 vezes)

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

Offline helderjsd

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

Nao conhecia esse truque
Obrigadao :)

Offline KammutierSpule

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