Değerli arkadaşlar, Bir sorunumu paylaşmak istiyorum ve mümkünse değerli cevaplarınızı bekliyorum. Basitçe yapmak istediğim hem kumandayla hemde sensörleri vasıtasıyla kontrol edilen paletli bir araç. Şöyle ki IR alıcı ve kumandası vasıtasıyla istersek manuel olarak kontrol edebiliyoruz yada üzerinde bulunan servo ya bağlı ultrasonic sensor vasıtasıyla engellerle karşılaşınca kıyaslama yaparak yön değiştiriyor. Aslında şu an sistem çalışıyor ama biraz öncesine kadar çalışmıyordu ve benim öğrenmek istediğim neden çalışmadığı. Aşağı da kodu paylaşıyorum, sorunumu şu şekilde çözdüm, L298n sürücüsünde ki ENB bacağını 3. PWM pini vasıtasıyla besliyordum ve ne sürücü de ne kablo da bir problem yok, diğer projelerimde 3. pinden sorunsuzca ENB bacağını pwm olarak besledim, ama bu projede neden olduğunu anlıyamadığım bi şekilde 3. pinden pwm sinyali alamıyorum, onun yerine 6. pinden pwm aldım robotu yürütebiliyorum. Anlıyamadığım acaba kullandığım kütüphanelerle mi alakalı 3. pinin PWM verememesi, ir kütüphanesini kullanmadığım projelerde 3. pinden PWM sorunsuzca alabiliyorum acaba neden bu mudur? Değerli cevaplarınızı bekliyorum, kullandığım kod aşağıda ki gibi; [code] #include<ultrasonic.h>
#include<servo.h>
#include <irremote.h>
Ultrasonic ultrasonicFwd( 12, 13);
#define ENA 5
#define IN1 8
#define IN2 7
#define ENB 6
#define IN3 4
#define IN4 2
Servo scanservo; //Ping Sensor Servo
const int scanservopin = 9; // Pin number for scan servo
const int distancelimit = 20; //If something gets this many inched from
// the robot it stops and looks for where fo go.
int scantime = 0;
int lastscantime = 0;
char sensorpos = ‘L’;
long oldtime = 0;
long timesinceturnedleft = 0;
long timesinceturnedright = 0;
int IRpin = A5;
IRrecv irrecv(IRpin);
decode_results results;
//Setup function. Runs once when Arduino is turned on or restarted
void setup()
{
pinMode(ENA,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(ENB,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
scanservo.attach(scanservopin); // Attach the scan servo
Serial.begin(9600);
delay(2000);
irrecv.enableIRIn(); // wait two seconds
}
void loop(){
int potL = analogRead(A0);
int hizL = map(potL, 0, 1023, 0, 254);
int potR= analogRead(A1);
int hizR = map(potR, 0, 1023, 0, 254);
if (irrecv.decode(&results))
{
irrecv.resume(); // Receive the next value
}
switch(results.value)
{
case 0xB2EEDF3D:
autopilot();
break;
case 0x6F5974BD:
analogWrite(ENB,hizL);
analogWrite(ENA,hizR);
digitalWrite (IN1,LOW);
digitalWrite (IN2,HIGH);
digitalWrite (IN3,LOW);
digitalWrite (IN4,HIGH);
break;
case 0x57E346E1:
digitalWrite (IN1,HIGH);
digitalWrite (IN2,LOW);
analogWrite(ENA,130);
digitalWrite (IN3,HIGH);
digitalWrite (IN4,LOW);
analogWrite(ENB,130);
break;
case 0xCBD2CCFD:
digitalWrite (IN1,LOW);
digitalWrite (IN2,HIGH);
analogWrite(ENA,130);
digitalWrite (IN3,HIGH);
digitalWrite (IN4,LOW);
analogWrite(ENB,130); ;
break;
case 0x85E09D61:
digitalWrite (IN1,HIGH);
digitalWrite (IN2,LOW);
analogWrite(ENA,130);
digitalWrite (IN3,LOW);
digitalWrite (IN4,HIGH);
analogWrite(ENB,130);
break;
case 0x25802501:
stopmotors();
break;
}
}
void autopilot()
{
int leftdistance = 90;
int rightdistance = 90;
go(); // if nothing is wrong the go forward using go() function below.
if(millis()>oldtime+300){
if(sensorpos == ‘L’){
leftdistance = ultrasonicFwd.Ranging(INC);
sensorpos = ‘R’;
}
else{
rightdistance = ultrasonicFwd.Ranging(INC);
sensorpos = ‘L’;
}
oldtime = millis();
}
switch (sensorpos){
case ‘L’:
scanservo.write(70);
break;
case ‘R’:
scanservo.write(110);
break;
}
if(leftdistance</irremote.h></servo.h></ultrasonic.h>