Bom dia a todos,
Preciso realizar a leitura de um produto via código de barras e capturar a informação do código para realizar outras ações, mas só consegui imprimir a informação na serial, pois ele imprime caracter a caracter. Preciso capturar essa informação e colocar em uma variável mas já procurei em vários lugares e não descobri como fazer.
Segue parte código usado nesse teste.
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
if (Usb.Init() == -1) {
Serial.println("OSC did not start.");
}
delay( 200 );
HidKeyboard.SetReportParser(0, &Prs);
}
void loop()
{
Usb.Task();//aqui eu queria colocar o valor em uma variável e não consigo
}
Tags:
Bom dia GBS,
Recomendações:
1. Remova seu sketch da área de texto do seu tópico;
2. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar
3. Comente as linhas do seu sketch. Fica mais fácil entender o que vc quer fazer com cada
linha e facilita a ajuda.
4. Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e anexe o arquivo
com o seu sketch.
RV
Qual arduino esta usando ?
Qual o modelo do leituro ?
Qual biblioteca ?
Adianto que pergunto algumas vezes para complementar a informaçao enriquecendo o site. Outro que veja logo depois pode pegar seu exemplo de hardware e dar continuidade. Pode ajudar mais gente... Não necessariamente afeta a resposta. Mas o intuito é transformar seu "case" num tutorial, até.
Se entendi ja funciona mandando para a serial mas nao vi onde ele manda para a serial.
Nao conheco esse leitor e biblioteca, mas pelo resultado do google diria que é essa:
https://github.com/felis/USB_Host_Shield_2.0/blob/master/examples/H...
Que tem o trecho:
void KbdRptParser::OnKeyPressed(uint8_t key)
{
Serial.print("ASCII: ");
Serial.println((char)key);
};
Onde de fato ele retorna, por absurdo que pareça, apenas para a serial. Aih é Void...
Sugiro modificar esse trecho.
Criar 2 variaveis globais.
Uma string e uma bool.
A cada novo caracter encontrado vc adiciona o caracter na string.
Se for um enter em vez de acrescentar vc seta a variavel bool, que vai indicar que recebeu uma linha completa.
A ultima vez que usei leitores de codigo de barras para PC adaptados para microcontrolador eles ainda eram PS2 (o conector e não o videogame) . Naquela epoca vc recebia exatamente igual a uma digitaçao e tinha uma configuraçao por strap para adicionar um enter ao final. Sempre vinha ligado, melhor forma.
Boa tarde,
Me parece que seu Barcode reader usa USB, não é ?
Esta usando Host Shield ? Ou Arduino DUE ?
https://www.circuitsathome.com/mcu/connecting-barcode-scanner-ardui...
Se fosse Barcode serial :
https://arduino.stackexchange.com/questions/8473/how-to-get-serial-...
1 - Estou usando arduino UNO
2 - Leitura via USB
3 - Bibliotecas utilizadas no pacote: USB_Host_Shield-master
usbhid.h
usbhub.h
hiduniversal.h
hidboot.h
SPI.h
4 - Ao Chamar o método Usb.Task(), ele já imprimi o valor na serial
Vou tentar fazer o que mencionou acima, mas não estou encontrando esse método dentro da biblioteca.
Obrigado desde já.
Então é só verificar na biblioteca qual o tipo do retorno, então você armazena em uma variável, tipo:
var teste = Usb.Task();
Então, na minha dica, se vc for somando em uma String, vide:
https://www.arduino.cc/reference/en/language/variables/data-types/s...
Vc pode criar uma string e ir adicionando os caracteres que vierem nela.
Quando vc perceber (if) que veio o enter (\n) vc processa o conjunto que veio.
Aproveitei a madrugada para ler sobre essa biblioteca, funções e métodos, até abrir partes dos seus códigos, notei que não é no USB.Task() que está imprimindo, está apenas fazendo com que a biblioteca execute suas tarefas (Meio óbvio rsrs), então ela possui métodos que fazem a captura do que foi executado, para esse caso de teclado, você vai ter que usar KbdRptParser::OnKeyPressed, que no momento deve está assim:
void KbdRptParser::OnKeyPressed(uint8_t key)
{
Serial.print("ASCII: ");
Serial.println((char)key);
};
Ou seja, ela captura o resultado da tarefa e imprime, para adaptar para as suas necessidades, seria algo mais ou menos assim:
// Antes de tudo precisa ter uma string para armazenar o conteúdo que vai ser juntado
String conteudo = "";
void KbdRptParser::OnKeyPressed(uint8_t key)
{
//Serial.print("ASCII: ");
//Serial.println((char)key);
conteudo += (char)key;
};
Aí você analisa esse conteudo e quando receber "\n", significa que chegou ao final da informação.
Só lembrando que quando receber o final da informação você deve limpar a string para receber a nova informação que pode chegar, apenas com conteudo = "";
Para chegar a essa conclusão, eu abrir o arquivo Usb.cpp da biblioteca e também dei uma lida em alguns tópicos, mas principalmente esse abaixo:
https://www.circuitsathome.com/mcu/connecting-barcode-scanner-ardui...
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por