Skip to content

Instantly share code, notes, and snippets.

@alex-eri
Created October 24, 2023 16:56
Show Gist options
  • Select an option

  • Save alex-eri/e97dbdcb6eef3dbe49971e0324295d0d to your computer and use it in GitHub Desktop.

Select an option

Save alex-eri/e97dbdcb6eef3dbe49971e0324295d0d to your computer and use it in GitHub Desktop.

Revisions

  1. alex-eri created this gist Oct 24, 2023.
    62 changes: 62 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,62 @@
    unsigned long ct = 0;
    unsigned char vs[150];
    unsigned char pvs[32];

    u8 b = 0;
    u8 d = 0;

    unsigned int w = 360;

    unsigned char *data;
    u8 start;
    u8 len;
    bool ready = false;
    int tkc = 0;
    unsigned long pt = 0;

    void IRAM_ATTR setbit(u8 v, u8 d) {
    u8 bit = (d & 7);
    u8 mask = ~(1 << bit);
    u8 byt = d >> 3;
    pvs[byt] &= mask;
    pvs[byt] |= v << bit;
    }

    void IRAM_ATTR on_change() {
    pt = micros() - ct;
    ct += pt;
    unsigned char pv = digitalRead(PIN_RFINPUT);

    if (pt > 5000) {
    b = 0;
    d = 0;
    start = 0;
    len = 0;
    } else {
    tkc = ((pt + (w >> 1)) / w);
    for (int i = 0; i < tkc; i++) {
    vs[b++] = pv;
    }

    for (; d < (b >> 1); d++) {
    switch (vs[d << 1] << 1 | vs[1 + (d << 1)]) {
    case 0:
    ready = true;
    len = d - start + 1;
    break;
    case 3:
    start = d + 2;
    break;
    case 1:
    setbit(1, d - start);
    break;
    case 2:
    setbit(0, d - start);
    break;
    default:
    break;
    }
    }
    }
    }