あなたが求めていることは可能ですが、あなたの側で多くの作業が必要です。
アプローチ 1 (大きく考える):
あなたが探しているのは、PAL (プログラマブル アレイ ロジック) および CPLD (複雑なプログラマブル ロジック デバイス) がどのように動作するかと同等のソフトウェア実装です。この記事を読むと、これがハードウェアでどのように行われるかについていくつかのアイデアが得られます。
PLD に関するウィキペディアの記事
PAL は、一連の入力と出力の間に任意の組み合わせ論理規則を作成できます。つまり、AND、OR、NOT の論理式として表現できるものはすべてプログラムできます。入力を論理ゲートに接続し、次に出力に接続する一連のヒューズを「焼く」ことによってプログラムされます。これらのデバイスにアップロードされるのは、0 と 1 のセットだけです。
ヒューズを表すために、0 と 1 の配列を使用してソフトウェアでそのようなことを実装できます。ハードコードは配列に対して実行され、出力を計算します。アレイに正しいヒューズをロードする方法を開発する必要があります。
PAL をプログラムする一般的な方法は、言語 VHDL を使用することです。この言語のコンパイラは、あなたのような式を受け取り、それを PAL が使用できる AND、OR、NOT のセットに変換します。検索すると、この言語に関する無限の議論が得られます。たとえば、次のようになります。
VHDL チュートリアル
テキスト入力を受け取り、ヒューズを決定するコンパイラを作成する必要があります。いくつかの重要なタスクを実行することになります。
VHDL と PAL に相当するものを独自に作成する頃には、プロト ボードに PAL チップを配置するだけで完了したと考えるでしょう。
アプローチ 2 (より実用的):
同じ結果を得る簡単な方法は、真理値表です。真理値表は、論理式のセットに相当します。真理値表を実装するには、論理式を入力ケースごとに 1 行の表に変換します。出力を駆動する 2 つの入力の真理値表の例を次に示します。
IN1 IN2 OUT
0 0 1
0 1 0
1 0 1
1 1 1
このような真理値表の実装のコードは次のようになります。
const int IN1 = 6;
const int IN2 = 7;
const int OUTA = 13;
byte table[4] = {1, 0, 1, 1};
void loop() {
int in1;
int in2;
byte outbit;
size_t ix;
//
in1 = digitalRead(IN1);
in2 = digitalRead(IN2);
ix = in2 * 2 + in1;
outbit = table[ix];
digitalWrite(OUTA, outbit);
}
論理規則の完全な表現は、4 バイトの配列です。新しい出力方程式を「プログラム」するには、特定の方程式に対して「0 0 1 0」を送信して、4 つの値の新しいセットを送信するだけです。プログラムは値のリストを受け取り、テーブル配列に格納します。新しい値/ルールが保存されるとすぐに、出力の機能が変更されます。
このタイプのプログラマブル ロジックは、テーブルを保存するのに十分な RAM があれば実現可能です。入力が 4 つの場合は 16 個の値が必要で、5 個の場合は 32 個しか必要ありません。
あなたの質問は、エレクトロニクス設計の重要なポイントを提起します。適切な問題に対して適切なデバイスを選択する必要があります。コードが常に優れている、または簡単であるとは限りません。ハンマー ネイル トラップを回避します (唯一のツールがハンマーの場合、すべての問題は釘のように見えます)。PAL/CPLD とマイクロコントローラは強力な組み合わせです。