2
unknown
c_cpp
9 months ago
5.3 kB
11
Indexable
bool camDebugState = false;
bool m2SpeedLimit = true;
// LED pins
#define LED_PIN_1 3 //RED
#define LED_PIN_2 8 //GREEN
#define LED_PIN_3 9 //BLUE
#define LEDC_RED 0
#define LEDC_BLUE 1
#define LEDC_GREEN 2
#define LEDC_TIMER_8_BIT 8
#define LEDC_BASE_FREQ 5000 // use 5000 Hz as a LEDC base frequency
void initLED() {
// LED SETUP PWM
ledcAttachChannel(LED_PIN_1, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT, LEDC_RED);
ledcAttachChannel(LED_PIN_2, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT, LEDC_BLUE);
ledcAttachChannel(LED_PIN_3, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT, LEDC_GREEN);
}
//Запускаем светодиоды со значениями R,G,B
void LED_Control(int R, int G, int B) {
ledcWriteChannel(LEDC_RED, R);
ledcWriteChannel(LEDC_BLUE, G);
ledcWriteChannel(LEDC_GREEN, B);
}
/*
//Запускаем светоидоды с референсными значениями
void LED_Control(bool red, bool green, bool blue) {
ledcWriteChannel(LEDC_RED, 0);
ledcWriteChannel(LEDC_GREEN, 0);
ledcWriteChannel(LEDC_BLUE, 0);
if (red) ledcWriteChannel(LEDC_RED, R_value);
if (green) ledcWriteChannel(LEDC_BLUE, G_value);
if (blue) ledcWriteChannel(LEDC_GREEN, B_value);
}*/
////////////////////////////PERF LASER SENSOR////////////////////////////////////////////////////////////////////
unsigned long sensorTime = 0;
int sensorMinVal = 250;
unsigned long sensorLastDebugTime = 0;
const unsigned long sensorLastDebugInterval = 500; // Интервал вывода отладочной информации (мс)
volatile unsigned long sensorlastTime = 0;
void IRAM_ATTR sensorIsr() {
unsigned long currentTime = millis();
if (currentTime - sensorlastTime > sensorInterval) {
sensorStopState = true;
sensorlastTime = currentTime;
}
}
void initLaser() {
pinMode(LASERSENSOR_PIN, INPUT);
//attachInterrupt(digitalPinToInterrupt(LASERSENSOR_PIN), sensorIsr, FALLING); //Attach INTRP on Sensor Pin
}
void sensorCallInterrupt() {
sensorStopState = false;
motorsFilmTorqueMoveSpoolD();
move = false;
ledCamState = true;
if(stateDebug) {
unsigned long currentTime = millis();
Serial.print("STOP: ");
Serial.print(currentTime);
Serial.print(" / Move Time: ");
Serial.println(currentTime - stopLastTime);
}
}
void sensorCall() {
unsigned long currentTime = millis();
//Проверяем перфорацию с задержкой после старта движения
if (currentTime - stopLastTime >= moveInterval && move) {
unsigned long currentSensorTime = millis();
sensorlastTime = currentSensorTime;
float sensor_value = analogRead(LASERSENSOR_PIN);
if (sensor_value < sensorMinVal) {
//motorsFilmTorqueMoveSimple();
motorsFilmTorqueMoveSpoolD();
//Защита от слишком быстрого перемещения пленки
long moveTime = currentTime - stopLastTime;
if(frameCount > 3 && m2SpeedLimit) {
if(moveTime > moveInterval + 10) {
move = false;
ledCamState = true;
}
else {
scannerState = 0;
Serial.println("........................................");
Serial.println("MOVE TIME IS TO SHORT!!! / STOP SCANNING");
Serial.println("........................................");
}
}
else {move = false; ledCamState = true;}
if(stateDebug) {
Serial.println("STOP: " + String(currentTime) + " / Move Time: " + String(moveTime) + " / Sen Val: " + String(sensor_value,0));
}
}
}
}
void sensorDebug() {
unsigned long currentTime = millis();
if (currentTime - sensorLastDebugTime >= sensorLastDebugInterval) {
sensorLastDebugTime = currentTime;
float sensor_value = analogRead(LASERSENSOR_PIN);
Serial.println(sensor_value);
}
}
/////////////////////////////////CAMERA//////////////////////////////////////////////////////////////////
#define CAMTRIGGER_PIN 21
unsigned long camTriggerLastTime = 0;
unsigned long camTriggerInterval = 10; //Задержка сигнала триггера (ON/OFF)
bool camTriggerState = true; //Режим сигнала триггера камеры (ON/OFF)
void initCam() {
pinMode(CAMTRIGGER_PIN, OUTPUT);
digitalWrite(CAMTRIGGER_PIN, LOW);
}
//Триггерим камеру через delay
void camTrigger() {
digitalWrite(CAMTRIGGER_PIN, HIGH);
delay(camTriggerInterval);
digitalWrite(CAMTRIGGER_PIN, LOW);
}
void camTriggerON() {
unsigned long currentTime = millis();
camTriggerLastTime = currentTime;
camTriggerState = true;
digitalWrite(CAMTRIGGER_PIN, HIGH);
if(camDebugState) Serial.println("Cam Signal On: " + String(currentTime));
}
//Выключаем ПИН сигнала камеры если прошло время camTriggerInterval
void camTriggerOffCall() {
unsigned long currentTime = millis();
if(camTriggerState) {
if (currentTime - camTriggerLastTime >= camTriggerInterval) {
digitalWrite(CAMTRIGGER_PIN, LOW);
camTriggerState = false;
if(camDebugState) Serial.println("Cam Signal OFF: " + String(currentTime));
}
}
}
Editor is loading...
Leave a Comment