Как убрать ожидание ответа от устройства?

Konstantin

Новичок
Пользователь
Апр 14, 2020
3
2
1
Здравствуйте!

Есть программа получения данных с джойстика.
Все работает, но мне необходимо встроить программу в мою и что бы, если нет данных с джойстика, цикл продолжался, а он останавливается и ожидает данных от джойстика.

Подскажите пожалуйста как это устранить?
в этой строке все останавливается до получения данных-
evbuf = jsdev.read(8)

Программу прилагаю.

Спасибо!
 

Вложения

  • controller2.txt
    3,7 КБ · Просмотры: 5
  • Мне нравится
Реакции: Student

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Можно попробовать в цикле прописать else и там выполнять действия когда нет данных:
Python:
while True:
    evbuf = jsdev.read(8)
    if evbuf:
        ...
    else:
        print('Данных от джойстика нет')
 
  • Мне нравится
Реакции: Student

Konstantin

Новичок
Пользователь
Апр 14, 2020
3
2
1
Спасибо за ответ, stud_55

Я вставил такой код, больше в цикле ничего нет -

Python:
while True:

    evbuf = jsdev.read(8)

    if evbuf:

        print('Данных от джойстика есть')

    else:

        print('Данных от джойстика нет')

Выдает - Данных от джойстика есть

Я вставил такой код в цикл - больше нет ничего там -

Python:
 while True:   

        print('---')   

        evbuf = jsdev.read(8)   

        print(evbuf)

Выводит программа следующий текст и только , когда я нажимаю кнопки на джойстике -

b'\xa8K\r\x00\x01\x80\x02\x03'

b'\xe8K\r\x00Y\x9e\x02\x03'

b'\xf0K\r\x00\x9b\xe5\x02\x03'

b'\xf8K\r\x00\x00\x00\x02\x03'

b'\xb8L\r\x00\x9e\xc4\x02\x03'

b'\xc0L\r\x00G\x85\x02\x03'

b'\xc8L\r\x00\x01\x80\x02\x03'

b'(M\r\x007\xcb\x02\x03'

b'0M\r\x00\x00\x00\x02\x03'
 
  • Мне нравится
Реакции: Student

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Выводит программа следующий текст и только , когда я нажимаю кнопки на джойстике -
Правильно - программа читает действия от джойстика, когда их нет - ждет. Else должен выполниться когда данные от джойстика закончатся (
jsdev.read(8) вернет пустую строку, evbuf станет False). В этой ветке else сможете выполнить действия которые вам нужны (запустить функцию или еще что).
Или можно просто без else записать в цикл нужный код:

Python:
while True:

    evbuf = jsdev.read(8)

    if evbuf:

        print('Данных от джойстика есть')

    print('Какие-то действия, которые выполняются внутри цикла')
 

Konstantin

Новичок
Пользователь
Апр 14, 2020
3
2
1
Спасибо Вам за неоценимую для меня помощь.
Я все понял, разобрался благодаря Вам. Все заработало, как я хотел.

Интересно, что оказалось, что если я запускаю по второй команде с пульта процесс, то есть я нажму на кнопку пульта, то инициализируется новая команда, хотя казалось бы по первой еще цикл не закончился. Вот это для меня странно, я правда новичек в python

Но у меня как раз такая задача и стояла )
 

Форум IT Специалистов