Questão:
Não é possível enviar vários comandos para EV3 usando Python
Parzival
2014-06-21 22:32:01 UTC
view on stackexchange narkive permalink

Quero usar Python para enviar comandos para um bloco EV3. Em C ++ as coisas funcionam conforme o esperado - por exemplo, isso inicia o motor na porta A e, em seguida, para depois de um tempo:

  #include <unistd.h> # include <fcntl.h>int main () {/ / comando para iniciar o motor na porta A na velocidade 20 char start_motor [] = "\ x0C \ x00 \ x00 \ x00 \ x80 \ x00 \ x00 \ xA4 \ x00 \ x01 \ x14 \ xA6 \ x00 \ x01"; // comando para parar o motor na porta A char stop_motor [] = "\ x09 \ x00 \ x01 \ x00 \ x80 \ x00 \ x00 \ xA3 \ x00 \ x01 \ x00"; // envia comandos para EV3 via bluetooth int bt = open ("/ dev / tty.EV3-SerialPort", O_RDWR); escrever (bt, start_motor, 14); usleep (500000); escrever (bt, stop_motor, 11); close (bt);}  

Quando tento a mesma coisa em Python, entretanto, apenas o primeiro comando é executado (o motor dá partida, mas não para):

  import time # command para iniciar o motor na porta A na velocidade 20start_motor = '\ x0C \ x00 \ x00 \ x00 \ x80 \ x00 \ x00 \ xA4 \ x00 \ x01 \ x14 \ xA6 \ x00 \ x01' + '\ n' # comando para parar o motor na porta Astop_motor = '\ x09 \ x00 \ x01 \ x00 \ x80 \ x00 \ x00 \ xA3 \ x00 \ x01 \ x00' + '\ n' # enviar comandos para EV3 via bluetoothwith open ('dev / tty.EV3-SerialPort', mode = 'w') como bt: bt.write (start_motor) time.sleep (5) bt.write (stop_motor)  

Eu também tentei: suprimir o \ n ; usando os.open ('dev / tty.EV3-SerialPort', os.O_RDWR) ; usando bt.flush () ; usando os.fsync (bt) ; usando bt = open (... (em vez de com) ; e alterando o modo e os argumentos de buffer do método aberto. Nada funcionou.

Bem, funcionaria se eu feche o tty e abra-o novamente, mas isso parece ineficiente:

  # ... with open ('dev / tty.EV3-SerialPort', mode = 'w') as bt: bt .write (start_motor) time.sleep (5) com open ('dev / tty.EV3-SerialPort', mode = 'w') como bt: bt.write (stop_motor)  

Então, o que estou perdendo aqui?

(OS X 10.9.3, Python 2.7.6, EV3 [31313])

Um responda:
David Lechner
2014-06-22 00:18:04 UTC
view on stackexchange narkive permalink

Funciona para mim se você definir o buffer para 0 e se livrar das novas linhas.

  import time # comando para ligar o motor na porta A na velocidade 20start_motor = '\ x0C \ x00 \ x00 \ x00 \ x80 \ x00 \ x00 \ xA4 \ x00 \ x01 \ x14 \ xA6 \ x00 \ x01 '# comando para parar o motor na porta Astop_motor =' \ x09 \ x00 \ x01 \ x00 \ x80 \ x00 \ x00 \ xA3 \ x00 \ x01 \ x00 '# envia comandos para EV3 via bluetoothwith open (' / dev / tty.EV3-SerialPort ',' w ', 0) como bt: bt.write (start_motor) time.sleep (5) bt.write (stop_motor)  
Funcionou! Eu poderia jurar que tentei buffer = 0, mas claramente estava errado.


Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...