시리얼 포트를 통해 라즈베리 파이 (QT C++)에서 Arduino (Arduino IDE C++)로 통신하는 데 일주일 이상 노력했지만 실패.라즈베리 파이 (QT C++)와 Arduino (Arduino IDE) 간의 통신
Google에서 검색을 한 결과 예제를 읽었지만 여전히 성공하지 못했습니다. 좋아, 근본적인 점은 시리얼 포트가 라즈베리 파이부터 Arduino로 계속해서 명령을 보내야한다는 것입니다. 가능한 한 간단하게 코드를 유지하려고했습니다.
처음에는 나무 딸기 파이 (QT C++)에서 Arduino (Arduino IDE C++)로 "J"문자를 보내고 J를 기다리면서 Arduino에서 LED를 깜박입니다. 하지만 작동하지 않습니다. 심지어 & & Arduino (Arduino IDE C++)에 데이터를 전송하는 라즈베리 파이 (QT C++) 통신 인터페이스에 대한 샘플을 얻지 못했습니다. 나는 그 문제가 정확히 무엇인지 모른다. 친절하게 문제 해결을 도와주세요. 모니터에서
, 나는 양쪽에 시도 어떤 프로그램을 첨부
9600 전송 속도.
MAIN.CPP
#include <iostream>
#include <QIODevice>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QString>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
QSerialPort serialPort;
serialPort.setBaudRate(QSerialPort::Baud9600);
QSerialPortInfo info("ttyUSB0");
qDebug() << "Name : " << info.portName();
qDebug() << "Description : " << info.description();
qDebug() << "Busy:" << info.isBusy();
QSerialPort serial;
serial.setPortName("ttyUSB0");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
serial.open(QSerialPort::ReadWrite);
cout<<"Readable :"<<serial.isReadable()<<endl;
cout<<"Writable :"<<serial.isWritable()<<endl<<endl;
if (serial.isOpen() && serial.isWritable())
{
qDebug() << "Is open : " << serial.isOpen() << endl;
qDebug() << "Is writable : " << serial.isWritable() << endl;
qDebug() << "Ready..." << endl;
serial.write("J");
QByteArray ba("J\n");
serial.write(ba);
{
QByteArray ba("J");
serial.write(ba);
serial.flush();
qDebug() << "data has been send" << endl;
serial.close();
}
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 a.exec();
}
의 Arduino 번호 :
가 출력 표시int led = 13, avlb = 0;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
Serial.println("started");
}
void loop()
{
if (Serial.available() > 0)
{
Serial.println("available");
Serial.println(Serial.available());
delay(2000);
digitalWrite(led, HIGH);
delay(5000);
if(Serial.read() == 'J')
{
Serial.println("read");
Serial.println(Serial.read());
delay(2000);
digitalWrite(led, LOW);
delay(1000);
}
}
else
{
Serial.println("not available");
delay(1000);
}
}
:
는 라즈베리 QT 제작자 IDE의 O/P :
Name : "ttyUSB0"
Description : "FT232R USB UART"
Busy: false
Readable :1
Writable :1
Is open : true
Is writable : true
Ready...
data has been send
bool QSerialPort::flush(): device not open
value sent
의 Arduino 이데 출력 표시 :
started
not available
not available
not available
not available
not available
not available
not available
not available
not available