Я настраиваю программу управления шаговым двигателем, используя Arduino Mega 2560, и использую последовательное соединение USB от Raspberry Pi. Когда я запускаю свой код, мне бы хотелось, чтобы он имел два последовательных входа, начиная с множителя для вращения шаговых двигателей и затем команды для перемещения определенным образом. Затем эти входы можно использовать несколько раз, чтобы учесть разные множители и команды вращения.
В настоящее время у меня есть код для ввода ввода для множителя с маркерами начала и конца, например, <7.4>, а затем команда перемещенияНапример, 1. Это должно затем зациклить, как только команды будут выполнены, и снова взять множитель и команды.
Пример ввода будет <7.4>, а затем 1. Это должно обновить y и x, чтобы быть тем, что вывведены (в случае х без <>).
float steps;
int x;
const byte numChars = 32;
char recievedChars[numChars];
boolean newData = false;
void setup() {
Serial.begin(9600);
if(Serial.available() > 0){
Serial.read();
}
}
void loop() {
recvWithStartEndMarkers();
if(Serial.available() > 0) {
x = Serial.read() - '0';
Serial.println(x);
float y = atof(recievedChars);
steps = stepsPerRevolution * y;
Serial.println(steps);
// choice(); // This leads to the commands that run the steppers.
}
}
void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (recvInProgress == true) {
if (rc != endMarker) {
recievedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars -1;
}
}
else {
recievedChars[ndx] = '\0';
recvInProgress = false;
ndx = 0;
newData = true;
}
}
else if (rc == startMarker) {
recvInProgress = true;
}
}
}
Исходя из этого, ожидается, что я смогу ввести множитель, а затем команду, однако при запуске я не могу ввести секундумножитель после обеих команд, даже когда я форматирую его как '<' x '>' (не позволил бы мне использовать символы, так как 'обычно там не было), программа, кажется, просто читает x как команду, а не множитель.
Кроме того, иногда при запуске программа не будет принимать какие-либо входные данные до тех пор, пока не будут введены три или 4 числа, или примет множитель в качестве множителя и команды (так что ввод <3.4> будетвзять три в качестве множителя и 4 в качестве команды).