Не отвечает оператор if.

Tiruso
Tiruso аватар
Offline
Зарегистрирован: 06.04.2019

Добрый день! У меня тут возникла проблема: когда я хочу запустить отдельные участки программы с помощью подачи команд через Serial, то просто не отвечают эти самые куски программы. Всё эти части начинаются с оператора if (в коде я выделил с какого места не работает). Для проверки, что получается на выходе из Serial я вставил пункт вывода, что получается на выходе. Выводит именно то, что я ввожу. Помогите решить проблему.

void loop() {
   if (t==0){
    check();
   }
   while(Serial.available()>0){ //Процедура приёма команд
    char c = Serial.read();
    s += c;
    delay(3);
   }
   if (s != ""){
    Serial.println(s);
   } //не работает после этой строки
   if (s=="x"){
    s="";
    Serial.println("Введите координаты X");
    delay(5000);
    x = Serial.parseInt();
    if(x>300){
      x=0;
      Serial.println("Ошибка: недопустимое значение!");
    }
    if(x<0){
      x=0;
      Serial.println("Ошибка: недопустимое значение!");
    }
    s="X: ";
    s+=x;
    Serial.println(s+"мм");
   }
   if (s=="y"){
    s="";
    Serial.println("Введите координаты Y");
    delay(5000);
    if (y>300){
      y=0;
      Serial.println("Ошибка: недопустимое значение!");
    }
    if (y<0){
      y=0;
      Serial.println("Ошибка: недопустимое значение!");
    }
    y = Serial.parseInt();
    s="Y: ";
    s += y;
    Serial.println(s+"мм");
   }
   if (s=="go"){
    Serial.println("Starting...");
    if (x>x1){
      xr=x-x1;
      x1=x;
      digitalWrite(PIN_DIR1, LOW);
    }
    if (x<x1) {
      xr=x1-x;
      x1=x;
      digitalWrite(PIN_DIR1, HIGH);
    }
    if (y>y1) {
      yr=y-y1;
      y1=y;
      digitalWrite(PIN_DIR2, HIGH);
      digitalWrite(PIN_DIR3, HIGH);
    }
    if (y<y1) {
      yr=y1-y;
      y1=y;
      digitalWrite(PIN_DIR2, LOW);
      digitalWrite(PIN_DIR3, LOW);
    }
    int rx=xr/xn;
    int ry=yr/yn;
    Serial.println(rx);
    Serial.println(ry);
    for (t=0;t < rx;t++) { 
      digitalWrite(PIN_STEP1, HIGH);
      delay(SPEED);
      digitalWrite(PIN_STEP1, LOW);
      delay(SPEED);
    }
    for (t=0; t<ry; t++){
      digitalWrite(PIN_STEP2, HIGH);
      digitalWrite(PIN_STEP3, HIGH);
      delay(SPEED);
      digitalWrite(PIN_STEP2, LOW);
      digitalWrite(PIN_STEP3, LOW);
      delay(SPEED);
    }
    Serial.println("Платформа на месте");
   }
   s="";
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

В правом нижнем углу Serial Monitor выберите "No newline" и повторите тест.

Tiruso
Tiruso аватар
Offline
Зарегистрирован: 06.04.2019

Большое спасибо. Всё заработало!

sadman41
Offline
Зарегистрирован: 19.10.2016

Причину поняли?

Tiruso
Tiruso аватар
Offline
Зарегистрирован: 06.04.2019

Да. Спасибо.