//Seguidor de linea y Evasor de Obstáculos  int motA0=10; // Pines para control de motores int motA1=11; int motB0=9; int motB1=8; int sensorleft = 5; int sensorcenter = 6; int sensorright = 7; int echo=2;//Sensor de obstaculos int triger=3; int l1 = 1; int l2 = 1; int l3 = 1; int f1 = 0; int f2 = 0; int f3 = 0; int vel = 100; void setup() { pinMode(motA0, OUTPUT); pinMode(motA1, OUTPUT); pinMode(motB0, OUTPUT); pinMode(motB1, OUTPUT); digitalWrite(motA0, LOW); digitalWrite(motA1, LOW); digitalWrite(motB0, LOW); digitalWrite(motB1, LOW); pinMode(sensorleft, INPUT); pinMode(sensorcenter, INPUT); pinMode(sensorright, INPUT); pinMode(echo,INPUT); pinMode(triger,OUTPUT); } void loop(){ //Linea Blanca l1 = digitalRead(sensorleft); l2 = digitalRead(sensorcenter); l3 = digitalRead(sensorright); ///////////////// if (l1 == 1 && l2 == 1 && l3 == 1) //Feedback cuando todos los sensores estan en negro { l1 = f1; l2 = f2; l3 = f3; } ///////////////// else if(l1==1 && l2==1 && l3==0) { derechacerrada(); if(distancia() <= 15){ izquierdacerrada(); delay(500); alto(); delay(200); adelante(); delay(300); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(200); adelante(); delay(600); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(300); adelante(); if(l1==0 && l2==0 && l3==0){ adelante(); delay(200); izquierdacerrada(); } } } else if(l1==1 && l2==0 && l3==0) { derecha(); if(distancia() <= 15){ izquierdacerrada(); delay(500); alto(); delay(200); adelante(); delay(300); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(200); adelante(); delay(600); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(300); adelante(); if(l1==0 && l2==0 && l3==0){ adelante(); delay(200); izquierdacerrada(); } } } else if(l1==0 && l2==1 && l3==1) { izquierdacerrada(); if(distancia() <= 15){ izquierdacerrada(); delay(500); alto(); delay(200); adelante(); delay(300); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(200); adelante(); delay(600); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(300); adelante(); if(l1==0 && l2==0 && l3==0){ adelante(); delay(200); izquierdacerrada(); } } } else if(l1==0 && l2==0 && l3==1) { izquierda(); if(distancia() <= 15){ izquierdacerrada(); delay(500); alto(); delay(200); adelante(); delay(300); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(200); adelante(); delay(600); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(300); adelante(); if(l1==0 && l2==0 && l3==0){ adelante(); delay(200); izquierdacerrada(); } } } else if(l1==1 && l2==0 && l3==1) { adelante(); if(distancia() <= 15){ izquierdacerrada(); delay(500); alto(); delay(200); adelante(); delay(300); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(200); adelante(); delay(600); alto(); delay(200); derechacerrada(); delay(500); alto(); delay(300); adelante(); if(l1==0 && l2==0 && l3==0){ adelante(); delay(200); izquierdacerrada(); } } } /////////////////////////////////////////////////////////////////// f1 = l1; f2 = l2; f3 = l3; //memory variables //////////////////////////////////////////////////////////////////// } void adelante() { digitalWrite(motA0, HIGH); digitalWrite(motA1, LOW); digitalWrite(motB0, HIGH); digitalWrite(motB1, LOW); } void atras() { digitalWrite(motA0, LOW); digitalWrite(motA1, HIGH); digitalWrite(motB0, LOW); digitalWrite(motB1, HIGH); } void izquierda() //Giro a la izquierda { digitalWrite(motA0,HIGH); digitalWrite(motA1,LOW); digitalWrite(motB0,LOW); digitalWrite(motB1,LOW); } void izquierdacerrada() { digitalWrite(motA0,HIGH); digitalWrite(motA1,LOW); digitalWrite(motB0,LOW); digitalWrite(motB1,HIGH); } void derecha() //Giro a la derecha { digitalWrite(motA0,LOW); digitalWrite(motA1,LOW); digitalWrite(motB0,HIGH); digitalWrite(motB1,LOW); } void derechacerrada()//Giro a la derecha cerrada { digitalWrite(motA0,LOW); digitalWrite(motA1,HIGH); digitalWrite(motB0,HIGH); digitalWrite(motB1,LOW); } void alto() //Paro total { digitalWrite(motA0,HIGH); digitalWrite(motA1,HIGH); digitalWrite(motB0,HIGH); digitalWrite(motB1,HIGH); } long distancia() //Medicion de distancia { long t; long d; digitalWrite(triger, HIGH); delayMicroseconds(10); digitalWrite(triger, LOW); t = pulseIn(echo, HIGH); d = t/59; delay(10); return d; }