純粋なC++ OOPスタイルのコードで、ArduinoのUARTシリアルポート経由で対話型シェルを実装したいと思います。しかし、コード内のユーザ入力コマンドを判断する際にif-else判定が多すぎると、少し醜いものになると思います。Arduino用UARTシリアル経由のインタラクティブシェル?
ですから、if- else文?例えば、
BEFORE:
while(Serial.available())
{
serialReceive = Serial.readString();// read the incoming data as string
Serial.println(serialReceive);
}
if(serialReceive.equals("factory-reset"))
{
MyService::ResetSettings();
}
else if(serialReceive.equals("get-freeheap"))
{
MyService::PrintFreeHeap();
}
else if(serialReceive.equals("get-version"))
{
MyService::PrintVersion();
}
AFTER:コマンドをトリガー文字列と一緒に関数ポインタを格納する配列を持つことができます
while(Serial.available())
{
serialReceive = Serial.readString();// read the incoming data as string
Serial.println(serialReceive);
}
MagicClass::AssignCommand("factory-reset", MyService::ResetSettings);
MagicClass::AssignCommand("get-freeheap", MyService::PrintFreeHeap);
MagicClass::AssignCommand("get-version", MyService::PrintVersion);