roboforum.ru

Технический форум по робототехнике.

Mega 2560: Serial не работает без serial monitor

Mega 2560: Serial не работает без serial monitor

Marvin » 24 окт 2011, 02:17

Пытаюсь добиться ответа от Arduino, при пинке из Python:

Код: Выделить всёРазвернуть
import re, serial, os

port = 'ttyACM0'

if os.path.exists('/dev/'+port) == 1:
   ser = serial.Serial('/dev/'+port, 9600)
   ser.write("t")
   print ser.readline().strip()
   ser.close()
else:
   print "failed"


Код: Выделить всёРазвернуть
int incomingByte = 0;   // for incoming serial data

void setup() {
  Serial.begin(9600);   // opens serial port, sets data rate to 9600 bps
}

void loop() {
   // send data only when you receive data:
   if (Serial.available() > 0) {
      // read the incoming byte:
      incomingByte = Serial.read();
      Serial.println("test_striing");
                digitalWrite(13, HIGH);   // set the LED on
                delay(1000);              // wait for a second
                digitalWrite(13, LOW);    // set the LED off
                delay(1000);              // wait for a second
   }
}


Запускаю: python serial_test.py: два раза мигает 13-й светодиод и скрипт залипает, жму Ctrl+C:
^CTraceback (most recent call last):
File "serial_test.py", line 8, in <module>
print ser.readline().strip()
File "/usr/local/lib/python2.7/site-packages/serial/serialposix.py", line 442, in read
ready,_,_ = select.select([self.fd],[],[], self._timeout)
KeyboardInterrupt


Запускаю serial monitor:
$ python serial_test.py
est_striing
$ python serial_test.py
t_striing
$ python serial_test.py
test_striing
$ python serial_test.py
test_striing
$ python serial_test.py
tet_striing


При этом в терминале:
ttess


Получается, что без запущенного монитора обратно данные не передаются, а при запушеном частично перехватываются монитором.

Если закомментировать строку
Код: Выделить всёРазвернуть
#print ser.readline().strip()
скрипт благополучно завершается.

Тестирую на пустой плате.

Ubuntu 11.04, Python 2.7.2


Rambler\'s Top100 Mail.ru counter