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


void setup() {
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);
}
void go(int L, int R) {
  if(L>0) digitalWrite(4,0); else digitalWrite(4,1);
  if(R>0) digitalWrite(7,0); else digitalWrite(7,1);
  analogWrite(5, abs(L)); analogWrite(6, abs(R));
}

float I=0;
int Mo = 100;
float Kp = 0.1;
float Ki = 0;
float Kd = 2;
int porog = 500;

void left() {
  go(118, 100);
  delay(150);
  go(-90,90);
  while(analogRead(A0) > porog) go(-90,90);
  while(analogRead(A1) > porog) go(-90,90);
  go(-90,90);
  delay(50);
  go(0,0);
  delay(50);
}

void pid() {
  int d1 = analogRead(A0);
  int d2 = analogRead(A1);
  int Ep = d1 - d2;
  I = I*0.7 + Ep*0.3;
  float D = Ep - I;
  float U = Ep*Kp + I*Ki + D*Kd;
  int M1 = (Mo + U)*1.18;
  M1=constrain(M1,-255,255);
  int M2 = Mo - U;
  M2=constrain(M2,-255,255);
  go(M1,M2);
}

void loop() {
  if(analogRead(A0) < porog and analogRead(A1) < porog) left(); else pid();
}