Доброго времени суток Всем.
Захотел создать приложение по управлению Цветомузыкой на ПК. Использую уроки от @AlexGyver по парсингу, работе с Python и QT Designer. За основу взял переделанный проект: Цветомузыка на Arduino. FireEdition.
Во общем проблема: при отправке данных с ПК на Arduino Nano, пакеты пропускаются (доходят не с первого раза, или не доходят совсем).
Конкретно в этом случае: с ПК отправляю изменения BRIGHTNESS (которая пропускается) и в окне на ПК вижу результат своего действия отправленный с Arduino.
Предполагаю что скорости обработки не хватает у Arduino. Может есть варианты справиться с этой проблемой?
Использую библиотеки:
Parser.h
AsyncStream.h
Захотел создать приложение по управлению Цветомузыкой на ПК. Использую уроки от @AlexGyver по парсингу, работе с Python и QT Designer. За основу взял переделанный проект: Цветомузыка на Arduino. FireEdition.
Во общем проблема: при отправке данных с ПК на Arduino Nano, пакеты пропускаются (доходят не с первого раза, или не доходят совсем).
Конкретно в этом случае: с ПК отправляю изменения BRIGHTNESS (которая пропускается) и в окне на ПК вижу результат своего действия отправленный с Arduino.
C++:
// с ардуино в SerialPort, терминатаор \n
// с пк в SerialPort, терминатаор ;
#if PARSER
void parser() {
if (serial.available()) {
noInterrupts();
Parser data(serial.buf, ','); // отдаём парсеру
int ints[10]; // массив для численных данных
data.parseInts(ints); // парсим в него
switch (ints[0]) {
//case 0:
// break;
case 1:
BRIGHTNESS = ints[1];
break;
//case 2:
// break;
//case 3:
// break;
//case 4:
//break;
//case 5:
//break;
}
interrupts();
}
}
void SendSerial (int key, int* data, int amount) {
Serial.print(key);
Serial.print(',');
for (int i = 0; i < amount; i++) {
Serial.print(data[i]);
if (i != amount - 1) Serial.print(',');
}
Serial.print('\n');
}
#endif
void PC_Packed () {
int packet[3];
packet[0] = BRIGHTNESS;
packet[1] = mode_arr[0];
packet[2] = this_submode;
SendSerial(0, packet, 3);
}
Python:
from PyQt5 import QtWidgets, uic, QtCore
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
from PyQt5.QtCore import QIODevice
app = QtWidgets.QApplication([])
ui = uic.loadUi("LED_Control.ui")
ui.setWindowTitle("Color Music")
serial = QSerialPort()
serial.setBaudRate(115200)
portList = []
ports = QSerialPortInfo().availablePorts()
for port in ports:
portList.append(port.portName())
ui.comSP.addItems(portList)
def onRead():
if not serial.canReadLine(): return # выходим если нечего читать
rx = serial.readLine()
rxs = str(rx, 'utf-8').strip()
data = rxs.split(',')
if data[0] == '0':
ui.AcBrLb.setText(data[1])
def Con_to_Ard():
serial.setPortName(ui.comSP.currentText())
serial.open(QIODevice.ReadWrite)
def serialSend(data):
txs = ""
for val in data:
txs += str(val)
txs += ','
txs = txs[:-1]
txs += ';'
serial.write(txs.encode())
def Dis_to_Ard():
serial.close()
def Br_con():
serialSend([1, ui.spinBr.value()])
serial.readyRead.connect(onRead)
ui.ConBut.clicked.connect(Con_to_Ard)
ui.DisBut.clicked.connect(Dis_to_Ard)
ui.spinBr.textChanged.connect(Br_con)
ui.show()
app.exec()
Предполагаю что скорости обработки не хватает у Arduino. Может есть варианты справиться с этой проблемой?
Использую библиотеки:
Parser.h
AsyncStream.h
Вложения
-
53.2 KB Просмотры: 5