Serial ардуино питон

Balterr

✩✩✩✩✩✩✩
17 Июл 2022
8
0
Доброго времени суток все делал по этому уроку,
но проблема в том что при первом запуске ардуино пока не открою чтение ком порта в ардуино иде, оно не работает в приложении, кто знает как можно решить чтобы при сухом старте сразу работало в приложении без танца с бубном?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Если приложение написано так же как вопрос, то возможно и нельзя!

Как делал я (не на питоне, но на нем так же можно)
Ардуино подключена к пк
Запускаю приложение
Нажимаю кнопку соединиться с ардуино. Для этого:
Проверяю все доступные com порты кроме 1-го.
Отсылаю код в порт, если получаю достойный отве - то это моё. Соединяюсь.

Тут есть тонкость - при подключении к ардуино по ком порту она перегрузится. Вот такая фича.

Но попробуйте объяснить что надо получить более внятно и подробно.
 

Balterr

✩✩✩✩✩✩✩
17 Июл 2022
8
0
@Старик Похабыч, смотри я получаю условно данные с потенциометра, но при первом запуске, так сказать при сухом старте ардуинки, оно ничего не отправляет на приложение(после подключения к компорту понятное дело), пока я не открою чтения ком порта в ардуино иде, получу от туда пару значений, потом включаю приложение подключаю и вуаля, все получает, пробовал сделать чтобы отправляло команду и после нее отправляло рандомные данные, все равно не работает, хз крч почему так и как решить, ломал мозги долго но так и не понял
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Если это виндовс, то посмотри в диспетчере устройств появляется ли com порт при подключении ардуины к пк , именно при "сухом" старте.
 

Balterr

✩✩✩✩✩✩✩
17 Июл 2022
8
0
@Старик Похабыч,Да появляется но пока не открою мониторинг порта чтобы отправило первоначальные данные, в приложении ничего нету(, может есть какая то команда в QT нифига не пойму крч
 

Balterr

✩✩✩✩✩✩✩
17 Июл 2022
8
0
Оформи код соответствующим тэгом
@Старик Похабыч,
Python:
def onRead():

    if not serial.canReadLine(): return     # выходим если нечего читать

    rx = serial.readLine()

    rxs = str(rx, 'utf-8').strip()

    data = rxs.split(',')

    if data[0] == '0':

        ui.lcdN.display(data[1])

        ui.tempB.setValue(int(float(data[3]) * 10))

        ui.tempL.setText(data[3])

        global listX

        global listY

        listY = listY[1:]

        listY.append(int(data[2]))

        ui.graph.clear()

        ui.graph.plot(listX, listY)



    if data[0] == '1':

        if data[1] == '0':

            ui.circle.setChecked(True)

        else:

            ui.circle.setChecked(False)



    if data[0] == '2':

        global posX

        global posY

        posX += int((int(data[1]) - 512) / 100)

        posY += int((int(data[2]) - 512) / 100)

        ui.circle.setGeometry(posX, posY, 20, 20)





def onOpen():

    serial.setPortName(ui.comL.currentText())

    serial.open(QIODevice.ReadWrite)

https://github.com/AlexGyver/tutorials/tree/master/pythonSerial/from video, все как в видосе, здесь вдруг что обе части и питон и ардуино
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Ну так по логике ничего не мешает работать.
А ничего другого не перехватывает порт ? Открытые порты в ардуино иде ? cura ?
 

Balterr

✩✩✩✩✩✩✩
17 Июл 2022
8
0
Ну так по логике ничего не мешает работать.
А ничего другого не перехватывает порт ? Открытые порты в ардуино иде ? cura ?
Не, куры нету, да и порты закрыты в иде, крч дикуха какая то я понял хд на втором компе так же
 

poty

★★★★★★✩
19 Фев 2020
3,238
943
А что возвращает serial.open? И почему нигде не устанавливаются параметры передачи?
 

Balterr

✩✩✩✩✩✩✩
17 Июл 2022
8
0
Оформи код соответствующим тэгом
@poty, то я танци с бубном делал в сериал опен хд если ты о первой строке там а сериал сенд
C++:
def serialSend(data):

    txs = ""

    for val in data:

        txs += str(val)

        txs += ','

    txs = txs[:-1]

    txs += ';'

    serial.write(txs.encode())
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Ну вот возьмем простой код для ардуины:
C++:
void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("Tick!");
  delay(1000);
}
Надо помнить, что ардуина будет слать это делоа сразу как только подключиться к пк. НО! Ком порт появиться в пк только когда к нему подключиться ардуина.
Вот этот код на питоне будет ждать пока не появиться ком порт с №11 и уже потом читать из него данные.
Python:
import serial
f=False
port =0
while not f:
    try:
        port= serial.Serial("com11", baudrate=115200, timeout=1.0)
        f=True
    except:
        f=False

while True:   
    rcv = port.read(1)
    if (len(rcv)!=0):
        print(rcv)
И тут уже пофиг в каком порядке что включать
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
ком порт - это аппаратное устройство, его открывает ардуина. Если он появляется в устройствах, то со стороны ардуино проблем видимо нет.
 

Balterr

✩✩✩✩✩✩✩
17 Июл 2022
8
0
@Старик Похабыч,понял принял буду искать траблы, мож в этой строке кто его знает с qt не работал да и питоном тож
C++:
 if not serial.canReadLine(): return     # выходим если нечего читать
, крч спасибо за наводку буду искать проблему в питоне тогда