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.
64 lines
1.4 KiB
64 lines
1.4 KiB
3 years ago
|
#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
|
||
|
}
|