/* */ #define Sensor_IN 3 volatile uint16_t count; // 1ms = 8 //Timer2 Overflow Interrupt Vector ISR(TIMER2_OVF_vect) { count++; //Increments the interrupt counter }; void setup() { pinMode(Sensor_IN, INPUT); pinMode(LED_BUILTIN, OUTPUT); Serial.begin(115200); TIMSK2 = 0x01; //Overflow Interrupt Enable TCCR2A = 0x00; //Set the CTC mode TCCR2B = 0x02; //Set the prescale } // rate is 1000ms // msg len is about 500 ms #define tickperms 8 #define tickpermshalf tickperms/2 uint16_t oldcount; // 64 per ms uint8_t sensorState,lastsensorState; uint16_t len; // 64 per ms uint16_t synctime; uint8_t bitarr[8*15]; uint8_t bitarrpt; uint8_t bytearr[15]; void buildbyte(uint8_t pt) { uint8_t mybyte = 0; for (int i=0;i<8;i++) mybyte |= bitarr[pt*8+i]< 300 * tickperms) // intermessage gap { count = 0; // reset counter oldcount = 0; } if (bitarrpt > 8*15) { bitarrpt = 0; Serial.println("too many bits"); } } } if (synctime != 0) { if (count >= synctime) { synctime = 0; if (bitarrpt != 8*15) { Serial.print("wrong no of bits "); Serial.println(bitarrpt); } for (int i=0;i<15;i++) buildbyte(i); for (int i=0;i<15;i++) { Serial.print(bytearr[i],HEX); Serial.print(" "); } Serial.println(); } } }