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();
	}
}
Beispiel #2
0
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
    }
}