  */
 FIR<double, 15> filt_2nd_stage;
 
+/* The following values define the temperature profile. It consits of
+ * timestamps and temperatures at those timestamps. Between the
+ * timestamps, the temperature is interpolated linearly.
+ */
+const unsigned int tprofile_n = 5;
+const unsigned long tprofile_times[] = {30, 180, 220, 260, 300};
+const float tprofile_temps[] =         {80, 200, 235, 235,   0};
+reflow_profile tprofile(tprofile_n, tprofile_times, tprofile_temps);
+
+
 void plot_callback(void) {
   // plotting thread
   plotter.Plot();

        0.09354893,  0.09836316,  0.1       ,  0.09836316,  0.09354893,
        0.08583937,  0.07568267,  0.06366198,  0.05045512,  0.0367883 };
  filt_2nd_stage.setFilterCoeffs(fir_coeffs);
}

void loop() {


void control_callback(void) {
  // control thread
  PID_setpoint = tprofile.getval();
  PID_in = measure_temperature();

  control_PID.Compute();
