// EasyFunctions - some handy functions that I regularly use // by Bas Vermulst bool InterruptPending(unsigned long *prev_millis, unsigned int period, int mode){ // mode = 0: approximate mode without catch-up // mode = 1: exact mode without catch-up // mode = 2: exact mode with catch-up // note: overflow is handled correctly and exactly (tested) if( (millis()-(*prev_millis) > period) || (millis()-(*prev_millis) < 0)){ // trigger detected switch(mode){ default: case 0: // approximate mode without catch-up *prev_millis=millis(); break; case 1: // exact mode without catch-up while(millis()-(*prev_millis) > period){ // unwind *prev_millis=*prev_millis+period; } break; case 2: // exact mode with catch-up *prev_millis=*prev_millis+period; break; } return true; }else{ return false; } } String IPAddressString(IPAddress address){ return String(address[0]) + "." + String(address[1]) + "." + String(address[2]) + "." + String(address[3]); } String Float2SciStr(float number, int digits){ char char_buffer[40]; sprintf(char_buffer,"%.*E", digits, number); return String(char_buffer); }