l9110-ctrl

cesars/motor/l9110-ctrl

No description
l9110-ctrl
@/l9110-ctrl
FWboolean
BWboolean
CCboolean
CCWboolean
T/Rboolean
ACTpulse
Triggers new write
l9110-ctrl
FW
BW
CC
CCW
T/R
ACT
FW-A
BW-A
FW-B
BW-B
DONE
DONEpulse
Fires on writing complete
BW-Bboolean
FW-Bboolean
BW-Aboolean
FW-Aboolean
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);

}