//byte currentTime = millis() & 0xff; //static byte previousTime = 0; unsigned int currentTime = millis() & 0xff; static unsigned int previousTime = 0;
if(currentTime - previousTime >= 200) { // 5 updates per seconde previousTime = currentTime;
Neem nou meteen een unsigned long, anders loop je later weer stuk...
if( !someTimer ) { someTimer = 5; // afhankelijk van de gekozen tijdbasis kan dit 5ms, 5cs, 5ds of 5s zijn
Code: [Selecteer]Weistra regelaar(13); // maak het object en gebruik pin 13
Weistra regelaar(13); // maak het object en gebruik pin 13
const byte regelaarPin[3] = {2,3,4};Weistra regelaar[0](regelaarPin[0]);
const byte regelaarPin[3] = {2,3,4};Weistra regelaar[3] = {Weistra(regelaarPin[0]), Weistra(regelaarPin[1]), Weistra(regelaarPin[2])};
void setup(){ regelaar.begin(); // initialiseert de regelaar}
const byte regelaarPin[3] = {2,3,4};Weistra regelaar[3] = {Weistra(regelaarPin[0]), Weistra(regelaarPin[1]), Weistra(regelaarPin[2])};void setup(){ regelaar[0].begin(); // initialiseert de 1e regelaar}
void setup(){ regelaar[0].begin(); // initialiseert de 1e regelaar regelaar[1].begin(); // initialiseert de 2e regelaar}
void setup(){ for(byte i=0; i<numRegelaars; i++) { regelaar[i].begin(); // initialiseert alle regelaars }}
void Weistra::update() { static byte counter = 0; static uint32_t prevTime = 0; if( portx_p != 0 ) { uint32_t currentTime = micros()/* & 0x0000FFFF*/; // we only use the last 2 bytes of micros() if( currentTime - prevTime >= intervalTime ) { // interval prevTime = currentTime; if( counter == 0 && dutyCycle > 0) { // if counter reaches 100, reset it to 0 and enable the track power pin *portx_p |= trackPin; } if( counter == dutyCycle && dutyCycle < 100) { *portx_p &= ~trackPin; } counter++; if(counter > 100) counter = 0; } }}
// static byte counter = 0; // static uint32_t prevTime = 0;
private: unsigned int intervalTime; unsigned char dutyCycle; unsigned char trackPin; uint32_t prevTime; // <-- voeg toe (uint32_t is het zelfde als unsigned long) uint8_t counter; // <-- voeg toe (uint8_t is hetzelfde als byte)
Omdat deze functie een deel is van een class (ofwel we noemen het nu een 'method') mag ik geen static variabele gebruiken. Deze static variabele zijn lokale variabele, static zorgt er voor dat deze variabele hun waarde blijven behouden buiten de functie om. Normaal is dat rete handig om te gebruiken, maar niet je als je met met classes en meer dan 1 object ga werken.
En dus in strijd met alle regels betreffende goed programmeren in C++ .. ..bedenk maar wat anders.
void foobar() { static uint32_t prevTime = 0 ; uint32_t currentTime = millis() ; if( currentTime > ( prevTime + interval ) ) { prevTime = currentTime ; // code 2 run }}
FireTimer msTimer;void setup(){ msTimer.begin(1000); // every 100ms}void loop() { if( msTimer.fire() ) { // code 2 run }}