LovyanGFX for PC では、setup() や loop() などで構成される Arduino 形式のスケッチがビルドでき、PCで実行できます。
しかしながら、
@pokibon さんの LovyanGFX Advent Calendar 2022 の 1 日目や 9日目の記事では、
ArduinoのAPIは使用できませんので、ソースコードはそのまま共通化はできません。
例えば、delay()関数はSleep()関数に置き換えるなどの修正が必要になります。
Arduino固有のソースをWindowsAPIに修正
delay() → sleep()
StringクラスをC++のstringクラスに変更
などとあり、ちょこまかと変更をしないといけません。
また、8日目の僕の記事では
Serial 関数はコメントアウト、またファイル入出力は元々のものをコメントアウトして、Cのスタンダードファイル入出力関数のものを別に足しています。
とあります。
Arduino/ESP32 のスケッチでは、I2C / SPI などのハードウェアに依存するようなものはさすがに実機でないといけませんが、delay とか String クラスなどは単純に変換すればいいので簡単なライブラリを作ると便利になりそうです。
pc.hpp
以下のインクルードファイルを作りました。
#define millis(num) SDL_GetTicks()
#define String(num) to_string(num)
#define delay(msec) SDL_Delay(msec)
#include <stdint.h>
#include <stdlib.h>
#include <string>
using namespace std;
class SerialDummy
{
public:
void begin(int speed){
}
void print(string contents){
printf("%s",contents.c_str());
}
void print(int contents){
printf("%d",contents);
}
void println(void){
printf("\n");
}
void println(int contents){
printf("%d\n",contents);
}
void println(string contents){
printf("%s\n",contents.c_str());
}
};
SerialDummy Serial;
(2022/12/18 println(void) の記述にバグが合ったのを修正しました)
hpp ワンファイルだけで済ますように、cpp の内容も含ませていますww
これを、ユーザープログラムのソースファイルと同じ場所に置いて、ソースファイルの冒頭で
#include "pc.hpp"
を書き足せば使えます。
対応
とりあえず、ぱっと必要だった以下の処理を作りました。
- millis()
- String(num)
- delay(msec)
- Serial.begin(speed)
- Serial.print(...)
- Serial.println(...)
やっていること
- Serial 関係は標準出力に出せばいいかな・・・
- 時間関係の delay とか millis は OS 依存命令ではなく、SDL 命令を使うようにしました(なので SDL ビルドのみの対応)。
ファイル読み込みに使う open とか read とかは結構違いがあるのでそれは書き換えでやってもらうことにします。
今後の対応
まだまだ増やしたい機能はありますが、ぱっと書けそうなので必要に応じて足してくださいww
2022/12/24追記
この記事よりも、更に改良したものを、こちらで公開しましたのでお使いください。
「library for to run arduino sketch on pc」
https://github.com/nanbuwks/arduinolib_for_PC
解説はこちら
「Arduino スケッチを PC で動かすために」
https://qiita.com/nanbuwks/items/dc252066ff4cabf85573