Термопринтер pySerial + Arduino +: проблема с отправкой / печатью строки из python - PullRequest
0 голосов
/ 09 марта 2019

Я делаю проект, в котором я собираюсь отправить некоторые отформатированные строки (как показано ниже) из python3:

Helen|8|You are influenced by Saturn.|9|You are a successful business man.;

Специальные символы являются разделителями для Arduino, чтобы анализировать строку и печатать их по-разному в соответствии с моим требованием.

Это парсер на стороне Arduino:

парсер [Arduino]

void printFormattedData(String data) {
  int firstDelimatorIndex = data.indexOf('|');
  int secondDelimatorIndex = data.indexOf('|', firstDelimatorIndex + 1);
  int thirdDelimatorIndex = data.indexOf('|', secondDelimatorIndex + 1);
  int fourthDelimatorIndex = data.indexOf('|', thirdDelimatorIndex + 1);
  int firstColonIndex = data.indexOf(';');

  String firstName = data.substring(0, firstDelimatorIndex);
  //  Soul Urge / Heart Desire
  String soulUrgeNumber = data.substring(firstDelimatorIndex + 1, secondDelimatorIndex);
  String heartDesire = data.substring(secondDelimatorIndex + 1, thirdDelimatorIndex);
  // personality / inner dream
  String personalityNumber = data.substring(thirdDelimatorIndex + 1, fourthDelimatorIndex);
  String innerDreams = data.substring(fourthDelimatorIndex + 1, firstColonIndex);

  printer.setSize('L');
  printer.boldOn();
  printer.inverseOn();
  printer.println(firstName);
  printer.inverseOff();
  printer.boldOff();

  delay(1000);

  printer.setSize('M');
  printer.print("SOUL URGE NO.:");
  printer.print(soulUrgeNumber);
  printer.println(" ");
  printer.println("HEART DESIRE:");
  delay(1000);
  printer.setSize('S');
  printer.println(heartDesire);

  printer.feed(1);

  printer.setSize('M');
  printer.print("PERSONALITY NO.:");
  printer.print(personalityNumber);
  printer.println(" ");
  printer.println("INNER DREAMS:");
  delay(1000);
  printer.setSize('S');
  printer.println(innerDreams);
  printer.println("--------------------------------");
  //
  printer.feed(4);
  printer.setDefault();

  delay(1000);
  // Serial.write("next");
}

А в цикле Arduino я:

петля [Arduino]

String content = "";
String oldContent = "";
char character;

void loop() {
  while (Serial.available()) {
    character =  Serial.read();
    content.concat(character);
  }
  // -------------------------------

  if (content != oldContent) {
    if (content.length() > 0 && content.charAt(content.length() - 1) == ';') {
      // Serial.println(content);
      printFormattedData(content); // this is the parser 
      content = "";
    }
    oldContent = content;
  }
}

Если я просто открою последовательный порт и вставлю строку:

Helen|8|You are influenced by Saturn.|9|You are a successful business man.;

Печатается правильно

Но если я отправлю его с python, он пропускает данные и печатает не полностью и странно, а иногда даже не печатает.

Вот код Python:

серийный отправитель [python]

import serial
import time
try:
    ser = serial.Serial(
        port='/dev/tty.usbserial-AI05HDSG',
        baudrate=9600,
        parity=serial.PARITY_NONE,
        stopbits=serial.STOPBITS_ONE,
        bytesize=serial.EIGHTBITS,
        timeout=10
    )
    # print ("Serial opened")
    ser.write('Helen|8|You are influenced by Saturn.|9|You are a successful business man.;'.encode('utf-8'))
    time.sleep(6)
    # print(">>data sent")
except e:
    print(e)
    pass
finally:
    ser.close()
    pass

# print("Serial closed")

Кто-нибудь может подсказать, что здесь происходит, и пролить свет на то, как это сделать правильно? Любая помощь приветствуется.

Лучший Датт:)

...