我正在做一个项目,打算从python3发送一些格式化的字符串(如下所示):
Helen|8|You are influenced by Saturn.|9|You are a successful business man.;
特殊字符是Arduino的分隔符,用于解析字符串并根据我的要求以不同的方式打印它们。
这是Arduino Side上的解析器:
解析器[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")
有人可以建议这里发生了什么,并阐明了如何正确进行操作吗? 任何帮助表示赞赏。
最佳 达塔:)