Verbinden Arduino mit Qt
Ich bin senden "R" char von Qt zu Arduino
und warten Sie auf R, um das LED-blinken auf dem Arduino. Aber es funktioniert nicht...
Ich denke, es könnte ein problem mit waitFotBytesWritten oder ASCI...
N. B: Jedes signal ist gut; brauchen nicht zu einem char.
Meine Qt-code:
QSerialPort serial;
serial.setPortName("PORT_NAME");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
if (serial.isOpen() && serial.isWritable())
{
qDebug() << "Ready..." << endl;
serial.write("R");
if(serial.flush())
{
qDebug() << "ok" << endl;
}
qDebug() <<"value sent!!! "<< endl;
serial.close();
}
Mein Arduino-code
int led = 13;
void setup()
{
pinMode(led, OUTPUT);
}
void loop()
{
if (Serial.read() == 'R') //blink on 5sec
{
digitalWrite(led, HIGH);
delay(5000);
digitalWrite(led, LOW);
}
else //Blink on and off 1 sec,1sec
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
}
Qt-Ausgabe sagt:
Manufacturer: "Arduino (www.arduino.cc)"
Busy: false
Ready...
ok
value sent!!!
Jede Hilfe zu schätzen wissen
Hier ist der vollständige code:
Qt:
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QString>
QT_USE_NAMESPACE
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSerialPortInfo info("usbmodem621");
//Check info of the port
qDebug() << "Name : " << info.portName();
qDebug() << "Manufacturer: " << info.manufacturer(); //if showing manufacturer, means Qstring &name is good
qDebug() << "Busy: " << info.isBusy() << endl;
//Initialize Serial
QSerialPort serial;
serial.setPortName("usbmodem621");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
if (serial.isOpen() && serial.isWritable())
{
qDebug() << "Is open : " << serial.isOpen() << endl;
qDebug() << "Is writable : " << serial.isWritable() << endl;
QString string("R\n");
QByteArray ba("R\n");
serial.write(ba);
if (serial.bytesToWrite() > 0)
{
serial.flush();
if(serial.waitForBytesWritten(1000))
{
qDebug() << "data has been send" << endl;
}
}
if(serial.flush())
{
qDebug() << "ok" << endl;
}
qDebug() <<"value sent!!! "<< endl;
serial.close();
}
else
{
qDebug() << "An error occured" << endl;
}
return 0;
}
Arduino:
int led = 13;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
digitalWrite(led, HIGH);
delay(5000);
if(Serial.read() == 'R')
{
digitalWrite(led, LOW);
delay(1000);
}
}
else
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
}
Also, was genau passiert, auf der Empfängerseite, was bekommen Sie von der Lektüre? Auch, wie Sie warten, für die Lesen? Dies ist nicht der vollständige code.
Naja, Arduino led ' s blinken 1 sec (er ist in der 2. Bedingung), aber nie geht in die 1. ein. Ich warte auf das Lesen nur mit
Ist dies ein guter Weg, um auf ein signal warten? Ich möchte nur, um ein signal zu senden, nicht gerade ein char
Naja, Arduino led ' s blinken 1 sec (er ist in der 2. Bedingung), aber nie geht in die 1. ein. Ich warte auf das Lesen nur mit
if(serial.Read())
Zustand... wer ist in einer Schleife...Ist dies ein guter Weg, um auf ein signal warten? Ich möchte nur, um ein signal zu senden, nicht gerade ein char
InformationsquelleAutor gr3g | 2014-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem wurde gelöst:
Qt:
Arduino:
N. B.: vergessen Sie nicht, setzen der baudrate im Arduino IDE richtig;
In monitor, 9600 baudrate
InformationsquelleAutor gr3g