void readTemperaturesFromThermocouples(float& temperature1, float& temperature2) { temperature1 = thermocouple1.readCelsius(); temperature2 = thermocouple2.readCelsius(); if (ISNAN(temperature1)) return writeFailure("Thermocouple 1 reading is NAN."); else if (ISNAN(temperature2)) return writeFailure("Thermocouple 2 reading is NAN."); }
void JUnitTestOutput::writeTestCases() { JUnitTestCaseResultNode* cur = impl_->results_.head_; while (cur) { SimpleString buf = StringFromFormat( "<testcase classname=\"%s%s%s\" name=\"%s\" assertions=\"%d\" time=\"%d.%03d\" file=\"%s\" line=\"%d\">\n", impl_->package_.asCharString(), impl_->package_.isEmpty() == true ? "" : ".", impl_->results_.group_.asCharString(), cur->name_.asCharString(), cur->checkCount_ - impl_->results_.totalCheckCount_, (int) (cur->execTime_ / 1000), (int)(cur->execTime_ % 1000), cur->file_.asCharString(), cur->lineNumber_); writeToFile(buf.asCharString()); impl_->results_.totalCheckCount_ = cur->checkCount_; if (cur->failure_) { writeFailure(cur); } else if (cur->ignored_) { writeToFile("<skipped />\n"); } writeToFile("</testcase>\n"); cur = cur->next_; } }
int main() { setup(); uint32_t counter = 0; float temperature1 = 0.0f, temperature2 = 0.0f; readTemperaturesFromThermocouples(temperature1, temperature2); currentScript.readFromSerial(); if (ISNAN(temperature1)) writeFailure("Thermocouple 1 reading is NAN."); if (ISNAN(temperature2)) writeFailure("Thermocouple 2 reading is NAN."); while (true) { if (!currentScript.completed()) { readTemperaturesFromThermocouples(temperature1, temperature2); // let stir plate run analogWrite(STIR_PLATE, STIR_PLATE_PWM); counter = 0; while (counter < STIR_PLATE_START_MS - HEATER_PERIOD_MS && !currentScript.completed()) { counter += step(temperature1, temperature2); } _delay_ms(STIR_PLATE_START_MS - counter); // wait for stir plate to stop analogWrite(STIR_PLATE, 0); counter = 0; while (counter < STIR_PLATE_STOP_MS - HEATER_PERIOD_MS && !currentScript.completed()) { counter += step(temperature1, temperature2); } _delay_ms(STIR_PLATE_STOP_MS - counter); } } }
void runHeaterForDutyCycleMillis(uint32_t dutyCycleMillis) { if (dutyCycleMillis <= HEATER_PERIOD_MS) { if (dutyCycleMillis > 0) { digitalWrite(RELAY_240V, HIGH); _delay_ms(dutyCycleMillis); } digitalWrite(RELAY_240V, LOW); _delay_ms(HEATER_PERIOD_MS - dutyCycleMillis); } else { writeFailure("Duty cycle must be <= 1000"); } }
void JUnitTestOutput::writeTestCases() { JUnitTestCaseResultNode* cur = impl_->results_.head_; while (cur) { SimpleString buf = StringFromFormat( "<testcase classname=\"%s\" name=\"%s\" time=\"%d.%03d\">\n", impl_->results_.group_.asCharString(), cur->name_.asCharString(), (int) (cur->execTime_ / 1000), (int)(cur->execTime_ % 1000)); writeToFile(buf.asCharString()); if (cur->failure_) { writeFailure(cur); } writeToFile("</testcase>\n"); cur = cur->next_; } }
void JUnitTestOutput::writeTestCases() { const int buf_size = 1024; static char buf[buf_size]; JUnitTestCaseResultNode* cur = results_.head_; while (cur) { cpputest_snprintf(buf, buf_size, "<testcase classname=\"%s\" name=\"%s\" time=\"%d.0\">\n", results_.group_.asCharString(), cur->name_.asCharString(), (int) cur->execTime_); writeToFile(buf); if (cur->failure_) { writeFailure(cur); } cpputest_snprintf(buf, buf_size, "</testcase>\n"); writeToFile(buf); cur = cur->next_; } }
float dutyCycleBasedOnProportionalControl(float currentTemperature) { static PID pid; static float temperatureTarget = 0.0f; float previousTemperatureTarget = temperatureTarget; temperatureTarget = currentScript.currentTemperatureTarget(); if (ISNAN(temperatureTarget)) { writeFailure("Temperature setpoint is NAN. Are thermocouples connected?"); return 0.0f; } if (previousTemperatureTarget != temperatureTarget) { PID newPID(temperatureTarget, P_GAIN, 0, 0, PID_OUTPUT_LIMIT); pid = newPID; } return pid.nextControlOutput(currentTemperature, 0); }