2

 avatar
unknown
c_cpp
a month ago
5.3 kB
3
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