実現したいこと
ArduinoでPID制御の出力をコメントとしてシリアルモニタに出力して,その波形をグラフにしたいです.
発生している問題・エラーメッセージ
invalid type argument of unary ' * ' (have 'float')
該当のソースコード
#define Kp #define Ki #define Kd #define TARGET 2.0 #define COM_VOL 3.3 #define AVE_NUM 1000 #define INPUTIO 0 #define OUTPUTIO 9 float duty = 0; float dt,preTime; float vol = 0; float vol_sum = 0; float error,P,D,U; float I = 0; float preP = 0; void setup() { Serial.begin(9600); delay(1000); } void loop() { float nowtime = micros()/1000000.; vol_sum = 0; for (int i = 0; i < AVE_NUM ; i++){ vol_sum = vol_sum + analogRead(INPUTIO); } //取得した値は10bitなので,1024で割って電圧に変換をする vol = COM_VOL * (vol_sum / AVE_NUM) / 1024; //PID制御でDUTY比を計算して,デジタルピンに書き込み dt = (micros() - preTime) / 1000000;//時間差分 秒 preTime = micros(); error = TARGET - vol;//偏差 P = error; I = I + P*dt; D = (P - preP) / dt; preP = P; U = Kp * P + Ki * I + Kd * D;//ここでエラーが出ます. if(U > 255) U = 255; if(U < 0) U = 0; duty = duty + (U - duty) * 0.2; analogWrite(OUTPUTIO,duty); Serial.print(nowtime,3);Serial.print(","); Serial.print(dt,3);Serial.print(","); Serial.print(duty,3);Serial.print(","); Serial.print(P,3);Serial.print(","); Serial.print(I,3);Serial.print(","); Serial.print(D,3);Serial.print(","); Serial.print(vol,3); }
試したこと
floatをcharに変更してみましたが,同じ結果でした.エラーの場所をコメント化するとコンパイル出来ました.
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/20 06:36
2022/12/20 07:39
2022/12/20 07:41
2022/12/20 08:10