Ajuda a tratar ID (RFID)

Meu “problema” é meio confuso mas irei tentar explicar:

Por algum motivo, que não sei qual é, quando se tenta ler o ID da tag ele é exibido em “loop”. Exemplo de código:

#include <SoftwareSerial.h>
SoftwareSerial rfidReader(2, 3);
char c= 0;
void setup()
{
Serial.begin(9600);
rfidReader.begin(9600);
}
void loop()
{
if (rfidReader.available() > 0)
{
c = rfidReader.read();
Serial.print(c);
}
}

Se eu executa-lo, a ID aparecerá normalmente, mas se eu trocar o ‘print’ por ‘println’ (da quebra de linha automática) aparecerá em linhas diferentes o ID, cada caractere em uma linha. Ex:

6
6
0
0
6
C
1
5
5
5
4
A

E eu não quero que isso aconteça, pois resgato o ID via serial e insiro o valor no banco de dados, mas insere 12 valores, um com cada caractere e isso não pode acontecer.

Como resolver??

Podes criar mil e uma threads no fórum acerca disto que vai sempre dar ao mesmo...
Em que é que a minha resposta anterior não te ajudou?

http://forum.arduino.cc//index.php?topic=193032.0

bubulindo:
Primeira questão, o teu leitor RFID retorna-te uma string ou um inteiro?

Certamente que não ´€ um inteiro, então porque é que a tua funcão tem um vector de inteiros?

Não podes passar vectores vazios para dentro de funcões... tens de passar um apontador para um vector.

Ao fazeres return vect[12] estás a retornar o inteiro que está armazenado na casa 12 do teu vector.

a tua variável get tem o tamanho de 1 inteiro... porque é que a tua funcão id é feita para strings se só mandas 1 inteiro lá para dentro?

É bastante óbvio que não sabes usar ponteiros, vectores ou strings... se calhar é melhor comecares por aí. Toma alguma material de leitura.

http://www.cs.bu.edu/teaching/c/string/intro/
http://www.taranets.net/cgi/ts/1.37/ts.ws.pl?w=329;b=280
http://pw1.netcom.com/~tjensen/ptr/pointers.htm

Tentaste perceber o que escrevi aqui? Viste os links que coloquei? Porque abriste outra thread sobre o mesmo assunto em vez de responderes?

Eu uso esse sketch para ler dados rfid, talvez te ajude no que precisa.

String msg;
void setup() {
Serial.begin(9600);
}

char c;

void loop() {
while(Serial.available()>0) {
c=Serial.read();
msg += c;
delay(1);
Serial.println(msg);
}
}

Eu uso esse sketch para ler dados rfid, talvez te ajude no que precisa.

String msg;

Usar a class String só para armazenar uma string de um Rfid.De todo desaconselhavel
Porque não apenas um char array devidamente terminado para obteres uma string?

Talvez porque, como o poster original também sentiu, os arrays são monstros de 7 cabecas que destroem o interior dos computadores, queimam os pinos dos microcontroladores e turvam os pensamentos dos utilizadores?

Código final que fiz para solucionar o problema:

#include <SoftwareSerial.h>

SoftwareSerial rfid(2, 3);

char c, conc[12];
int i;

void setup(){
  Serial.begin(9600);
  rfid.begin(9600);
}

void loop(){
  if(rfid.available()){
    c = rfid.read();
   
    if ((c >= 32) && (c <= 126)){
      conc[i] = c;
      i++;
    }
    
    if(i==12){
      Serial.println(conc);
      i=0;
    }
  }
}

E isso compila?

aquela linha onde igualas um char a um apontador deve dar faísca, não achas?

HugoPT:

Eu uso esse sketch para ler dados rfid, talvez te ajude no que precisa.

String msg;

Usar a class String só para armazenar uma string de um Rfid.De todo desaconselhavel
Porque não apenas um char array devidamente terminado para obteres uma string?

Tudo bem HugoPT, eu usei este sketch a tempos atrás quando estava fazendo alguns testes com um ID20. Acredito que foi necessário devido a instancia substring que foi utilizada.
Segue, não sei se é o correto mais funcionou.

#define MY_TAG_CODE "1E00D9AAA1CC"
msg=msg.substring(1, 13);
if(msg.indexOf(MY_TAG_CODE)>=0)
{
digitalWrite(13, HIGH);
}

bubulindo:
E isso compila?

aquela linha onde igualas um char a um apontador deve dar faísca, não achas?

Incrivelmente sua ignorância deu errado... O código estava certo, porém o fórum interpretou o [i ] como um bbcode e não o exibiu, mas editei colocando o código dentro de um code.

Ok... já que sou ignorante vou abster-me de estragar a conversa.

Boa sorte. :slight_smile: