Eu preciso utilizar o bluetooth junto com um sensor RFID, porém não exibi nada relacionado ao bluetooth. Circuito:

 

Parte do código do aplicativo android que envia o código:

Só para uma explicação rápida:

** Depois de ler algum código de barras ele faz:

  - Exibi o código recebido;

  - Insere o código no banco de dados;

  - Aumenta o valor de uma varável (apenas para uma verificação);

  - Envia o código via bluetooth.

Ai o código no arduino (parte do RFID funciona, porém do bluetooth não):

#include <SoftwareSerial.h>

SoftwareSerial rfid(2, 3);
SoftwareSerial bluetooth(0, 1);

char r; // RFID
char b; // bluetooth
char cr[12]; // Concatenação do RFID
char cb[13]; // Concatenação do bluetooth
int i = 0; // contagem para RFID
int j = 0; // contagem para bluetooth

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

void loop()
{
if(rfid.available()){

r = rfid.read();

for(i = 0; i <= 12; i++)
{
if ((r >= 48) && (r <= 57) || (r >= 65) && (r <= 90) || (r >= 97) && (r <= 122))
cr[i] = r;
}

Serial.print("R:");
Serial.println(cr);
}


if(bluetooth.available()){

b = bluetooth.read();

for(j = 0; j <= 13; j++)
{
if ((b >= 48) && (b <= 57) || (b >= 65) && (b <= 90) || (b >= 97) && (b <= 122))
cb[j] = b;
}

Serial.print("B:");
Serial.println(cb);
}

}

Fora que não exibi os dados recebido via bluetooth, ele também não exibi o `R:` que coloquei antes de exibir o RFID, isso serve para na hora de recebe-lo no PC via serial, eu possa diferenciar-los.

Alguém sabe qual o problema?? Antecipo que sei acho que provavelmente a parte do código bluetooth no arduino está errada.

Exibições: 1116

Responder esta

Respostas a este tópico

Com ajuda de um membro do fórum, eu retirei alguns erros apontados por ele e o código ficou assim:

#include <SoftwareSerial.h>

SoftwareSerial rfid(2, 3);

char r; // RFID
char b; // bluetooth
char cr[12]; // Concatenação do RFID
char cb[13]; // Concatenação do bluetooth
int i = 0; // contagem para RFID
int j = 0; // contagem para bluetooth

void setup()
{
Serial.begin(115200);
Serial.print("$");
Serial.print("$");
Serial.print("$");
delay(100);
Serial.println("U,9600,N");
Serial.begin(9600);

rfid.begin(9600);
}

void loop()
{
if(rfid.available()){

r = rfid.read();

for(i = 0; i <= 12; i++)
{
if ((r >= 48) && (r <= 57) || (r >= 65) && (r <= 90) || (r >= 97) && (r <= 122))
cr[i] = r;
}

rfid.print("R:");
rfid.println(cr);
}


if(Serial.available()){

b = Serial.read();

for(j = 0; j <= 12; j++)
{
if ((b >= 48) && (b <= 57) || (b >= 65) && (b <= 90) || (b >= 97) && (b <= 122))
cb[j] = b;
}

Serial.print("B:");
Serial.print(cb);
}

}

porém continua com problemas, pois as tags RFID aparecem onde deveria aparecer o bluetooth, e ainda por cima aparecem com erro.  

Alguém sabe resolver??

 

Nao tinha que ser:

 

if(Serial.available()){

for(j = 0; j <= 12; j++)
{

b = Serial.read();   //<- Dentro do loop

if ((b >= 48) && (b <= 57) || (b >= 65) && (b <= 90) || (b >= 97) && (b <= 122))
cb[j] = b;
}

Idem para o outro loop.

??

Isoladamente (apenas com o RFID ou apenas com o bluetooth) do jeito que fiz funcionou, com a leitura da serial fora do loop. Acha que há alguma diferença prática??

Relendo agora, dos 2 jeitos está esquisito..

Do seu jeito ele ve se tem byte na serial, le um byte da serial e preenche cb[] com 12 copias desse byte. Já com ele no loop ele leria ver se tem algum byte, le e preenche 1x, depois le, depois preenche, .... Só que tambem nao está correto pq ele nao verifica se ha bytes disponiveis e ja vai lendo.

Diria que a solucao seria fazer sem o for().

Se tiver byte e, rfid ele le, grava, incrementa o contador e testa se chegou no maximo o contador. Se tiver em serial idem. 

Aih sim os 2 loops ficam unificados, viram um só.

Veja se é isso.. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço