PySerial не работает в скрипте

У меня проблема с этим скриптом:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import serial
import time

ser = serial.Serial("COM3", 9600, timeout=1)
ser.write("test")
print "Test started\n"
time.sleep(1)
ans = ser.read(4)
print ans

В Arduino есть эхо-программа (все, что было отправлено в Arduino, было отправлено обратно в компьютер). С последовательным монитором все работает нормально.

Когда я запускаю свой скрипт на Python, он останавливается на ser.read() (он ожидает входящих данных). Но когда команды из моего скрипта я писал прямо в консоль python, все работает без проблем.

Почему мой код, начатый из файла, не работал?

Моя ОС: Windows 8.1 (64-разрядная версия) Версия Python: 2.7.9 (64-разрядная версия)


person bigben    schedule 28.03.2015    source источник
comment
Вы не забыли закодировать write в своем коде Arduino? Можете ли вы опубликовать свой код Arduino здесь?   -  person Mauro Baraldi    schedule 28.03.2015
comment
Ваша Arduino ищет новую строку в конце записи? Например. ser.write("test\n").   -  person all or None    schedule 28.03.2015
comment
@MauroBaraldi Вот мой код Arduino. ‹code› void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) Serial.write(Serial.read()); } ‹/код›   -  person bigben    schedule 28.03.2015
comment
@фиг Это не имеет значения. Arduino должен реагировать на каждый символ.   -  person bigben    schedule 28.03.2015
comment
@bigben в качестве отладки вы можете мигать светодиодом каждый раз, когда получаете данные в Arduino. Возможно, вы указываете неправильный порт   -  person Mauro Baraldi    schedule 28.03.2015
comment
@MauroBaraldi Мой новый код: void setup() { Serial.begin(9600); pinMode(13, ВЫХОД); цифровая запись (13, ВЫСОКИЙ); } void loop() { if (Serial.available()) { digitalWrite(13, LOW); Serial.write(Serial.read()); } } Светодиод загорается до получения данных. Когда что-то было отправлено на Arduino, диод выключается. Когда я запускаю скрипт из файла, диод на короткое время выключается, но когда скрипт ждет данных от Arduino диод включается. Извините за мало новых комментариев, но опция редактирования отключена здесь через 5 минут.   -  person bigben    schedule 28.03.2015


Ответы (1)


Попробуйте так

import serial
import time

ser = serial.Serial("COM3", 9600, timeout=1)
ser.write("test")
print "Test started - data sent \n"
while True:
    ans = ser.read(4)
    if and:
        print and
    time.sleep(1)
person Mauro Baraldi    schedule 28.03.2015
comment
вставьте оператор отладки pdb сразу после while и попытайтесь исследовать. - person Mauro Baraldi; 28.03.2015
comment
Спасибо за помощь, но у меня есть решение здесь ссылка . Трюк с setDTR работает в моем случае. - person bigben; 03.04.2015