[PLEASE HELP] how to make a barcode receiver?
-
@davidlabib said in [PLEASE HELP] how to make a barcode receiver?:
QSerialPort::SerialPortError(DeviceNotFoundError)
Well, that means your program can't find a port called COM4. Read the comments in @raven-worx's code and think about what they are asking you to do.
What is the name of the port that your scanner is connected to? https://www.cyberciti.biz/faq/find-out-linux-serial-ports-with-setserial/
@raven-worx said in [PLEASE HELP] how to make a barcode receiver?:
The code above i've posted definitively works with a USB Barcode scanner and i used it myself already.
My apologies; I didn't read the codes or think of the scenario that @mrjj highlighted in his last post.
If the barcode scanner implements RS232-over-USB, then you're right -- Qt Serial Port can indeed work with the scanner via the USB port.
QtSerialPort works with USB.
USB = Universal Serial BusEven though they both have "serial" in their names, Universal Serial Bus is completely unrelated to old-school serial ports. The term "serial port" usually refers to an RS-232 port: https://en.wikipedia.org/wiki/Serial_port
A USB device can be programmed to emulate serial port comms, but these are the minority. You cannot, for example, use Qt Serial Port to read your USB keyboard.
-
@JKSH i didn't worked
i tried form com 1 to com 18
non of them worked -
@davidlabib said in [PLEASE HELP] how to make a barcode receiver?:
@JKSH i didn't worked
i tried form com 1 to com 18
non of them workedWhat is the name of the port that your scanner is connected to? COMX is a Windows name. Linux names are different.
Read https://www.cyberciti.biz/faq/find-out-linux-serial-ports-with-setserial/ to find the name on your Ubuntu machine.
-
same error
i tried from ttyS0 to ttyS5 didn't work -
@davidlabib said in [PLEASE HELP] how to make a barcode receiver?:
same error
i tried from ttyS0 to ttyS5 didn't workYou didn't answer my question. What is the name of the port that your scanner is connected to?
Also, what does
QSerialPortInfo::availablePorts()
give you? http://doc.qt.io/qt-5/qserialportinfo.html#availablePorts -
@davidlabib said in [PLEASE HELP] how to make a barcode receiver?:
now I'm stuck on
if( !port->bytesAvailable() ) return;
it always return
witch mean no bytes is availableDid you choose the correct settings? How is your scanner configured for the following?
- Baud rate
- Parity
- Data bits
- Stop bits
- Flow control
-
@JKSH
Baud rate 115200 -
@davidlabib
I guess you don't have permission to use the serial port.
Please type:
ls -l /dev/<your-serial-port-name>
in a terminal and post the output here. -
@aha_1980 yes i don't have
but i use sudo -
@davidlabib Better add your user to the group
dialout
and reboot your computer.Of course
sudo
works, but may give new problems.As @JKSH wrote, not only baudrate is important.
I'd suggest to use a terminal program first to verify your scanner works correctly. Then use the same parameters for your code.
-
solved PermissionError
now iam stuck in thisQSerialPort* port = new QSerialPort( this ); QSerialPortInfo::availablePorts(); port->setBaudRate( QSerialPort::Baud115200 ); // possible something else, also check the manual port->setPort( QSerialPortInfo("ttyACM0") ); // COM port - check Device Manager for connected port QSerialPortInfo::availablePorts(); if( port->open(QSerialPort::ReadOnly) ) { ui->label->setText("port opended sucssefully"); connect(port, &QSerialPort::readyRead, this, [port]() { if( !port->bytesAvailable() ) qDebug() << port->error(); ////////// I'm stuck here it seems that there is no data return; const QByteArray scannedData = port->readAll(); // ... }); } else { ui->label->setText("Error"); qDebug() << port->error(); QSerialPortInfo::availablePorts(); } }
also it will execute this if i clicked a button what if the user didn't click
-
@davidlabib said in [PLEASE HELP] how to make a barcode receiver?:
qDebug() << port->error(); ////////// I'm stuck here it seems that there is no data
Do you mean the slot is called but bytesAvailable() returns 0? If so what does
qDebug() << port->error();
print out?
"also it will execute this if i clicked a button what if the user didn't click" - yes, if user does not click the button it will not be executed.
-
@jsulm said in [PLEASE HELP] how to make a barcode receiver?:
Do you mean the slot is called but bytesAvailable() returns 0? If so what does
qDebug() << port->error();
print out?
nothing
-
@davidlabib Looks like the slot isn't called.
This code is broken:if( !port->bytesAvailable() ) qDebug() << port->error(); ////////// I'm stuck here it seems that there is no data return; const QByteArray scannedData = port->readAll();
It shoud be
if( !port->bytesAvailable() ) { qDebug() << port->error(); ////////// I'm stuck here it seems that there is no data return; } const QByteArray scannedData = port->readAll();
-
@jsulm i have fixed it and still nothing
-
finally solved
@Pablo-J-Rogina you were right it's lower level problem
put this in the constructor
and every barcode scan it willqDebug() << scannedData;
Of course need modifying
but here is the codeQSerialPort* port = new QSerialPort( this ); QSerialPortInfo::availablePorts(); port->setBaudRate( QSerialPort::Baud115200 ); // possible something else, also check the manual port->setPort( QSerialPortInfo("COMX") ); // COM port - check Device Manager for connected port if( port->open(QSerialPort::ReadOnly) ) { ui->label->setText("hi"); connect(port, &QSerialPort::readyRead, this, [port]() { const QByteArray scannedData = port->readAll(); qDebug() << scannedData; // ... }); }