program-clock

sergtzar67/program-clock-v01/program-clock

No description
program-clock
@/program-clock
program-clock
HOUR
MIN
SEC
SECnumber
Seconds value in range [0, 59]
MINnumber
Minutes value in range [0, 59]
HOURnumber
Hours value in range [0, 23]
To use the node in your project you should have the sergtzar67/program-clock-v01 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 {
  TimeMs nextTrig;
};

   {{ GENERATED_CODE }}

    uint8_t minutes = 0;
    uint8_t seconds=0;
    uint8_t hours=0;
void evaluate(Context ctx) {
    State* state = getState(ctx);
    TimeMs tNow = transactionTime();
    TimeMs tNext = 0;
    // как только разница между текущим временем и временем записанным в tNext становится больше 1000 миллисекунд...
    while(tNext-tNow > 1000){
    //...обновляем  tNext и добавляем к счетчику Секунд +1
        tNext=tNow;
        seconds+=1;
    if (seconds > 59) {
        seconds = 0;
    // как только счетчик секунд достигнет 60, обнуляем его и добавляем к счетчику Минут +1...
        minutes+=1;
    emitValue<output_MIN>(ctx, minutes);
    }
    // ...тоже самое для Часов...
    if (minutes > 59) {
        minutes = 0;
        hours+=1;
    emitValue<output_HOUR>(ctx, hours);
    }
    // ... и обнуляем счетчик Часов в конце дня
    if (hours > 23) {
        hours = 0;
    }
    state->nextTrig = tNext;
    //пауза на 1 сек
    setTimeout(ctx, 1000);
    emitValue<output_SEC>(ctx, seconds);
    }
}