Go Down

Topic: RESOLVIDO: Receber e tratar dados? (Read 3550 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.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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