Sunteți pe pagina 1din 4

//En esta parte se declaran los pines del Arduino de los sensores y actuadores a utilizar int int int

int int int int int SensorDerecha = A1; SensorIzquierda = A2; SensorII = A3; SensorDD = A4; MotorDUP = 5; MotorDDOWN = 2; MotorIUP = 6; MotorIDOWN = 4;

//Se declaran las diversas variables de uso lgico dentro del cdigo int SensorIstate, SensorDstate, SensorDDstate,SensorIIstate; int contador=0; int y=0; int x=0; int z=0; int h=0; //En la funcin setup es donde se inician las variables como entrada o salida (inp ut, output) void setup() { //Serial.begin(9600); pinMode(SensorIzquierda, INPUT); pinMode(SensorDerecha, INPUT); pinMode(SensorDD, INPUT); pinMode(SensorII, INPUT);

pinMode pinMode pinMode pinMode }

(MotorDUP, OUTPUT); (MotorDDOWN, OUTPUT); (MotorIUP, OUTPUT); (MotorIDOWN, OUTPUT);

/*En esta funcin se establecen los valores de los motores en 0 para poder utiliza rlos en el futuro sin ocasionar conflictos*/ void reset(){ digitalWrite(MotorDUP,0); digitalWrite(MotorIUP,0); digitalWrite(MotorDDOWN,0); digitalWrite(MotorIDOWN,0); } /* Secuencia de giro a la derecha, primero manda a llamar a la funcin reset para inicializar los motores en 0 */ void giroDerecha(){ reset(); digitalWrite(MotorDUP,1); digitalWrite(MotorIUP,0); digitalWrite(MotorDDOWN,0); digitalWrite(MotorIDOWN,1);

} /* Secuencia de giro a la izquierda, primero manda a llamar a la funcin reset par a inicializar los motores en 0 */ void giroIzquierda(){ reset(); digitalWrite(MotorDUP,0); digitalWrite(MotorIUP,1); digitalWrite(MotorDDOWN,1); digitalWrite(MotorIDOWN,0); } /* Secuencia de giro hacia atras, primero manda a llamar a la funcin reset para i nicializar los motores en 0 */ void giroAtras(){ reset(); digitalWrite(MotorDUP,0); digitalWrite(MotorIUP,0); digitalWrite(MotorDDOWN,1); digitalWrite(MotorIDOWN,1); } // Proceso de lectura y escritura complejo void ReadWrite(){ //lectura de los sensores centrales SensorIstate = digitalRead(SensorIzquierda); SensorDstate = digitalRead(SensorDerecha); //lectura de los sensores laterales SensorDDstate = digitalRead(SensorDD); SensorIIstate = digitalRead(SensorII); /*Este delay estabiliza la lectura / actuacin con respecto a la distancia entre los sensores y los motores*/ delay(10);

/* Asignacin de variable para cambio de velocidad*/ if (SensorDDstate==1 && SensorIIstate==1){ z=1; } /*Si la condicin se cumple la variable contador incrementara al paso de una lnea y realizara una operacin para determinar si el conteo es par o impar*/ if (SensorDDstate==0 && SensorIIstate==0 && z==1){ contador+=1; h=pow(-1,contador); z=0; /*En base a la operacin anterior se asignan valores de velocidad para la escrit ura de los motores*/ } if (h > 0){

y=220; } if (h < 0){ y=255; } if (h ==0){ y=220; } /*En este punto se hace la escritura de los motores por pwm para poder modific ar su velocidad*/ analogWrite(MotorIUP,(SensorDstate*y)); analogWrite(MotorDUP,(SensorIstate*y)); // Serial.println(h); } /* Esta es la funcin principal del cdigo donde se mandan a llamar todas las funci ones antes definidas para el funcionamiento continuo del seguidor de lneas*/ void loop() { //inicio de funcin de lectura de sensores y escritura de motores ReadWrite(); //condicin de giro para la izquierda if (SensorDDstate==1){ x=1; } //condicin de giro para la derecha if (SensorIIstate==1){ x=2; } //secuencia de giro para la derecha if (SensorIstate==0 && SensorDstate==0 && x==1){ giroIzquierda(); delay(150); giroAtras(); delay(50); reset(); ReadWrite(); } //secuencia de giro para la izquierda if (SensorIstate==0 && SensorDstate==0 && x==2){ giroDerecha(); delay(150); giroAtras(); delay(50); reset(); ReadWrite(); } }

//Fin del cdigo

// By Felipe Woo

S-ar putea să vă placă și