Go Down

Topic: ayuda seguidor de linea (Read 442 times) previous topic - next topic

AFZD1997

Tengo dificulta programando un seguidor de linea usando arduino  UNO el programa la parte que funciona es cuando todos los sensores están en "0"  o en "1" y se demora en racionar.
si me pueden ayudar que es lo que estoy  fallando seria genial.
Este es el código del programa:

int cny1 = 7; //cny derecha exterior
int cny2 = 8; //cny derecha interior
int cny3 = 9; // cny izquierda interior
int cny4 = 12; //cny izquierda exterior

int Vcny1 = 0;
int Vcny2 = 0;
int Vcny3 = 0;
int Vcny4 = 0;

int izqA = 5;
int izqB = 6;
int derA = 10;
int derB = 11;
int vel = 225; // Velocidad de los motores (0-255)

void setup() {
Serial.begin(9200);
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);

pinMode(cny1, INPUT);
pinMode(cny2, INPUT);
pinMode(cny3, INPUT);
pinMode(cny4, INPUT);
}

void loop() {

if((digitalRead(cny4)==LOW)&&(digitalRead(cny3)==HIGH)&&(digitalRead(cny2)==HIGH)&&(digitalRead(cny1)==LOW)){

analogWrite(derB, 0); //avansa
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
if((digitalRead(cny4)==HIGH)&&(digitalRead(cny3)==HIGH)&&(digitalRead(cny2)==LOW)&&(digitalRead(cny1)==LOW)){

analogWrite(derB, 0); //izq
analogWrite(izqB, 0);
analogWrite(izqA, vel);
analogWrite(derA, 0);

}
else{
// der
analogWrite(derB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
analogWrite(izqB, 0); }


if((digitalRead(cny4)==HIGH)&&(digitalRead(cny3)==LOW)&&(digitalRead(cny2)==LOW)&&(digitalRead(cny1)==LOW)){
analogWrite(derB, 0); //izq
analogWrite(izqB, 0);
analogWrite(izqA, vel);
analogWrite(derA, 0);
}
else{
analogWrite(derB, 0); //der
analogWrite(izqA, 0);
analogWrite(derA, vel);
analogWrite(izqB, 0);
}


if ((digitalRead(cny4)==LOW)&&(digitalRead(cny3)==LOW)&&(digitalRead(cny2)==LOW)&&(digitalRead(cny1)==LOW))
{
// Reversa
analogWrite(derA, 0);
analogWrite(izqB, vel);
analogWrite(derB, vel);
analogWrite(izqA, 0);
}
else{
analogWrite(derA, 0);
analogWrite(izqB, 0);
analogWrite(derB, 0);
analogWrite(izqA, 0);
}

Vcny1 = digitalRead(cny1);
Vcny2 = digitalRead(cny2);
Vcny3 = digitalRead(cny3);
Vcny4 = digitalRead(cny4);

Serial.print("cny1 =");Serial.println(Vcny1);
delay(1000);
Serial.print("cny2 =");Serial.println(Vcny2);
delay(1000);
Serial.print("cny3 =");Serial.println(Vcny3);
delay(1000);
Serial.print("cny4 =");Serial.println(Vcny4);
delay(1000);

}

surbyte

#1
Apr 11, 2017, 08:47 pm Last Edit: Apr 11, 2017, 08:51 pm by surbyte
Demora en reaccionar por esto!! para que usas delay(1000) por cada impresion en el monitor serie?

Code: [Select]
Serial.print("cny1 =");Serial.println(Vcny1);
delay(1000);
Serial.print("cny2 =");Serial.println(Vcny2);
delay(1000);
Serial.print("cny3 =");Serial.println(Vcny3);
delay(1000);
Serial.print("cny4 =");Serial.println(Vcny4);
delay(1000);


Observa como pongo yo el código, te dejo a continuación como se hace.

Reemplaza esas lineas por estas



Code: [Select]
// define como global
unsigned long start


//en el loop
    if (millis()>start ) {
    Serial.print("cny1 =");Serial.println(Vcny1);
Serial.print("cny2 =");Serial.println(Vcny2);
Serial.print("cny3 =");Serial.println(Vcny3);
Serial.print("cny4 =");Serial.println(Vcny4);
    start = millis()+1000;
    }
Lo que tienes que hacer es :

Leer las Normas del foro.
Luego ve a More (abajo a la derecha), click, luego Modify y estas en modo EDICION.
Selecciona todo el código y click en </> arriba del emoticon  



Go Up