Я делаю проект, в котором я собираюсь отправить некоторые отформатированные строки (как показано ниже) из 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")
Кто-нибудь может подсказать, что здесь происходит, и пролить свет на то, как это сделать правильно?
Любая помощь приветствуется.
Лучший
Датт:)