1602-lcd-backlight

danielterletzkiy/compact-utils/1602-lcd-backlight

No description
1602-lcd-backlight
@/1602-lcd-backlight
RSport
Board GPIO port with LCD RS pin
ENport
Board GPIO port with LCD EN pin
D4port
Board GPIO port with LCD D4 pin
D5port
Board GPIO port with LCD D5 pin
D6port
Board GPIO port with LCD D6 pin
D7port
Board GPIO port with LCD D7 pin
L1string
Text for the first line
L2string
Text for the second line
UPDpulse
Triggers new write
BKport
Backlight PIN
BK statboolean
Turn BK off and on
BK PULSpulse
Pulses to change value
1602-lcd-backlight
RS
EN
D4
D5
D6
D7
L1
L2
UPD
BK
BK stat
BK PULS
DONE
ERR
ERRpulse
BK ERROR
DONEpulse
Fires when write is done
To use the node in your project you should have the danielterletzkiy/compact-utils 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

{{#global}}
#include <LiquidCrystal.h>
{{/global}}

struct State {
    LiquidCrystal* lcd;
};

{{ GENERATED_CODE }}

void printLine(LiquidCrystal* lcd, uint8_t lineIndex, XString str) {
    lcd->setCursor(0, lineIndex);
    uint8_t whitespace = 16;
    for (auto it = str->iterate(); it; ++it, --whitespace)
        lcd->write(*it);

    // Clear the rest of the line
    while (whitespace--)
        lcd->write(' ');
}

void evaluate(Context ctx) {
    if (!isInputDirty<input_UPD>(ctx))
        return;

    State* state = getState(ctx);
    auto lcd = state->lcd;
    if (!state->lcd) {
        state->lcd = lcd = new LiquidCrystal(
            (int)getValue<input_RS>(ctx),
            (int)getValue<input_EN>(ctx),
            (int)getValue<input_D4>(ctx),
            (int)getValue<input_D5>(ctx),
            (int)getValue<input_D6>(ctx),
            (int)getValue<input_D7>(ctx));

        lcd->begin(16, 2);
    }

    printLine(lcd, 0, getValue<input_L1>(ctx));
    printLine(lcd, 1, getValue<input_L2>(ctx));

    emitValue<output_DONE>(ctx, 1);
}