Передача строки с несколькими переменными в anrduino через последовательный порт - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь передать строку, сгенерированную с использованием обработки, в последовательный порт 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 ранее был опробован, когда вход подавался с использованием последовательного монитора в формате двигателя, угла, частоты *

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 16 октября 2018

Если я правильно интерпретирую ваш код, вы используете символ * как способ обозначения конца списка.Но в вашем коде 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
}
...