To use the node in your project you should have the cesars/motor library installed. Use the “File → Add Library” menu item in XOD IDE if you don’t have it yet. See Using libraries for more info.
C++ implementation
struct State {
};
{{ GENERATED_CODE }}
void evaluate(Context ctx) {
if (!isInputDirty<input_ACT>(ctx))
return;
const bool _FW = getValue<input_FW>(ctx);
const bool _BW = getValue<input_BW>(ctx);
const bool _CC = getValue<input_CC>(ctx);
const bool _CCW = getValue<input_CCW>(ctx);
const bool _TR = getValue<input_TU002FR>(ctx);
uint16_t val_1 = _FW << 4;
uint8_t val_2 = _BW << 3;
uint8_t val_3 = _CC << 2;
uint8_t val_4 = _CCW << 1;
uint8_t val_5 = _TR;
Number val = val_1 | val_2 | val_3 | val_4 | val_5 ;
switch((short)val){
case 16: // forward
emitValue<output_FW_A>(ctx, 1);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 1);
emitValue<output_BW_B>(ctx, 0);
break;
case 8: // backward
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 1);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 1);
break;
case 20: // gire cc hacia adelante
emitValue<output_FW_A>(ctx, 1);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 0);
break;
case 18: // gire ccw hacia adelante
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 1);
emitValue<output_BW_B>(ctx, 0);
break;
case 12: // gire cc hacia atras
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 1);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 0);
break;
case 10: // gire ccw hacia atras
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 1);
emitValue<output_BW_B>(ctx, 0);
break;
case 21: // rota cc hacia adelante
emitValue<output_FW_A>(ctx, 1);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 1);
break;
case 19: // rota ccw hacia adelante
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 1);
emitValue<output_FW_B>(ctx, 1);
emitValue<output_BW_B>(ctx, 0);
break;
case 13: // rota cc hacia atras
emitValue<output_FW_A>(ctx, 1);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 1);
break;
case 11: // rota ccw hacia atras
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 1);
emitValue<output_FW_B>(ctx, 1);
emitValue<output_BW_B>(ctx, 0);
break;
case 5: // rota cc hacia adelante
emitValue<output_FW_A>(ctx, 1);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 1);
emitValue<output_BW_B>(ctx, 0);
break;
case 4: // rota ccw hacia adelante
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 1);
emitValue<output_BW_B>(ctx, 0);
break;
case 3: // rota cc hacia atras
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 1);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 1);
break;
case 2: // rota ccw hacia atras
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 1);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 0);
break;
default: // none - stop
emitValue<output_FW_A>(ctx, 0);
emitValue<output_BW_A>(ctx, 0);
emitValue<output_FW_B>(ctx, 0);
emitValue<output_BW_B>(ctx, 0);
break;
}
emitValue<output_DONE>(ctx, 1);
}