Düz gitme sorunu için encoder kullandım ancak araç yinede düz gitmiyor. Kodlamada mı bir sıkıntı var acaba? Yardımcı olabilir misiniz?
const byte MOTOR_SAG = 3;
const byte MOTOR_SOL = 2;
const float stepcount = 20.00;
const float wheeldiameter = 60.00;
volatile int counter_A = 0;
volatile int counter_B = 0;
//Motor sağ
int enA = 10;
int in1 = 9;
//Motor sol
int enB = 5;
int in3 = 7;
//Motor sağ pulse counter
void ISR_countA()
{
counter_A++;
}
//Motor sol pulse counter
void ISR_countB()
{
counter_B++;
}
int CMtoSteps(float cm)
{
int result;
float circumference = (wheeldiameter * 3.14) / 10;
float cm_step = circumference / stepcount;
float f_result = cm / cm_step;
result = (int) f_result;
return result;
}
void MoveForward(int steps, int mspeed)
{
counter_A = 0;
counter_B = 0;
//Motor sağ ileri
digitalWrite(in1, HIGH);
//Motor sol ileri
digitalWrite(in3, HIGH);
//Sayılan sayı bitene kadar ilerle
while (steps > counter_A && steps > counter_B)
{ if(steps > counter_A)
{ analogWrite(enA, mspeed);}
else
{ analogWrite(enA, 0); }
if (steps > counter_B)
{ analogWrite(enB, mspeed); }
else
{analogWrite(enB, 0);}
}
// Bittiğinde durdur
analogWrite(enA, 0);
analogWrite(enB, 0);
counter_A = 0;
counter_B = 0;
}
void setup() {
attachInterrupt(digitalPinToInterrupt (MOTOR_SAG), ISR_countA, RISING);
attachInterrupt(digitalPinToInterrupt (MOTOR_SOL), ISR_countB, RISING);
//50 cm sonra durdurur
MoveForward(CMtoSteps(5000),255);
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
}