void loop() { if (cycleVoltageMode == true) { outputSystemMode(sk720Mode); #ifdef DEBUG debug("current state: "); printSystemMode(sk720Mode); #endif sk720Mode = getNextSystemState(sk720Mode); delay(CYCLE_MODE_DELAY_MS); } else { if (wakeup == true) { wakeup = false; const unsigned long now = micros(); if (pinChanged == true) { pinChanged = false; readLedStates(&systemLedState, now); } sk720ModeBuffer[currentSk720Mode] = inferSystemMode(&systemLedState, now); #ifdef DEBUG SK720Mode oldState = sk720Mode; #endif sk720Mode = getFilteredSk720Mode(sk720ModeBuffer, sk720Mode, sk720ModeBuffer[currentSk720Mode]); #ifdef DEBUG if (sk720Mode != oldState) { debug("time "); debuglnNum(now); debug("redLed "); printSingleLedMode(systemLedState.red.mode); debug("greenLed "); printSingleLedMode(systemLedState.green.mode); debug("newState "); printSystemMode(sk720ModeBuffer[currentSk720Mode]); debug("filteredState "); printSystemState(sk720Mode); debug("filterIndex "); debuglnNum(currentSk720Mode); printLedState(&systemLedState.red); printLedState(&systemLedState.green); debugln("---"); } #endif if (currentSk720Mode == STATE_BUFFER_SIZE - 1) { currentSk720Mode = 0; } else { currentSk720Mode++; } outputSystemMode(sk720Mode); } enterSleepMode(); } }
void MyWorld::simulate(float delta_t, float samplingTime, float endTime) { printSystemHeaders(); for (int i = 0; i < elements.size(); i++) { elements[i]->setInitialState(g, b); } for (double t = 0, nextStateTime = 0; t < endTime; t += delta_t) { if (t >= nextStateTime) { // decide if it is time to print state printSystemState(t); nextStateTime += samplingTime; } for (int i = 0; i < elements.size(); i++) { // for each element elements[i]->computeNextState(delta_t, g, b); // compute next state } for (int i = 0; i < elements.size(); i++) // for all elements elements[i]->updateState(); // update its state } }