どうすれば出来るん?って話なのでスケッチ晒し。車両側のTPS電圧が5vなので分圧して入力しているのと、IAPとO2の出力は適当なケミコンつけてなだらかにしてECMへ入力。ピックアップ信号はそのまま入力。スケッチ内のmap関数でTPS電圧の微調整とフィードバックさせるならリーンとリッチの値を適当に入れれば動くと思います。

ラズパイ ピコで片側のコアでTPS電圧のチェック、別のコアでリーン・リッチを出力する為に2サイクル分(4回転)を力技で書いてるだけです。無駄にデュアルコア使ってます。
int VOL_IN=26; //ボリューム
int RPM_OUT=10; //回転出力
int IAP_OUT=11; //吸気圧出力
int O2S_OUT=12; //O2出力
int VIN=0; //analogRead初期値
int STP=0; //時間初期値
int PIK_UP=40; //ピックアップ幅値
int O2S_HI=90; //O2出力HI値 85
int O2S_LO=90; //02出力LOW値 75
int IAP_01=40; //
int IAP_02=10; //LO
int IAP_03=10; //LO
int IAP_04=10; //LO
int IAP_05=40; //
int IAP_06=70; //
int IAP_07=100; //
int IAP_08=130; //
int IAP_09=160; //
int IAP_10=190; //
int IAP_11=220; //
int IAP_12=250; //HI
int IAP_13=250; //HI
int IAP_14=250; //HI
int IAP_15=250; //HI
int IAP_16=250; //HI
int IAP_17=250; //HI
int IAP_18=250; //HI
int IAP_19=220; //
int IAP_20=190; //
int IAP_21=160; //
int IAP_22=130; //
int IAP_23=100; //
int IAP_24=70; //
void setup() {
pinMode(VOL_IN,INPUT);
Serial.begin(9600);
}
void setup1() {
pinMode(RPM_OUT,OUTPUT);
pinMode(IAP_OUT,OUTPUT);
pinMode(O2S_OUT,OUTPUT);
Serial.begin(9600);
}
void loop() {
VIN=((VIN*9)+analogRead(VOL_IN))/10;
//int TMP=map(VIN,3,1014,450,2900); //vol
int TMP=map(VIN,980,180,450,2900); //tps450 2900
if (TMP<=450) { STP=450; } else { STP=TMP; }
delay(20);
//Serial.println(STP);
}
void loop1() {
unsigned long TIM=millis();
//1週目
analogWrite(IAP_OUT,IAP_01); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸1
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹1
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_02); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸2
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹2
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_03); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸3
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹3
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_04); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸4
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹4
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_05); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,LOW); //凸5 凹
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹5
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_06); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸6
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹6
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_07); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸7
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹7
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_08); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸8
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹8
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_09); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸9
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹9
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_10); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸10
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹10
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_11); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸11
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹11
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_12); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸12
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹1
delayMicroseconds(STP);
//Serial.println((1000/(millis()-TIM))*60);
//2週目
analogWrite(IAP_OUT,IAP_13); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸1
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹1
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_14); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸2
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹2
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_15); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸3
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹3
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_16); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸4
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹4
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_17); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,LOW); //凸5 凹
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹5
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_18); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸6
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹6
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_19); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸7
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹7
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_20); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸8
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹8
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_21); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸9
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹9
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_22); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸10
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹10
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_23); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸11
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹11
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_24); //IAP
analogWrite(O2S_OUT,O2S_HI); //02
digitalWrite(RPM_OUT,HIGH); //凸12
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹12
delayMicroseconds(STP);
//3週目
analogWrite(IAP_OUT,IAP_01); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸1
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹1
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_02); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸2
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹2
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_03); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸3
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹3
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_04); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸4
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹4
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_05); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,LOW); //凸5 凹
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹5
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_06); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸6
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹6
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_07); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸7
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹7
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_08); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸8
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹8
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_09); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸9
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹9
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_10); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸10
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹10
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_11); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸11
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹11
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_12); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸12
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹1
delayMicroseconds(STP);
//4週目
analogWrite(IAP_OUT,IAP_13); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸1
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹1
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_14); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸2
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹2
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_15); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸3
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹3
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_16); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸4
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹4
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_17); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,LOW); //凸5 凹
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹5
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_18); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸6
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹6
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_19); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸7
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹7
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_20); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸8
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹8
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_21); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸9
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹9
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_22); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸10
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹10
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_23); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸11
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹11
delayMicroseconds(STP);
analogWrite(IAP_OUT,IAP_24); //IAP
analogWrite(O2S_OUT,O2S_LO); //02
digitalWrite(RPM_OUT,HIGH); //凸12
delayMicroseconds(PIK_UP);
digitalWrite(RPM_OUT,LOW); //凹12
delayMicroseconds(STP);
}
間違いとかコッソリ教えて下さいね。