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.");
}
Example #2
0
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_;
	}
}
Example #6
0
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);
}