Edited at

ArduinoでConsole.ReadLineもどき

Serial.readStringUntil(`\n`)をもっとコンソールアプリみたく直感的に出来ないかと思い、作ってみました。


コード例

String consoleReadLine(const char* disp){

char inData;
String total;

Serial.print(disp);
while(inData != '\n'){
while(Serial.available() <= 0);
inData = Serial.read();
if(0x1F < inData && inData < 0x7F){
Serial.print(inData);
total += inData;
}
else if(inData == 0x08 && total.length() > 0){
Serial.write(0x08);
Serial.write(0x7F);
total.remove(total.length() - 1);
}
}
Serial.println("");

return total;
}


ざっくり解説

基本的には\nが来るまでwhile()でループさせます。

Serial.available()で受信バッファが1文字分以上になるまで待機ループさせます。

送信されたら1文字分を読み取ってinDataに代入し文字コードを判別します。

0x20~0x7Eまでの "文字" ならそのままtotalバッファへ追加し表示を返します。

制御文字0x08(バックスペース)で、かつtotalバッファが1文字以上の場合は、末尾1文字分を削除し、カーソルを左に移動させます。