Solved [PLEASE HELP] how to make a barcode receiver?
-
@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 -
@JKSH ok i could find the right port and passed from
if( port->open(QSerialPort::ReadOnly) )
now I'm stuck on
if( !port->bytesAvailable() ) return;
it always return
witch mean no bytes is available -
@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 -
Don't develop as super-user.
The command @aha_1980 will show the user and group affected to the device. Add your own user to that group, then log out and log in again and you will have access to the device.
-
@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; // ... }); }