Witam.
Napisałem pewną funkcję do komunikacji arduino z moim programem na PC. Wszystko działa tylko jestem ciekaw czy można np pominąć ręcznego dodawania przypadków do instrukcji switch, jak widać wszystkie przypadki wyglądają identycznie i różnią się jedynie wysyłaną zmienną. Jedyna różnica tkwi w typie zmiennych, niektóre to inty,chary czy floaty. Tak więc czy da się to jakoś zapisać za pomocą kilku linijek? To na razie jest tylko część zmiennych a dodawanie i edytowanie tego w obecnej formie zajmuje sporo czasu.
enum AHK_param {_PID_ROL_P,_PID_ROL_I,_PID_ROL_D,_REC_ROL,_REC_PIT,_REC_YAW,_REC_THR
,_PID_DIV,_PID_FS,_PID_DT,_MPU_FS,_MPU_DT,_GXCF,_GYCF,_GZCF
,_PID_ROL_P_VAL,_PID_ROL_I_VAL,_PID_ROL_D_VAL,_PID_ROL_OUT_VAL,_RX,_TX,_FIFO_CNT,_RF,_LF};
void drive(){
int rx = Serial.available();
if( rx>=0 ){
int cmd = Serial.read();
AHK_param co = Serial.read();
switch(cmd){
case 0:{ //read
switch(co){
case _PID_ROL_P: SerialSendParam(co, PID_ROL_P); break;
case _PID_ROL_I: SerialSendParam(co, PID_ROL_I); break;
case _PID_ROL_D: SerialSendParam(co, PID_ROL_D); break;
case _REC_ROL: SerialSendParam(co, REC_ROL); break;
case _REC_PIT: SerialSendParam(co, REC_PIT); break;
case _REC_YAW: SerialSendParam(co, REC_YAW); break;
case _REC_THR: SerialSendParam(co, REC_THR); break;
case _PID_DIV: SerialSendParam(co, PID_DIV); break;
case _PID_FS: SerialSendParam(co, PID_FS); break;
case _PID_DT: SerialSendParam(co, PID_DT); break;
case _MPU_FS: SerialSendParam(co, MPU_FS); break;
case _MPU_DT: SerialSendParam(co, MPU_DT); break;
case _GXCF: SerialSendParam(co, gxcf); break;
case _GYCF: SerialSendParam(co, gycf); break;
case _GZCF: SerialSendParam(co, gzcf); break;
case _PID_ROL_P_VAL: SerialSendParam(co, qqqq.P_VAL); break;
case _PID_ROL_I_VAL: SerialSendParam(co, qqqq.I_VAL); break;
case _PID_ROL_D_VAL: SerialSendParam(co, qqqq.D_VAL); break;
case _PID_ROL_OUT_VAL: SerialSendParam(co, qqqq.OUT_VAL); break;
}
break;
}
case 1:{ //write
float val = SerialReadFloat();
switch(co){
case _REC_ROL: REC_ROL=val;
}
break;
}
}
}
// SerialStreamQuaternion();
}
void SerialSendParam(uint8_t q,float val){
Serial.write(q);
SerialWriteFloat(val);
}