Serial.read возвращает значения, которые отличаются от значения в Serial Monitor - PullRequest
0 голосов
/ 29 мая 2019

Цель: я хотел бы подсказать целое число от последовательного монитора. Эти значения будут использоваться как часть команды delay (value) позже. Цель этой задержки состоит в том, чтобы два вибрационных двигателя работали немного несинхронно.

Проблема: я пытаюсь получить значения, такие как 60 или 400, из командной строки. Текущие значения не соответствуют тому, что вводится.

Моя интуиция говорит, что это проблема формата данных. Я надеюсь, что кто-то может помочь мне понять, почему каждая цифра печатается как число.

Код подпрограммы подсказки:

  while (!Serial.available()) {       //this holds until we see a serial prompt
    } 
  if (Serial.available() > 0) {
    uint8_t inChar = Serial.read();
    Serial.println(inChar);
    // convert the incoming byte to a char and add it to the string:
    if (isDigit(inChar)) {
      receivedChar += (char)inChar;
    }

    // if you get a newline, print the string, then the string's value:
    if (inChar == '\n') {
      Serial.print("Delay Value:");
      Serial.println(receivedChar.toInt());
      Serial.print("String: ");
      Serial.println(receivedChar);
      // clear the string for new input:      
    }
    newData = true;
    prompthold = false;
  }
}

Код петли:

  void loop(){
    while (prompthold == false) {
      prompthold = true;

      Serial.println("Please enter delay");
      receivedChar = "";
      srl_prompt();
      apparentmotion();
    }

    delay(500);

  }

Диагностическая информация: Ввод 1234567890

Возвращает:

16:28:13.079 -> 49
16:28:13.079 -> Please enter delay
16:28:13.079 -> 50
16:28:13.079 -> Please enter delay
16:28:13.079 -> 51
16:28:13.079 -> Please enter delay
16:28:13.079 -> 52
16:28:13.079 -> Please enter delay
16:28:13.079 -> 53
16:28:13.113 -> Please enter delay
16:28:13.113 -> 54
16:28:13.113 -> Please enter delay
16:28:13.113 -> 55
16:28:13.113 -> Please enter delay
16:28:13.113 -> 56
16:28:13.147 -> Please enter delay
16:28:13.147 -> 57
16:28:13.147 -> Please enter delay
16:28:13.147 -> 48
16:28:13.147 -> Please enter delay
16:28:13.147 -> 10
16:28:13.147 -> Delay Value:0
16:28:13.147 -> String: 
16:28:13.147 -> Please enter delay

Ввод 200

16:29:06.082 -> Please enter delay
16:34:02.121 -> 50
16:34:02.121 -> Please enter delay
16:34:02.121 -> 48
16:34:02.155 -> Please enter delay
16:34:02.155 -> 48
16:34:02.155 -> Please enter delay
16:34:02.155 -> 10
16:34:02.155 -> Delay Value:0
16:34:02.155 -> String: 
16:34:02.155 -> Please enter delay

1 Ответ

0 голосов
/ 29 мая 2019

Хорошо, я решил это.Если вы используете Serial.read (), вы получите строку / ASCII.Если вы используете Serial.parseInt (), вы получите значение.Обновленный код ниже:

void srl_prompt() {
  while (!Serial.available()) {       //this holds until we see a serial prompt
    } 
  if (Serial.available() > 0) {
    uint8_t inChar = Serial.parseInt();
    Serial.println(inChar);
    // convert the incoming byte to a char and add it to the string:
    if (isDigit(inChar)) {
      receivedChar += (char)inChar;
    }

    // if you get a newline, print the string, then the string's value:
    if (inChar == '\n') {
      Serial.print("Delay Value:");
      Serial.println(receivedChar.toInt());
      Serial.print("String: ");
      Serial.println(receivedChar);
      // clear the string for new input:      
    }
    newData = true;
    prompthold = false;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...