Boa tarde,
tenho tido um problema com o código que estou utilizando para o meu robô seguidor de linha. Quando ligo o Arduíno, o LED que sinaliza que está ligado (LED do on) vai apagando gradualmente até ficar tão fraco que fica difícil perceber que está ligado. O código que estou utilizando é o seguinte:
#define md 9 // Motor direito
#define me 10 // Motor esquerdo
#define pe A0 // Potenciômetro esquerdo
#define pd A1 // Potenciômetro direito
#define s1 A2 // Sensor esquerdo
#define s2 A3 // Sensor central esquerdo
#define s3 A4 // Sensor central direito
#define s4 A5 // Sensor direito
#define pwm_e90 255 // Valor do PWM para fazer curva de 90º para a direita
#define pwm_d90 255 // Valor do PWM para fazer curva de 90º para a esquerda
#define cte 4 // Constante pela qual o valor de PWM é dividido para o acionamento devagar do motor
byte pwm_d = 0, pwm_e = 0; // Variáveis de PWM
unsigned short int per = 0, pdr = 0, s1r = 0, s2r = 0, s3r = 0, s4r = 0; // Variáveis de leitura dos potenciômetros e sensores
void setup() {
TCCR2B = TCCR2B & 0b11111000 | 0x01; // Configuração do timer para que o PWM não seja audível, muda a frequência para 31kHz
pinMode(me, OUTPUT);
pinMode(md, OUTPUT);
pinMode(pe, INPUT);
pinMode(pd, INPUT);
pinMode(s1, INPUT);
pinMode(s2, INPUT);
pinMode(s3, INPUT);
pinMode(s4, INPUT);
digitalWrite(me, LOW);
digitalWrite(md, LOW);
Serial.begin(9600); // Inicia comunicação serial
}
void loop() {
Serial.println(s1r); // Imprime o valor de s1
Serial.println(s2r); // Imprime o valor de s2
Serial.println(s3r); // Imprime o valor de s3
Serial.println(s4r); // Imprime o valor de s4
per = analogRead(pe);
pdr = analogRead(pd);
s1r = analogRead(s1);
s2r = analogRead(s2);
s3r = analogRead(s3);
s4r = analogRead(s4);
pwm_e = map(per, 0, 1023, 0, 255);
pwm_d = map(pdr, 0, 1023, 0, 255);
if (s1r < 512 and s2r > 512 and s3r > 512 and s4r < 512) {
analogWrite(me, pwm_e);
analogWrite(md, pwm_d);
// Frente
}
else if (s1r < 512 and s2r > 512 and s3r < 512 and s4r < 512) {
analogWrite(me, 0);
analogWrite(md, pwm_d);
// Esquerda
}
else if (s1r < 512 and s2r < 512 and s3r > 512 and s4r < 512) {
analogWrite(me, pwm_e);
analogWrite(md, 0);
// Direita
}
else if (s1r > 512 and s2r < 512 and s3r < 512 and s4r > 512) {
analogWrite(me, pwm_e / cte);
analogWrite(md, pwm_d / cte);
// Frente devagar
}
else if (s1r > 512 and s2r < 512 and s3r < 512 and s4r < 512) {
analogWrite(me, pwm_e / cte);
analogWrite(md, pwm_d);
// Corrigir para esquerda
}
else if (s1r < 512 and s2r < 512 and s3r < 512 and s4r > 512) {
analogWrite(me, pwm_e);
analogWrite(md, pwm_d / cte);
// Corrigir para direita
}
else if (s1r < 512 and s2r > 512 and s3r > 512 and s4r > 512) {
analogWrite(me, pwm_e90);
analogWrite(md, 0);
// 90º Direita
}
else if (s1r > 512 and s2r > 512 and s3r > 512 and s4r < 512) {
analogWrite(me, 0);
analogWrite(md, pwm_d90);
// 90º Esquerda
}
else if (s1r < 512 and s2r < 512 and s3r > 512 and s4r > 512) {
analogWrite(me, pwm_e);
analogWrite(md, 0);
// Direita
}
else if (s1r > 512 and s2r > 512 and s3r < 512 and s4r < 512) {
analogWrite(me, 0);
analogWrite(md, pwm_d);
// Esquerda
}
}