You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.4 KiB

#pragma once
#include "LaserController.h"
#include "TeensyTimerTool.h"
class SystemController
{
public:
SystemController();
inline void begin();
inline void shoot();
inline void continousMode(bool on);
inline void setExposureDelay(unsigned delay);
protected:
TeensyTimerTool::PeriodicTimer mainTimer;
LaserController lCtrl1, lCtrl2;
unsigned exposureDelay = 300;
};
SystemController::SystemController()
: mainTimer(TeensyTimerTool::TCK) {} // construct the main 15Hz timer, we use a TCK here
void SystemController::begin()
{
constexpr unsigned repetitionRate = 15; // Hz
constexpr unsigned preTrig1_pin = 1;
constexpr unsigned trig1_pin = 2;
constexpr unsigned preTrig2_pin = 3;
constexpr unsigned trig2_pin = 4;
constexpr unsigned cam_pin = 5;
lCtrl1.begin(preTrig1_pin, trig1_pin, cam_pin);
lCtrl2.begin(preTrig2_pin, trig2_pin, cam_pin);
mainTimer.begin([this] { this->shoot(); }, 1E6 / repetitionRate, false); // attach callback but don't start yet
}
void SystemController::shoot()
{
elapsedMicros stopwatch = 0;
lCtrl1.shoot();
while (stopwatch < exposureDelay) { yield(); }
lCtrl2.shoot();
}
void SystemController::continousMode(bool on)
{
if (on)
{
mainTimer.start();
}
else
{
mainTimer.stop();
}
}
void SystemController::setExposureDelay(unsigned delay)
{
exposureDelay = max(100u, min(500u, delay)); // limit to 100-500 µs
}