簡體   English   中英

啟用換行符或回車符

[英]Enabling Newline or Carriage return

我正在閱讀一些機器人代碼,並且遇到了 Newline 和 Carriage 之類的東西。 那兩件事是什么? 我找不到任何與代碼本身相關的有用用法。 這是代碼

// !! make sure you have enabled Newline or Carriage return
#define _mode 0 // (0) used for calibration and testing, (1) uses serial as input
void handle_serial() {
  //: reads and stores the serial data
  int i = 0; float buff[3] = {0, 0, 0};
  String s_buff = "";
  while (Serial.available()) {
    char c = Serial.read();
    if (c == 13 || c == 32 || c == '\n') {
      buff[i] = s_buff.toFloat();
      s_buff = "";
      i++;
    } else
      s_buff += c;
  }

  if (_mode == 0)
    commands_exe(buff[0], buff[1], buff[2]);
  else if (_mode == 1)
    if (state == 4) {
      _direction = {buff[0], buff[1]};
      turn = buff[2];
    }
}

換行和馬車。 那兩件事是什么?

那是兩個控制字符。 通常表示為轉義序列"\n" (換行)和"\r" (回車)

https://en.wikipedia.org/wiki/Carriage_return

https://en.wikipedia.org/wiki/Newline

兩者都有歷史原因。 回車將打印頭移回行首。 新行移至下一行。

這仍然在計算機中用於移動 cursor 或在讀取文本文件時進行換行。

這段代碼的想法是讀取字節,直到收到換行符、空格或回車符。 然后將直到那時接收到的字節轉換為浮點數。

但是正如評論所暗示的那樣,由於許多原因,這種實施方式很糟糕。 主要是它很容易出錯。

例如,如果您沒有及時收到空格、換行符或回車符,您就有可能超出緩沖區的邊界。

它還經常用於終止串行命令,以便計算機知道他何時收到完整的命令,同時允許在終端中很好地顯示它們。 由發送者確保發送正確的數據,這通常是一個非常糟糕的主意。

您可以從這個片段中學到的唯一一件事就是如何不去做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM