Skip to content

Instantly share code, notes, and snippets.

@arthurbenemann
Forked from anonymous/Seguidor de Linha
Last active August 29, 2015 14:02
Show Gist options
  • Select an option

  • Save arthurbenemann/95ed56c2a2ef7cee142d to your computer and use it in GitHub Desktop.

Select an option

Save arthurbenemann/95ed56c2a2ef7cee142d to your computer and use it in GitHub Desktop.
/* Primeiro Teste do Seguidor de Linha
João Pedro Scherer Cipriani
Equipe GaudérioBotz
COLÉGIO TÉCNICO INDUSTRIAL DE SANTA MARIA */
const int V_MAX = 255;
const int V_LENTA = 255;
// atribuição de pinos aos motores
int pinMotorEsq = 9;
int pinMotorDir = 5;
// atribuição de pinos aos sensores
int pinSensorEsq = A0;
int pinSensorDir = A1;
// atribuição de variáveis aos valores medidos e calculados
int leituraSensorEsq = 0;
int leituraSensorDir = 0;
int offsetSensores = 0;
int velocidadeMotorDir = 0;
int velocidadeMotorEsq = 0;
void setup() {
// definindo os pinos dos motores como saídas
pinMode(pinMotorDir, OUTPUT);
pinMode(pinMotorEsq, OUTPUT);
// iniciando a serial
Serial.begin(9600);
}
void loop() {
// leitura dos sensores
leituraSensorEsq = analogRead(pinSensorEsq);
leituraSensorDir = analogRead(pinSensorDir);
// comparação dos sensores
calculaOffset(offsetSensores, leituraSensorEsq, leituraSensorDir);
// definição das velocidades
if (leituraSensorDir > 200 || leituraSensorEsq > 200) { //Para evitar que ele ande em superfície branca
if (offsetSensores < 250) { // Para o caso de ambos os sensores estarem sobre a parte preta
velocidadeMotorDir = V_MAX;
velocidadeMotorEsq = V_MAX;
} else {
if (leituraSensorDir > 300) {
velocidadeMotorDir = V_MAX;
velocidadeMotorEsq = V_LENTA;
} else if (leituraSensorEsq > 300) {
velocidadeMotorEsq = V_MAX;
velocidadeMotorDir = V_LENTA;
}
}
} else if (leituraSensorDir < 200 && leituraSensorEsq < 200) {
velocidadeMotorEsq = 0;
velocidadeMotorDir = velocidadeMotorEsq;
};
imprimeValoresViaSerial(leituraSensorEsq, leituraSensorDir, offsetSensores);
// Teste normal
analogWrite(pinMotorDir, velocidadeMotorDir);
analogWrite(pinMotorEsq, velocidadeMotorEsq);
}
void calculaOffset(int* offsetSensores, int* leituraSensorEsq,
int* leituraSensorDir) {
// comparação dos sensores
offsetSensores = leituraSensorEsq - leituraSensorDir;
offsetSensores = abs(offsetSensores); // módulo da diferença dos sensores
}
void imprimeValoresViaSerial(int leituraSensorEsq, int leituraSensorDir,
int offsetSensores) {
Serial.print("SensorEsq = ");
Serial.print(leituraSensorEsq);
Serial.print(" SensorDir = ");
Serial.print(leituraSensorDir);
Serial.print(" Diferenca Sensores = ");
Serial.println(offsetSensores);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment