Читать и отправлять несколько строк вместо одной - PullRequest
0 голосов
/ 25 октября 2019

У меня есть установка Arduino с мини-дисплеем. Он запрограммирован таким образом, что все, что я печатаю в последовательную «командную строку», будет выводиться на дисплей.

Foods.txt

First Line

Это прекрасно работает, если текстовый файл имеет только одну строку

   import serial
   import time


   f = open("Foods.txt", "r")
   lines  = f.readline()

   for line in lines:

       ser = serial.Serial('/dev/cu.SLAB_USBtoUART', 115200, timeout = 1)
       commandToSend = lines
       ser.write(str(commandToSend).encode()).     

Вывод будет таким:

    First Line

Если я добавлю строки в Foods.txt

First Line
Second Line
Third Line
Fourth Line

Я получу этот вывод (первая строка 11 раз):

First Line
First Line
First Line
First Line
First Line
First Line
First Line
First Line
First Line
First Line
First Line

Если я заменил «f.readlines ()» на строки вместо строк, чтобы читать несколько строк одну за другой, это также отчасти работает, но у меня возникла проблема, что он не будет добавлятьвозврат каретки к каждой строке (\ r), поэтому после использования скрипта ничего не происходит

   import serial
   import time


   f = open("Foods.txt", "r")
   lines  = f.readlines()

   for line in lines:

       ser = serial.Serial('/dev/cu.SLAB_USBtoUART', 115200, timeout = 1)
       commandToSend = lines
       ser.write(str(commandToSend).encode()).     

Поэтому я просматриваю устройство и нажимаю ender и получаю

    ["first Line\n", "Second Line\n". "Third Line\n","Fourth Line\n"]
    ["first Line\n", "Second Line\n". "Third Line\n","Fourth Line\n"]
    ["first Line\n", "Second Line\n". "Third Line\n","Fourth Line\n"].   
    ["first Line\n", "Second Line\n". "Third Line\n","Fourth Line\n"]

Что означает, что оноотправить их на последовательную консоль, но она не нажала «enter», чтобы отправить их, и как только я запустил первый скрипт, он нажал enter для всего этого.

Как мне добавить \ r к нему?

Если я сделаю это так:

   import serial
   import time


   f = open("Foods.txt", "r")
   lines  = f.readlines()

   for line in lines:

       ser = serial.Serial('/dev/cu.SLAB_USBtoUART', 115200, timeout = 1)
       commandToSend = lines\r
       ser.write(str(commandToSend).encode()).

Я получу

    commandToSend = lines\r
                          ^
    SyntaxError: unexpected character after line continuation character

1 Ответ

0 голосов
/ 25 октября 2019

Второй подход мне подходит, проблема в том, что вы устанавливаете commandToSend на lines, который представляет собой список всех строк, который вы хотите отправить вместо line (текущая строка всписок, по которому вы зацикливаетесь).

Таким образом, ваш код должен быть:

import serial
import time

f = open("Foods.txt", "r")
lines = f.readlines()

for line in lines:
    ser = serial.Serial('/dev/cu.SLAB_USBtoUART', 115200, timeout = 1)
    commandToSend = line
    ser.write(str(commandToSend).encode()).

Кроме того, если вы хотите добавить возврат каретки, вам придется объединить его как строку,Например:

line + '\r'

или

'%s\r' % line

или

'{}\r'.format(line)

или

f'{line}\r'

В зависимости от предпочтений / версия Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...