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.
Tags:
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..
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por