void RCSwitch::handleInterrupt() { static unsigned int duration; static unsigned int changeCount; static unsigned long lastTime; static unsigned int repeatCount; long time = micros(); duration = time - lastTime; if (duration > 5000 && duration > RCSwitch::timings[0] - 200 && duration < RCSwitch::timings[0] + 200) { repeatCount++; changeCount--; if (repeatCount == 2) { if (receiveProtocol1(changeCount) == false){ if (receiveProtocol2(changeCount) == false){ //failed } } repeatCount = 0; } changeCount = 0; } else if (duration > 5000) { changeCount = 0; } if (changeCount >= RCSWITCH_MAX_CHANGES) { changeCount = 0; repeatCount = 0; } RCSwitch::timings[changeCount++] = duration; lastTime = time; }
void RCSwitch::handleInterrupt() { static unsigned long longTime=0; static unsigned int longCount; static unsigned int duration; static unsigned int changeCount; static unsigned long lastTime; static unsigned int repeatCount; long time = micros(); duration = time - lastTime; longCount++; if(longTime == 0) longTime = time; else if((time - longTime) > 1000000) { if(longCount > 7000) { printf("Warning: RCSwitch::handleInterrupt: Serious noise on the RF interrupt: %d calls in %d micros",longCount,(time-longTime)); } longTime = time; longCount = 1; } if (duration > 5000 && duration > RCSwitch::timings[0] - 200 && duration < RCSwitch::timings[0] + 200) { repeatCount++; changeCount--; if (repeatCount == 2) { if (receiveProtocol1(changeCount) == false){ if (receiveProtocol2(changeCount) == false){ //failed } } repeatCount = 0; } changeCount = 0; } else if (duration > 5000) { changeCount = 0; } if (changeCount >= RCSWITCH_MAX_CHANGES) { changeCount = 0; repeatCount = 0; } RCSwitch::timings[changeCount++] = duration; lastTime = time; if(RCSwitch::nReceivedValue>0 && RCSwitch::receiveCallback != NULL) { RCSwitch::receiveCallback(RCSwitch::nReceivedValue); RCSwitch::nReceivedValue = NO_VALUE; } }