どうすれば出来るん?って話なのでスケッチ晒し。車両側の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); }
間違いとかコッソリ教えて下さいね。