Go Down

Topic: RESOLVIDO: Receber e tratar dados? (Read 4707 times) previous topic - next topic

bubulindo

Mas tens de mandar tudo junto...

1234;XXXX

Foi assim que explicaste. Não disseste que ias enviar a pass e depois numa trama completamente diferente ias enviar um valor que querias alterar.
This... is a hobby.

mmoscz

#16
Feb 07, 2012, 06:03 pm Last Edit: Feb 07, 2012, 07:03 pm by mmoscz Reason: 1
Bom, aparentemente você não está limpando o buffer da serial do ARDUINO.
Tente mandar os testes assim
Senha correta: 1234;0000
Senha Incorreta: 1111;2222
E veja o que retorna quando mandar novamente 1234;0000

Assim você tem uma sistemática para os testes.
Eu assumo que
Quando mandou a senha CORRETA, mandou 1234;5667
Quando mandou a senha INCORRETA, mandou  4444;8888
Quando mandou a senha CORRETA novamente mandou 1234;5667

Então, quando fez o FOR para pegar novamente 4 caracteres, achando que ia pegar da senha correta, pegou os quatro caracteres subsequentes aos quatro caracteres da senha incorreta que eram ;888, e não a nova senha 1234.




4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

camolas


Mas tens de mandar tudo junto...

1234;XXXX

Foi assim que explicaste. Não disseste que ias enviar a pass e depois numa trama completamente diferente ias enviar um valor que querias alterar.


Boas amigo,

Eu tenho sempre mandado tudo junto 1234;XXXX  mas n worka se tu propio exprimentares veras isso.

Obg.

camolas


Bom, aparentemente você não está limpando o buffer da serial do ARDUINO.
Tente mandar os testes assim
Senha correta: 1234;0000
Senha Incorreta: 1111;2222
E veja o que retorna quando mandar novamente 1234;0000

Assim você tem uma sistemática para os testes.
Eu assumo que
Quando mandou a senha CORRETA, mandou 1234;5667
Quando mandou a senha INCORRETA, mandou  4444;8888
Quando mandou a senha CORRETA novamente mandou 1234;5667

Então, quando fez o FOR para pegar novamente 4 caracteres, achando que ia pegar da senha correta, pegou os quatro caracteres subsequentes aos quatro caracteres da senha incorreta que eram ;888, e não a nova senha 1234.




Boas amigo,


Como tenho de fazer para limpar o bufer?

obg

Obg




mmoscz

#19
Feb 09, 2012, 04:09 am Last Edit: Feb 09, 2012, 04:16 am by mmoscz Reason: 1
Eu já tinha mandado a unica forma que há para limpar o buffer.

http://arduino.cc/forum/index.php/topic,89602.msg674743.html#msg674743

Code: [Select]

else {
       Serial.println("FAIL");
       while(serial.avalaible()>0)
              {
              serial.read(); // Tira todos os caracteres do buffer.
              }
       }

Insira esse while após o seu Serial.println("FAIL"), isso vai retirar todos os caracteres disponíveis no buffer da serial.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

camolas

Boas,

Aqui fica o codigo full working.

Obg a todos pela ajuda  :)

Code: [Select]
char pass [5];
int data;

void setup()
{
  //Create Serial Object
  Serial.begin(9600);
  Serial.println("ARDUINO ON!");
}

void loop() {
 
if (Serial.available() >8) { //assumir que o outro byte vem a caminho.
    for (int i = 0; i<4; i ++) {
      pass[i] = Serial.read();
    }
    pass[4] = '\0'; //end string
if   ((strcmp(pass, "1234") == 0) && (Serial.read() == ';')) {//equal and the separator is good
 
       for (int i = 0; i< 4; i++) {
           pass[i] = Serial.read(); } //get the number.
       data = atoi(pass);
       Serial.println("PASS OK!");
       Serial.println(data);
        Serial.println(pass[2]);
         }
       
      else if ((strcmp(pass, "4321") == 0) && (Serial.read() == ';')) {//equal and the separator is good
 
       for (int i = 0; i< 4; i++) {
           pass[i] = Serial.read(); } //get the number.
       data = atoi(pass);
       Serial.println("PASS 2 OK!");
       Serial.println(data);
        Serial.println(pass[2]); 
       
          }
       
       
       
    else
    {
       Serial.println("FAIL");
       }
        while (true) {
      if (Serial.available() > 0 && Serial.read() == 't') {
        break;
      }
    }
      }   

    }         

mmoscz

Legal, muda o titulo para (resolvido), e indica o que fez para corrigir, pois fica mais fácil achar o problema e a solução.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

Go Up