Skip to content

Instantly share code, notes, and snippets.

@alex-eri
Created October 24, 2023 16:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alex-eri/e97dbdcb6eef3dbe49971e0324295d0d to your computer and use it in GitHub Desktop.
Save alex-eri/e97dbdcb6eef3dbe49971e0324295d0d to your computer and use it in GitHub Desktop.
manchester
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;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment