Загрузка данных


#include <Arduino.h>

int max_speed = 135;

int red_sens = 70;

int green_sens = 50;

int Calibrate_time = 3;

int lag_time = 1;

unsigned long last_time = 0;

int Calib_R_red = 0;

int Calib_G_red = 0;

int Calib_B_red = 0;

int Calib_R_green = 0;

int Calib_G_green = 0;

int Calib_B_green = 0;

int RED = 0;

int GREEN = 0;

int BLUE = 0;


void Init_MOTORS() {
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(11, INPUT);
}


void Init_LEDs() {
  pinMode(A1, OUTPUT);
  pinMode(A2, OUTPUT);
  digitalWrite(A1, HIGH);
  delay(0.5 * 1000);
  digitalWrite(A1, LOW);
  digitalWrite(A2, HIGH);
  delay(0.5 * 1000);
  digitalWrite(A2, LOW);
  delay(0.5 * 1000);
}


void Init_TCS3200() {
  pinMode(A4, OUTPUT);
  pinMode(A3, OUTPUT);
  pinMode(A0, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, INPUT);
  digitalWrite(A4, LOW);
  digitalWrite(A3, HIGH);
  digitalWrite(A1, HIGH);
  delay(Calibrate_time * 1000);
  Mesure_RED();
  Calib_R_green=RED;
  Mesure_GREEN();
  Calib_G_green=GREEN;
  Mesure_BLUE();
  Calib_B_green=BLUE;
  digitalWrite(A1, LOW);
  digitalWrite(A2, HIGH);
  delay(Calibrate_time * 1000);
  Mesure_RED();
  Calib_R_red=RED;
  Mesure_GREEN();
  Calib_G_red=GREEN;
  Mesure_BLUE();
  Calib_B_red=BLUE;
  digitalWrite(A2, LOW);
}


void Robot_TRACKING() {
  if (!digitalRead(8) && digitalRead(7)) {
    digitalWrite(2, LOW);
    digitalWrite(4, LOW);
    analogWrite(5, max_speed - 20);
    analogWrite(6, max_speed - 20);
  }
  if (digitalRead(8) && digitalRead(7)) {
    digitalWrite(2, LOW);
    digitalWrite(4, HIGH);
    analogWrite(5, max_speed);
    analogWrite(6, 255 - max_speed);
  }
  if (digitalRead(8) && !digitalRead(7)) {
    digitalWrite(2, LOW);
    digitalWrite(4, HIGH);
    analogWrite(5, max_speed);
    analogWrite(6, 255 - max_speed);
  }
  if (!digitalRead(8) && !digitalRead(7)) {
    digitalWrite(2, HIGH);
    digitalWrite(4, LOW);
    analogWrite(5, 255 - max_speed);
    analogWrite(6, max_speed);
  }
}


void Blink_BLUE() {
  for (int index = 0; index < 5; index++) {
    digitalWrite(A1, HIGH);
    delay(0.2 * 1000);
    digitalWrite(A1, LOW);
    delay(0.2 * 1000);
  }
}


void Blink_RED() {
  for (int index = 0; index < 5; index++) {
    digitalWrite(A2, HIGH);
    delay(0.2 * 1000);
    digitalWrite(A2, LOW);
    delay(0.2 * 1000);
  }
}


void Mesure_RED() {
  digitalWrite(A0, LOW);
  digitalWrite(10, LOW);
  RED=pulseIn(9, LOW);
}


void Robot_STOP() {
  digitalWrite(2, LOW);
  digitalWrite(4, LOW);
  analogWrite(5, 0);
  analogWrite(6, 0);
}


void Mesure_GREEN() {
  digitalWrite(A0, HIGH);
  digitalWrite(10, HIGH);
  GREEN=pulseIn(9, LOW);
}


void Mesure_BLUE() {
  digitalWrite(A0, LOW);
  digitalWrite(10, HIGH);
  BLUE=pulseIn(9, LOW);
}


void setup() {
  Init_MOTORS();
  Init_LEDs();
  Init_TCS3200();
}

void loop() {
  Mesure_RED();
  Mesure_GREEN();
  Mesure_BLUE();
  if (millis() - last_time > lag_time *1000) {
    if ((Calib_R_red - RED < red_sens && Calib_R_red - RED > -red_sens) && ((Calib_G_red - GREEN < red_sens && Calib_G_red - GREEN > -red_sens) && (Calib_B_red - BLUE < red_sens && Calib_B_red - BLUE > -red_sens))) {
      Robot_STOP();
      Blink_RED();
      last_time=millis();
    }
    else{
      if ((Calib_R_green - RED < green_sens && Calib_R_green - RED > -green_sens) && ((Calib_G_green - GREEN < green_sens && Calib_G_green - GREEN > -green_sens) && (Calib_B_green - BLUE < green_sens && Calib_B_green - BLUE > -green_sens))) {
        Robot_STOP();
        Blink_BLUE();
        last_time=millis();
      }
      else{
        Robot_TRACKING();
      }
    }
  }
  else{
    Robot_TRACKING();
  }
}