Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27, 20, 4);
- #define DirL 9
- #define PwmL 8
- #define DirR 11
- #define PwmR 10
- #define s0 32
- #define s1 34
- #define s2 36
- #define s3 38
- #define out 2
- #define ls0 40
- #define ls1 42
- #define ls2 44
- #define ls3 46
- #define lout 3
- bool calibrated = false;
- bool lineFollowing = false;
- bool calibrateRight = false;
- bool Mode = false;
- bool Mode1 = false;
- bool Mode2 = false;
- int GR = 0;
- int GG = 0;
- int GB = 0;
- int red = 0;
- int green = 0;
- int blue = 0;
- int lred = 0;
- int lgreen = 0;
- int lblue = 0;
- int colorValue = 60;
- int colorInterValue = 65;
- int colorValue2 = 40;
- int colorInterValue2 = 40;
- int inPin = 50;
- int Speed = 0;
- int Direction;
- int obs = 0;
- int state = HIGH;
- int reading;
- int previous = LOW;
- long ttime = 0;
- long debounce = 200;
- void setup() {
- delay(1000);
- pinMode(inPin, INPUT);
- pinMode(55, INPUT);
- pinMode(53, INPUT);
- pinMode(52 , INPUT);
- pinMode(22, INPUT);
- pinMode(24, INPUT);
- pinMode(26, INPUT);
- pinMode(23, INPUT);
- pinMode(25, INPUT);
- pinMode(DirL, OUTPUT);
- pinMode(PwmL, OUTPUT);
- pinMode(DirR, OUTPUT);
- pinMode(PwmR, OUTPUT);
- pinMode(s0, OUTPUT);
- pinMode(s1, OUTPUT);
- pinMode(s2, OUTPUT);
- pinMode(s3, OUTPUT);
- pinMode(out, INPUT);
- digitalWrite(s0, LOW);
- digitalWrite(s1, HIGH);
- pinMode(ls0, OUTPUT);
- pinMode(ls1, OUTPUT);
- pinMode(ls2, OUTPUT);
- pinMode(ls3, OUTPUT);
- pinMode(lout, INPUT);
- digitalWrite(ls0, LOW);
- digitalWrite(ls1, HIGH);
- pinMode(52, INPUT);
- Serial.begin (9600);
- lcd.init();
- lcd.backlight();
- lcd.print("EL line da bt3na");
- lcd.setCursor(0, 1);
- lcd.print("we next da dl3na");
- }
- void loop() {
- while (calibrated == false) { colorCalibrate();
- }
- if (digitalRead(52) == HIGH) {
- lineFollowing = true;
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("Linefolwing");
- delay(500);
- lcd.clear();
- lcd.print("EL line da bt3na");
- lcd.setCursor(0, 1);
- lcd.print("we next da dl3na");
- }
- while (lineFollowing == true) {
- // LimitCheck();
- int SL = digitalRead(22);
- int SCL = digitalRead(24);
- int SC = digitalRead(26);
- int SCR = digitalRead(23);
- int SR = digitalRead(25);
- ///////////////////////Forward///////////////////////////////
- if ((SL == 0 && SCL == 0 && SC == 1 && SCR == 0 && SR == 0) || (SL == 0 && SCL == 0 && SC == 0 && SCR == 0 && SR == 0) || (SL == 0 && SCL == 1 && SC == 1 && SCR == 1 && SR == 0) || (SL == 0 && SCL == 1 && SC == 1 && SCR == 1 && SR == 0)) {
- // checkForObstacle();
- Forward();
- }
- ///////////////////////Turn Left/////////////////////////////
- else if (SL == 1 && SCL == 1 && SC == 1 && SCR == 0 && SR == 0) {
- colorRead();
- if (red >= GR - colorValue2 && red <= GR + colorValue2 && green >= GG - colorValue2 && green <= GG + colorValue2 && blue >= GB - colorValue2 && blue <= GB + colorValue2)
- {
- colorCheck2();
- } else
- {
- Left();
- }
- }
- ///////////////////////Turn Right/////////////////////////////
- else if (SL == 0 && SCL == 0 && SC == 1 && SCR == 1 && SR == 1) {
- colorRead();
- Right();
- if (lred >= GR - colorValue2 && lred <= GR + colorValue2 && lgreen >= GG - colorValue2 && lgreen <= GG + colorValue2 && lblue >= GB - colorValue2 && lblue <= GB + colorValue2)
- {
- colorCheck2();
- } else {
- Right();
- }
- }
- ///////////////////////Turn Left/////////////////////////////
- else if ((SL == 0 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 0 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 1 && SR == 0) ) {
- Left();
- }
- ///////////////////////Turn Right/////////////////////////////
- else if ((SL == 0 && SCL == 0 && SCR == 1 && SR == 0) || (SL == 0 && SCL == 0 && SCR == 1 && SR == 1) || (SL == 0 && SCL == 0 && SCR == 0 && SR == 1) || (SL == 0 && SCL == 1 && SCR == 1 && SR == 1) ) {
- Right();
- }
- else if ((SL == 1 && SCL == 1 && SC == 1 && SCR == 1 && SR == 1)) {
- lcd.clear();
- lcd.print("Intersection");
- Stop();
- delay(500);
- colorRead();
- colorCheck();
- }
- }
- }
- void Forward() {
- digitalWrite(DirL, LOW);
- analogWrite(PwmL, 50);
- digitalWrite(DirR, LOW);
- analogWrite(PwmR, 50);
- Serial.println("Forward");
- }
- void Backward() {
- digitalWrite(DirL, HIGH);
- analogWrite(PwmL, 40);
- digitalWrite(DirR, HIGH);
- analogWrite(PwmR, 40);
- Serial.println("Forward");
- }
- void Right() {
- digitalWrite(DirL, LOW);
- analogWrite(PwmL, 60);
- digitalWrite(DirR, HIGH);
- analogWrite(PwmR, 60);
- Serial.println("Right");
- }
- void Left() {
- digitalWrite(DirL, HIGH);
- analogWrite(PwmL, 60);
- digitalWrite(DirR, LOW);
- analogWrite(PwmR, 60);
- Serial.println("Left");
- }
- void Stop() {
- digitalWrite(DirL, LOW);
- analogWrite(PwmL, 0);
- digitalWrite(DirR, LOW);
- analogWrite(PwmR, 0);
- Serial.println("Stop");
- }
- void colorRead()
- {
- digitalWrite(s2, LOW);
- digitalWrite(s3, LOW);
- red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
- digitalWrite(s3, HIGH);
- blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
- digitalWrite(s2, HIGH);
- green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
- digitalWrite(ls2, LOW);
- digitalWrite(ls3, LOW);
- lred = pulseIn(lout, digitalRead(lout) == HIGH ? LOW : HIGH);
- digitalWrite(ls3, HIGH);
- lblue = pulseIn(lout, digitalRead(lout) == HIGH ? LOW : HIGH);
- digitalWrite(ls2, HIGH);
- lgreen = pulseIn(lout, digitalRead(lout) == HIGH ? LOW : HIGH);
- lred = lred - 20;
- lblue = lblue - 20;
- lgreen = lgreen - 20;
- }
- void colorCalibrate()
- {
- while (Mode == false) {
- reading = digitalRead(inPin);
- if (reading == HIGH && previous == LOW && millis() - ttime > debounce) {
- if (state == HIGH)
- state = LOW;
- else
- state = HIGH;
- ttime = millis();
- }
- while (state == 0 && reading == HIGH) {
- lcd.clear();
- lcd.print("Calibtrate on");
- lcd.setCursor(0, 1);
- lcd.print(">> LEFT SESNOR");
- Mode1 = true;
- Serial.print(Mode1);
- break;
- }
- while (state == 1 && reading == HIGH ) {
- lcd.clear();
- lcd.print("Calibtrate on");
- lcd.setCursor(0, 1);
- lcd.print(">> RIGHT SENSOR");
- Mode1 = false;
- Serial.print(Mode1);
- break;
- }
- previous = reading;
- if (digitalRead(52) == HIGH) {
- Mode = true;
- break;
- }
- }
- int SL = digitalRead(22);
- int SCL = digitalRead(24);
- int SC = digitalRead(26);
- int SCR = digitalRead(23);
- int SR = digitalRead(25);
- if ((SL == 0 && SCL == 0 && SC == 1 && SCR == 0 && SR == 0) || (SL == 0 && SCL == 0 && SC == 0 && SCR == 0 && SR == 0) || (SL == 0 && SCL == 1 && SC == 1 && SCR == 1 && SR == 0) || (SL == 0 && SCL == 1 && SC == 1 && SCR == 1 && SR == 0)) {
- Forward();
- }
- else if ((SL == 0 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 0 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 1 && SR == 0) ) {
- Left();
- }
- ///////////////////////Turn Right/////////////////////////////
- else if ((SL == 0 && SCL == 0 && SCR == 1 && SR == 0) || (SL == 0 && SCL == 0 && SCR == 1 && SR == 1) || (SL == 0 && SCL == 0 && SCR == 0 && SR == 1) || (SL == 0 && SCL == 1 && SCR == 1 && SR == 1) ) {
- Right();
- }
- else if ((SL == 0 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 0 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 1 && SR == 0) ) {
- Left();
- }
- ///////////////////////Turn Right/////////////////////////////
- else if ((SL == 0 && SCL == 0 && SCR == 1 && SR == 0) || (SL == 0 && SCL == 0 && SCR == 1 && SR == 1) || (SL == 0 && SCL == 0 && SCR == 0 && SR == 1) || (SL == 0 && SCL == 1 && SCR == 1 && SR == 1) ) {
- Right();
- }
- else {
- digitalWrite(DirL, LOW);
- analogWrite(PwmL, 0);
- digitalWrite(DirR, LOW);
- analogWrite(PwmR, 0);
- }
- if (SL == 1 && SCL == 1 && SC == 1 && SCR == 1 && SR == 1) {
- Stop();
- delay(200);
- colorRead();
- if (Mode1 == true) {
- GR = red;
- GG = green;
- GB = blue;
- lcd.clear();
- lcd.print("Calibrated on left");
- lcd.setCursor(0, 1);
- int Cvalue = (GR + GG + GB) / 3;
- lcd.print("Cvalue= ");
- lcd.print(Cvalue);
- delay(4000);
- lcd.clear();
- lcd.print("EL line da bt3na");
- lcd.setCursor(0, 1);
- lcd.print("we next da dl3na");
- calibrated = true;
- }
- else if (Mode1 == false) {
- GR = lred;
- GG = lgreen;
- GB = lblue;
- lcd.clear();
- lcd.print("Calibrated on right");
- lcd.setCursor(0, 1);
- int Cvalue = (GR + GG + GB) / 3;
- lcd.print("Cvalue= ");
- lcd.print(Cvalue);
- delay(4000);
- lcd.clear();
- lcd.print("EL line da bt3na");
- lcd.setCursor(0, 1);
- lcd.print("we next da dl3na");
- calibrated = true;
- }
- }
- else {
- lcd.clear();
- lcd.print("Not Calibrated");
- calibrated = false;
- }
- }
- void colorCheck() {
- for (int i = 0; i <= 10 ; i++ ) {
- colorRead();
- lcd.clear();
- lcd.print(i);
- if ((lred >= GR - colorInterValue && lred <= GR + colorInterValue && lgreen >= GG - colorInterValue && lgreen <= GG + colorInterValue && lblue >= GB - colorInterValue && lblue <= GB + colorInterValue && red >= GR - colorInterValue && red <= GR + colorInterValue && green >= GG - colorInterValue && green <= GG + colorInterValue && blue >= GB - colorInterValue && blue <= GB + colorInterValue)) {
- lcd.clear();
- lcd.print("Turn 180 Right");
- Right();
- delay(1300);
- break;
- }
- else if (red >= GR - colorValue && red <= GR + colorValue && green >= GG - colorValue && green <= GG + colorValue && blue >= GB - colorValue && blue <= GB + colorValue) {
- lcd.clear();
- lcd.println("Green Left");
- Left();
- delay(600);
- break;
- }
- else if (lred >= GR - colorValue && lred <= GR + colorValue && lgreen >= GG - colorValue && lgreen <= GG + colorValue && lblue >= GB - colorValue && lblue <= GB + colorValue) {
- lcd.clear();
- lcd.println("Green Right");
- Right();
- delay(600);
- break;
- }
- delay(100);
- }
- Forward();
- delay(300);
- }
- void colorCheck2() {
- for (int i = 0; i <= 10 ; i++ ) {
- colorRead();
- lcd.clear();
- lcd.print(i);
- int SL = digitalRead(22);
- int SCL = digitalRead(24);
- int SC = digitalRead(26);
- int SCR = digitalRead(28);
- int SR = digitalRead(30);
- if ((lred >= GR - colorInterValue2 && lred <= GR + colorInterValue2 && lgreen >= GG - colorInterValue2 && lgreen <= GG + colorInterValue2 && lblue >= GB - colorInterValue2 && lblue <= GB + colorInterValue2 && red >= GR - colorInterValue2 && red <= GR + colorInterValue2 && green >= GG - colorInterValue2 && green <= GG + colorInterValue2 && blue >= GB - colorInterValue2 && blue <= GB + colorInterValue2)) {
- if ((SL == 1 && SCL == 1 && SC == 1 && SCR == 1 && SR == 1)) {
- break;
- }
- lcd.clear();
- lcd.print("Turn 180 Right");
- Right();
- delay(1500);
- break;
- }
- else if (red >= GR - colorValue2 && red <= GR + colorValue2 && green >= GG - colorValue2 && green <= GG + colorValue2 && blue >= GB - colorValue2 && blue <= GB + colorValue2) {
- if ((SL == 1 && SCL == 1 && SC == 1 && SCR == 1 && SR == 1)) {
- break;
- }
- lcd.clear();
- lcd.println("Green Left");
- Forward();
- delay(100);
- Left();
- delay(600);
- Forward();
- delay(100);
- break;
- }
- else if (lred >= GR - colorValue2 && lred <= GR + colorValue2 && lgreen >= GG - colorValue2 && lgreen <= GG + colorValue2 && lblue >= GB - colorValue2 && lblue <= GB + colorValue2) {
- if ((SL == 1 && SCL == 1 && SC == 1 && SCR == 1 && SR == 1)) {
- break;
- }
- lcd.clear();
- lcd.println("Green Right");
- Forward();
- delay(100);
- Right();
- delay(600);
- Forward();
- delay(200);
- break;
- }
- if ((SL == 1 && SCL == 1 && SC == 1 && SCR == 1 && SR == 1)) {
- break;
- }
- delay(100);
- }
- int SL = digitalRead(22);
- int SCL = digitalRead(24);
- int SC = digitalRead(26);
- int SCR = digitalRead(28);
- int SR = digitalRead(30);
- if ((SL == 0 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 0 && SCR == 0 && SR == 0) || (SL == 1 && SCL == 1 && SCR == 1 && SR == 0) ) {
- Left();
- }
- else if ((SL == 0 && SCL == 0 && SCR == 1 && SR == 0) || (SL == 0 && SCL == 0 && SCR == 1 && SR == 1) || (SL == 0 && SCL == 0 && SCR == 0 && SR == 1) || (SL == 0 && SCL == 1 && SCR == 1 && SR == 1) ) {
- Right();
- }
- }
- void LimitCheck() {
- if(digitalRead(53) == HIGH){
- Left();
- delay(1000);
- Forward();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement