//Girasol: Seguir luz v1.0
const byte pwm=A0, led=A1;
int tiempo=1000;
int posicion = 0;
void setup()
{
pinMode(pwm, OUTPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
Giro(0);
}
void loop()
{
int left = analogRead(A2);
int right = analogRead(A3);
int Lgrados = map(left, 70, 1023, 0, 180); //Cambiar rango de 70 - 1023 a 0 - 180
int Rgrados = map(right, 0, 980, 0, 180);
Serial.print(Lgrados); //Para monitorear
Serial.print('-');
Serial.println(Rgrados);
Serial.println(posicion);
if(Lgrados == Rgrados) //Al ser iguales mantenerse en misma posicion
{
posicion = constrain(posicion, 0, 180); //Limita valor maximo y minimo que puede tener "posicion"
Giro(posicion);
//delay(10);
}
if(Lgrados > Rgrados) //Al ser diferentes girar un poco en un sentido
{
posicion -= 5;
posicion = constrain(posicion, 0, 180);
Giro(posicion);
//delay(10);
}
if(Lgrados < Rgrados) //O en el otro sentido
{
posicion += 5;
posicion = constrain(posicion, 0, 180);
Giro(posicion);
//delay(10);
}
}
void parpadeo()
{
digitalWrite(led,1);
delay(tiempo);
digitalWrite(led,0);
delay(tiempo);
}
void Giro(int grado)
{
int pulseWidth=map(grado, 0, 180, 540, 2400);
for(byte i=0; i<42; i++)
{
digitalWrite(pwm, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(pwm, LOW);
delayMicroseconds(20000-pulseWidth);
}
}