#define Rpwm1 6 #define RDir1 7 #define RDir2 8 #define Lpwm1 11 #define LDir1 10 #define LDir2 9 #define ObjectSens 4 #define LQ1 A7 #define LQ2 A6 #define LQ3 A5 #define LQ4 A4 #define LQ5 A3 #define LQ6 A2 #define LQ7 A1 #define LQ8 A0 #define SW1 12 #define SW2 13 #define Led 13 float LeftBaseSpeed = 220; float RightBaseSpeed = 220; float Kp = 0.07; float Kd = 2; float Ki = 0.0001; int Q[8] = {LQ8, LQ7, LQ6, LQ5, LQ4, LQ3, LQ2, LQ1}; int SensMin[8]; int SensMax[8]; int SensVal[8]; int SensValX[8]; int FinalError = 0; int Error = 0; int ExtraSpeed = 0; int RightSpeed = 0; int LeftSpeed = 0; int Integral = 0; int Val = 0; unsigned int Position = 3500; byte LineOk = 0; byte WhiteLine = 1; void Blink() { for (int i = 0; i < 10; i++) { digitalWrite(Led, LOW); delay(180); digitalWrite(Led, HIGH); delay(180); } } void MotorsSpeed(int RightSpeed, int LeftSpeed) { if (RightSpeed <= 0) { RightSpeed = abs(RightSpeed); analogWrite(Rpwm1, RightSpeed); digitalWrite(RDir1, HIGH); digitalWrite(RDir2, LOW); } else { analogWrite(Rpwm1, RightSpeed); digitalWrite(RDir1, LOW); digitalWrite(RDir2, HIGH); } if (LeftSpeed <= 0) { LeftSpeed = abs(LeftSpeed); analogWrite(Lpwm1, LeftSpeed); digitalWrite(LDir1, HIGH); digitalWrite(LDir2, LOW); } else { analogWrite(Lpwm1, LeftSpeed); digitalWrite(LDir1, LOW); digitalWrite(LDir2, HIGH); } } int ReadSensor() { unsigned long Middle = 0; unsigned int Total = 0; LineOk = 0; for (int i = 0; i < 8; i++) { int Difference = SensMax[i] - SensMin[i]; long int Calculation = analogRead(Q[i]) - SensMin[i]; Calculation = Calculation * 1000 / Difference; SensVal[i] = constrain(Calculation, 0, 1000); SensValX[i] = WhiteLine ? 1000 - SensVal[i] : SensVal[i]; if (SensValX[i] > 250) LineOk = 1; if (SensValX[i] > 50) { Middle += SensValX[i] * i; Total += SensValX[i]; } } if (LineOk == 0) { if (Val < 3000) return 0; if (Val > 5000) return 7000; return 3500; } Val = Middle * 1000 / Total; return Val; } void parkEt() { MotorsSpeed(100, 100); delay(250); MotorsSpeed(0, 0); delay(4000); } void setup() { pinMode(Rpwm1, OUTPUT); pinMode(Lpwm1, OUTPUT); pinMode(RDir1, OUTPUT); pinMode(RDir2, OUTPUT); pinMode(LDir1, OUTPUT); pinMode(LDir2, OUTPUT); pinMode(LQ1, INPUT); pinMode(LQ2, INPUT); pinMode(LQ3, INPUT); pinMode(LQ4, INPUT); pinMode(LQ5, INPUT); pinMode(LQ6, INPUT); pinMode(LQ7, INPUT); pinMode(LQ8, INPUT); pinMode(ObjectSens, INPUT); pinMode(Led, OUTPUT); pinMode(SW1, INPUT); pinMode(SW2, INPUT); MotorsSpeed(0, 0); Serial.begin(9600); delay(2000); for (int i = 0; i < 8; i++) { SensMin[i] = 1024; SensMax[i] = 0; } for (int i = 0; i < 150; i++) { for (int i = 0; i < 8; i++) { int readVal = analogRead(Q[i]); SensMin[i] = min(SensMin[i], readVal); SensMax[i] = max(SensMax[i], readVal); delay(1); } } delay(700); Blink(); } bool oncekiHepsiBeyaz = false; int linePassed = 0; void loop() { bool hepsiBeyaz = true; bool hepsiSiyah = true; int beyazEsik = 900; // Beyaz için üst eşik değeri int siyahEsik = 150; // Siyah için alt eşik değeri for (int i = 0; i < 8; i++) { int sensorValue = analogRead(Q[i]); Serial.print(sensorValue); Serial.print(" "); if (sensorValue > beyazEsik) { hepsiBeyaz = false; // Eğer bir sensör değeri beyaz eşikten düşükse, hepsi beyaz değildir. } if (sensorValue < siyahEsik) { hepsiSiyah = false; // Eğer bir sensör değeri siyah eşikten yüksekse, hepsi siyah değildir. } } // Tüm sensörler önce beyazdı ve şimdi değilse, çizgi geçilmiş demektir if (oncekiHepsiBeyaz && !hepsiBeyaz) { linePassed++; Serial.print("Line passed: "); Serial.println(linePassed); } oncekiHepsiBeyaz = hepsiBeyaz; Serial.println(""); if(hepsiBeyaz){ Serial.println("Park etmek istiyorum"); //parkEt(); } if(hepsiSiyah){ Serial.println("solla"); } }