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 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

Schreibe einen Kommentar