나는 setup()
이 반복해서 실행된다는 것을 알아 챘습니다. 나는 setup()
에서 같은 메시지를받을 여기 코드는 다음과 같습니다Arduino에 Qt UI 직렬 연결. 여러 번 호출 된 설정
enum flags{
RFID= 1,
LASER_ON= 2,
LASER_OFF= 4,
.
.
.
};
int inByte;
bool fcount = false;
unsigned int count=0;
long average_input=0;
bool cont = false;
int prev=-1;
/**
* Initialize.
*/
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
// while (!Serial);// Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
// Serial1.begin(19200);
// while (!Serial1);
// SPI.begin(); // Init SPI bus
// mfrc522.PCD_Init(); // Init MFRC522 card
pinMode(laser, OUTPUT);
pinMode(13, OUTPUT);
// Prepare the key (used both as key A and as key B)
// using FFFFFFFFFFFFh which is the default at chip delivery from the factory
// for (byte i = 0; i < 6; i++) {
// key.keyByte[i] = 0xFF;
// }
Serial.println(F("Scan a MIFARE Classic PICC to demonstrate read and write."));
Serial.print(F("Using key (for A and B):"));
// dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE);
Serial.println();
Serial.println(F("BEWARE: Data will be written to the PICC, in sector #1"));
digitalWrite(laser, HIGH);
for(byte i =0; i<10 ; i++){
average_input += analogRead(photocell);
delay(10);
}
Serial.print("total sum=\t");Serial.println(average_input);
average_input /=10;
Serial.print("average=\t");Serial.println(average_input);
digitalWrite(laser, LOW);
}
/**
* Main loop.
*/
void loop() {
if(Serial.available()){
delay(2000);
Serial.println("Serial available");
int input = 0;
while (Serial.available()){
input = input*10 + (Serial.read()-48);
inByte = input;
}
Serial.println(inByte);
}
// if(Serial1.available()){
// delay(100);
// Serial.println("Serial1 available");
// int input = 0;
// while (Serial1.available()){
// input = input*10 + (Serial1.read()-48);
// inByte = input;
// }
// Serial.println(inByte);
// }
switch(inByte){
case RFID:
Serial.println("RFID CHOSEN");
// get_rfid();
break;
case LASER_ON:
digitalWrite(laser, HIGH);
fcount=true;
break;
case LASER_OFF:
digitalWrite(laser, LOW);
fcount=false;
break;
.
.
.
}
if (fcount){
.
.
.
}
당신은 단지 한 번만 setup()
실행을 만들려고, 나는 많은 주석 볼 수 있듯이. 일반적인 목표 : QSerialPort
을 통해 내 Qt UI에 연결하려고합니다. 나는 비슷한 주제에 대해 좋은 해결책을 발견하고 그것을 채택했다. 여기에 Qt는 코드의 모든의
.
.
.
QSerialPort serial;
QStringList ports;
for (QSerialPortInfo port : QSerialPortInfo::availablePorts()){
qDebug() << port.portName() << port.vendorIdentifier() << port.productIdentifier()
<< port.hasProductIdentifier() << port.hasVendorIdentifier() << port.isBusy();
ports += port.portName();
}
serial.setPortName("cu.usbmodem1471");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
qDebug()<<serial.isOpen()<<endl;
qDebug()<<serial.isWritable()<<endl;
if (serial.isOpen() && serial.isWritable())
{
QByteArray ba("2");
serial.write(ba);
//serial.flush();
qDebug() << "data has been send" << endl;
serial.close();
}
.
.
.
첫째, isOpen()
및 시리얼 모니터가 열립니다 isWritable()
모두 false
false
을 보여줍니다. 내 추측은 Qt가 데이터를받는 PC와 동일한 시리얼에 데이터를 연결/전송하려고한다는 것입니다. 직렬 모니터가 닫히면 플래그는 true
true
으로 설정되고 메시지가 전송됩니다. 그러나 그것은 동일한 설정 과정 (일명 레이저 교정)을 거치고 레이저를 켜기위한 플래그로 2를받지 못합니다. PC와 Arduino 간의 시리얼 통신에 관한 조언을 해주십시오.