Hola, muy buenas a toda la comunidad de Arduino.
Vengo aquí al foro en busca de alguien que pueda ayudarme o asesorarme, soy novato en esto de la programación, razón por la cual llegue a este foro. Les platico un poco resumido lo que quiero hacer para no llevarla a la larga.
Tengo un proyecto para mi uni, en el cual estoy usando una Arduino Mega 2560 con una USB Host Shield, este ultimo para poder trabajar con un escaner de código de barras de la marca symbol modelo LS2208, el cual se alimenta con los 9v de la fuente que le coloqué al arduino. Encontré en internet un código con el cual puedo trabajar con el sistema y poder escanear el código de barras de algún producto y poder visualizar el numero serial en una LCD agregada en el circuito, a continuación anexo el código.
#include <HID.h>
#include <hid.h> //Add to Oleg Mazurov code to Bar Code Scanner
#include <hiduniversal.h> //Add to Oleg Mazurov code to Bar Code Scanner
#include <usbhub.h>
#include <LiquidCrystal.h>
#include <avr/pgmspace.h>
#include <Usb.h>
#include <usbhub.h>
#include <avr/pgmspace.h>
#include <hidboot.h>
#define DISPLAY_WIDTH 16
//initialize the LCD library with the numbers of the interface pins//
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
USB Usb;
USBHub Hub(&Usb); //I enable this line
HIDUniversal Hid(&Usb); //Add this line so that the barcode scanner will be recognized, I use "Hid" below
HIDBoot<USB_HID_PROTOCOL_KEYBOARD> Keyboard(&Usb);
class KbdRptParser : public KeyboardReportParser
{
void PrintKey(uint8_t mod, uint8_t key); // Add this line to print character in ASCII
protected:
virtual void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
uint8_t c = OemToAscii(mod, key);
if (c)
OnKeyPressed(c);
}
/* what to do when symbol arrives */
void KbdRptParser::OnKeyPressed(uint8_t key)
{
static uint32_t next_time = 0; //watchdog
static uint8_t current_cursor = 0; //tracks current cursor position
if( millis() > next_time ) {
lcd.clear();
current_cursor = 0;
delay( 5 ); //LCD-specific
lcd.setCursor( 0,0 );
}//if( millis() > next_time ...
next_time = millis() + 200; //reset watchdog
if( current_cursor++ == ( DISPLAY_WIDTH + 1 )) { //switch to second line if cursor outside the screen
lcd.setCursor( 0,1 );
}
Serial.print( (char)key ); //Add char to print correct number in ASCII
lcd.print( (char)key ); //Add char to print correct number in ASCII
};
KbdRptParser Prs;
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
if (Usb.Init() == -1) {
Serial.println("OSC did not start.");
}
delay( 200 );
Hid.SetReportParser(0, (HIDReportParser*)&Prs); //Here I change "Keyboard" for "Hid"
// set up the LCD's number of columns and rows:
lcd.begin(DISPLAY_WIDTH, 2);
lcd.clear();
lcd.noAutoscroll();
lcd.print("Ready");
delay( 200 );
}
void loop()
{
Usb.Task();
}
Como mencione antes, este código lo saque de internet ya que se basa en lo que quiero hacer. Ahora bien, la parte faltante del proyecto seria la siguiente, en la que solicito ayuda:
La idea es crear con el sistema del arduino mega y el escáner, un sistema o estructura de indicadores visuales, con leds, implementado en un rack o exhibidor con espacio para 6 contenedores o charolas, en las cuales irían 6 familias u ordenes de productos con un mismo numero de parte o serial cada una que las diferencia, cada charola tendría su LED, que se activaría de forma intermitente al momento de que yo escaneé el código de barras del producto dándome a entender que en ese charola va ir depositado ese producto, así como también con los demás familias u ordenes de productos, con la finalidad de de evitar material mezclado por x o y motivo.
Cómo puedo agregar esta funcionalidad en el código?
Eh intentado buscando proyectos parecidos en el foro pero no he tenido suerte en encontrar alguno.
Soy novato en esto de la programación y agradecería cualquier apoyo o ayuda.
Una disculpa con los moderadores si infringí alguna regla en la realización de este post.