Arduino 使用串行端口将包含多个变量的字符串传递给anrduino

Arduino 使用串行端口将包含多个变量的字符串传递给anrduino,arduino,processing,Arduino,Processing,我正试图将通过处理生成的字符串传递到Arduino串行端口,但它似乎不起作用 Arduino代码: String readString; //main captured String String MotorChoice; String AngleRange; String FrequencyIN; int ind1; int ind2; int ind3; int MC; int AR; float FIN; void setup() { Serial.begin(9600);

我正试图将通过处理生成的字符串传递到Arduino串行端口,但它似乎不起作用

Arduino代码:

String readString; //main captured String
String MotorChoice;
String AngleRange; 
String FrequencyIN;

int ind1;
int ind2;
int ind3;

int MC;
int AR;
float FIN;

void setup() {
  Serial.begin(9600);
  Serial.println("Input command in the form of Motor Choice,Angle Range,Frequency*");
}

void loop() 
{
if (Serial.available())  {
    char c = Serial.read();  
    if (c == '*') {

      Serial.println();
      Serial.print("captured String is : ");
      Serial.println(readString);

      ind1 = readString.indexOf(',');  //finds location of first ,
      MotorChoice = readString.substring(0, ind1);   //captures first data String
      ind2 = readString.indexOf(',', ind1+1 );   //finds location of second ,
      AngleRange = readString.substring(ind1+1, ind2);   //captures second data String
      ind3 = readString.indexOf(',', ind2+1 );
      FrequencyIN = readString.substring(ind2+1);

  //convert sring to int
  MC = MotorChoice.toInt();
  AR = AngleRange.toInt();
  FIN = FrequencyIN.toFloat();

  Serial.print("Motor Selected = ");
  Serial.println(MC);
  Serial.print("Angle Range = ");
  Serial.println(AR);
  Serial.print("Frequency Required = ");
  Serial.println(FIN);
  Serial.println();
  Serial.println();

  readString=""; //clears variable for new input
      MotorChoice="";
      AngleRange="";
      FrequencyIN="";
      }

    else
    {     
      readString += c; //makes the string readString
    }
}
}
处理代码:

 import processing.serial.*;

 Serial myPort;

 println(Serial.list());
 myPort = new Serial(this, Serial.list()[0], 9600); 

int M =1;
int A =90;
float F =2.5;


String sM = str(M);
String sA = str(A);
String sF = str(F);
String sb;
String s1;

sb = sM +","+ sA+"," + sF+"*";


s1 = sb;

println(s1);
 myPort.write(s1);
上述Arduino代码之前已经过试验,其中使用串行监视器以电机、角度、频率的形式提供输入*


任何帮助都将不胜感激。

如果我正确解释了您的代码,您将使用*字符作为表示列表结束的方式。但是在Arduino代码中,您正在检查*然后打印输出字符串。因此,数组的其余部分早就离开了该点。此外,您在开始时设置了一个名为
readString
的变量,但从未将其设置为任何值。这就是为什么你看不到任何输出

首先,我会将变量名从
readString
更改为其他名称(为了清楚起见),然后使用
Serial.readString()
从串行端口获取该字符串。然后检查该字符串的最后一个字符是否为*字符

if (Serial.available()) { 
String str = Serial.readString(); // get string
char c = str[strlen(str)-1]; // find *
if (c == '*') {
Serial.print("Output: ");
Serial.println(str);
//The rest of your code
}

到底什么“似乎不起作用”?是否成功从串行端口读取任何内容?是否面临任何错误?“似乎不起作用”的意思是什么?从串行端口读取的内容似乎没有任何内容可以使工作更简单。你能创建一个发送单个硬编码值的程序吗?是的,这是可能的,但我正在尝试传递一个转换为字符串的数组,因为我有太多的变量组合要作为字节传递,而这些字节不适合0-255的范围