Python Arduino使用最后一个串行命令输入,直到收到下一个串行命令输入
我已经建立了一个Python Arduino系统,通过串行通信。Python脚本每2秒向Arduino发送一条指令(作为字符串)。python在发送下一个命令之前有第二个延迟。问题是Arduino在这1秒延迟中停止工作,因为它不记得最后一个给定的命令。我想存储最后收到的字符串并使用它,直到另一个字符串出现 谢谢大家!Python Arduino使用最后一个串行命令输入,直到收到下一个串行命令输入,python,user-interface,input,arduino,Python,User Interface,Input,Arduino,我已经建立了一个Python Arduino系统,通过串行通信。Python脚本每2秒向Arduino发送一条指令(作为字符串)。python在发送下一个命令之前有第二个延迟。问题是Arduino在这1秒延迟中停止工作,因为它不记得最后一个给定的命令。我想存储最后收到的字符串并使用它,直到另一个字符串出现 谢谢大家! char datafromUser=0; int VCC_控制=2; int pompa_bacuri=30; int stop_pompa_bacuri=31; int pom
char datafromUser=0;
int VCC_控制=2;
int pompa_bacuri=30;
int stop_pompa_bacuri=31;
int pompa_avans=32;
int stop_pompa_avans=33;
int pompa_unghi=32;
int stop_pompa_unghi=33;
无效设置(){
//将安装代码放在此处,以便运行一次,
pinMode(VCC_控制,输出);
序列号开始(115200);
pinMode(蓬帕·巴库里,输出);
pinMode(停止pompa_bacuri,输出);
pinMode(pompa_avans,输出);
pinMode(停止pompa_avans,输出);
pinMode(蓬帕乌昂吉,输出);
pinMode(停止、输出);
digitalWrite(pompa_bacuri,高中);
digitalWrite(pompa_avans,高中);
数字写入(stop_pompa_bacuri,高);
digitalWrite(stop_pompa_avans,高);
pinMode(蓬帕昂吉,高);
pinMode(停止pompa_unghi,高);
}
void循环(){
如果(Serial.available()>0)
{
datafromUser=Serial.read();
Serial.println((char)datafromUser);
}
String sync=Serial.readString();
while(Serial.available())
{
sync+=Serial.read();
}
//打印调试
//分裂
char cut=sync.substring(0,1)[0];
char presa_R1=同步子串(1,2)[0];
char presa_R2=sync.substring(2,3)[0];
char bacuri_R1=sync.substring(3,4)[0];
char bacuri_R2=sync.substring(4,5)[0];
char unghi_R1=同步子串(5,6)[0];
char unghi_R2=同步子串(6,7)[0];
char viteza=sync.substring(7)[0];
//打印调试
连载打印(“Presa_releu_avans:”);
序列号println(presa_R1);
串行打印(“Presa_releu_retragere:”);
序列号println(presa_R2);
连载打印(“Bacuri_releu_avans:”);
序列号println(bacuri_R1);
串行打印(“Bacuri_releu_retragere:”);
序列号println(bacuri_R2);
连载打印(“Bacuri_releu_avans:”);
序列号println(unghi_R1);
串行打印(“Bacuri_releu_retragere:”);
序列号println(unghi_R2);
连载印刷品(“Viteza_de_avans_presa:”);
连载println(viteza);
/////////////#控制释放压力#/////////////
//皮斯托阿内尔酒店
如果(presa_R1=='0'){
连载:println(“蓬巴巴库里色情”);
digitalWrite(stop_pompa_avans,高);
延误(5);
digitalWrite(pompa_avans,低位);
}
如果(presa_R1=='1'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_bacuri,低位);
延误(5);
digitalWrite(pompa_bacuri,高中);
}
如果(presa_R2=='0'){
连载:println(“蓬巴巴库里色情”);
digitalWrite(stop_pompa_avans,高);
延误(5);
digitalWrite(pompa_avans,低位);
}
如果(presa_R2=='1'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_bacuri,低位);
延误(5);
digitalWrite(pompa_bacuri,高中);
}
/////////////#控制释放压力#/////////////
/////////////#控制释放压力#/////////////
//皮斯托阿内尔酒店
如果(bacuri_R1=='0'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_bacuri,高);
延误(5);
digitalWrite(pompa_bacuri,低位);
}
如果(bacuri_R1=='1'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_bacuri,低位);
延误(5);
digitalWrite(pompa_bacuri,高中);
}
如果(bacuri_R2=='0'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_bacuri,高);
延误(5);
digitalWrite(pompa_bacuri,低位);
}
如果(bacuri_R2=='1'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_bacuri,低位);
延误(5);
digitalWrite(pompa_bacuri,高中);
}
/////////////#控制释放压力#/////////////
/////////////#控制释放压力#/////////////
//皮斯托阿内尔酒店
如果(unghi_R1=='0'){
连载:println(“蓬巴巴库里色情”);
数字写入(停止pompa_unghi,高);
延误(5);
digitalWrite(pompa_unghi,低位);
}
如果(unghi_R1=='1'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_unghi,低位);
延误(5);
digitalWrite(pompa_unghi,高中);
}
如果(unghi_R2=='0'){
连载:println(“蓬巴巴库里色情”);
数字写入(停止pompa_unghi,高);
延误(5);
digitalWrite(pompa_unghi,低位);
}
如果(unghi_R2=='1'){
连载:println(“蓬巴巴库里色情”);
数字写入(stop_pompa_unghi,低位);
延误(5);
digitalWrite(pompa_unghi,高中);
}
/////////////#控制释放压力#/////////////
如果(viteza=='a'){
对于(int i=0;i
String sync=Serial.readString();
谢谢您的回答。我运行了代码,但它告诉我sync未在此范围内声明。如果我运行If函数中的所有代码,以便同步运行没有问题,则void one()和void two()在设置函数上方声明字符串Sync;,然后在If Serial.Available()条件下使用Sync=Serial.ReadString();
char datafromUser=0;
int VCC_Control = 2;
int pompa_bacuri = 30;
int stop_pompa_bacuri = 31;
int pompa_avans = 32;
int stop_pompa_avans = 33;
int pompa_unghi = 32;
int stop_pompa_unghi = 33;
void setup() {
// put your setup code here, to run once,
pinMode( VCC_Control , OUTPUT );
Serial.begin(115200);
pinMode(pompa_bacuri, OUTPUT);
pinMode(stop_pompa_bacuri, OUTPUT);
pinMode(pompa_avans, OUTPUT);
pinMode(stop_pompa_avans, OUTPUT);
pinMode(pompa_unghi, OUTPUT);
pinMode(stop_pompa_unghi, OUTPUT);
digitalWrite(pompa_bacuri, HIGH);
digitalWrite(pompa_avans, HIGH);
digitalWrite(stop_pompa_bacuri, HIGH);
digitalWrite(stop_pompa_avans, HIGH);
pinMode(pompa_unghi, HIGH);
pinMode(stop_pompa_unghi, HIGH);
}
void loop() {
if(Serial.available() > 0)
{
datafromUser=Serial.read();
Serial.println((char) datafromUser);
}
String sync = Serial.readString();
while (Serial.available())
{
sync += Serial.read();
}
// Print debug
// Split
char cut = sync.substring(0, 1)[0];
char presa_R1= sync.substring(1, 2)[0];
char presa_R2 = sync.substring(2, 3)[0];
char bacuri_R1 = sync.substring(3, 4)[0];
char bacuri_R2 = sync.substring(4, 5)[0];
char unghi_R1 = sync.substring(5, 6)[0];
char unghi_R2 = sync.substring(6, 7)[0];
char viteza = sync.substring(7)[0];
// Print debug
Serial.print("Presa_releu_avans: ");
Serial.println(presa_R1);
Serial.print("Presa_releu_retragere: ");
Serial.println(presa_R2);
Serial.print("Bacuri_releu_avans: ");
Serial.println(bacuri_R1);
Serial.print("Bacuri_releu_retragere: ");
Serial.println(bacuri_R2);
Serial.print("Bacuri_releu_avans: ");
Serial.println(unghi_R1);
Serial.print("Bacuri_releu_retragere: ");
Serial.println(unghi_R2);
Serial.print("Viteza_de_avans_presa: ");
Serial.println(viteza);
/////////////# CONTROL RELEE PRESA #/////////////
//de vazut live cum se duc pistoanele
if(presa_R1 == '0') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_avans, HIGH);
delay(5);
digitalWrite(pompa_avans, LOW);
}
if(presa_R1 == '1') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_bacuri, LOW);
delay(5);
digitalWrite(pompa_bacuri, HIGH);
}
if(presa_R2 == '0') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_avans, HIGH);
delay(5);
digitalWrite(pompa_avans, LOW);
}
if(presa_R2 == '1') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_bacuri, LOW);
delay(5);
digitalWrite(pompa_bacuri, HIGH);
}
/////////////# CONTROL RELEE PRESA #/////////////
/////////////# CONTROL RELEE PRESA #/////////////
//de vazut live cum se duc pistoanele
if(bacuri_R1 == '0') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_bacuri, HIGH);
delay(5);
digitalWrite(pompa_bacuri, LOW);
}
if(bacuri_R1 == '1') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_bacuri, LOW);
delay(5);
digitalWrite(pompa_bacuri, HIGH);
}
if(bacuri_R2 == '0') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_bacuri, HIGH);
delay(5);
digitalWrite(pompa_bacuri, LOW);
}
if(bacuri_R2 == '1') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_bacuri, LOW);
delay(5);
digitalWrite(pompa_bacuri, HIGH);
}
/////////////# CONTROL RELEE PRESA #/////////////
/////////////# CONTROL RELEE PRESA #/////////////
//de vazut live cum se duc pistoanele
if(unghi_R1 == '0') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_unghi, HIGH);
delay(5);
digitalWrite(pompa_unghi, LOW);
}
if(unghi_R1 == '1') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_unghi, LOW);
delay(5);
digitalWrite(pompa_unghi, HIGH);
}
if(unghi_R2 == '0') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_unghi, HIGH);
delay(5);
digitalWrite(pompa_unghi, LOW);
}
if(unghi_R2 == '1') {
Serial.println("POMPA BACURI PORNITA");
digitalWrite(stop_pompa_unghi, LOW);
delay(5);
digitalWrite(pompa_unghi, HIGH);
}
/////////////# CONTROL RELEE PRESA #/////////////
if(viteza == 'a'){
for (int i = 0; i<200000; i++){
one();
}
}
if(viteza == 'b'){
for (int i = 0; i<200000; i++){
two();
}
}
}
void one() {
digitalWrite(VCC_Control, HIGH);
delay(200);
digitalWrite(VCC_Control, LOW);
delay(800);
Serial.write((char) datafromUser);
}
void two() {
digitalWrite(VCC_Control, HIGH);
delay(800);
digitalWrite(VCC_Control, LOW);
delay(200);
Serial.write((char) datafromUser);
}