Arduino IR araca hız ayarı kodu ekleme

Affansen

Katılımcı Üye
Katılım
15 Ocak 2021
Mesajlar
501
Puanları
56
Öncelikle iyi akşamlar. IR kütüphanesinin mantığını çözemedim. İnternette bir kod buldum araba yapmak için. Kod çalışıyor ama benim istediğim gibi olmadı. Birisi yardımcı olursa çok mutlu olurum. Birkaç sorum daha olacak. İlerledikçe yeni konu açacağım. :)

C#:
 #include <IRremote.h>

char command;
int receiver_pin = 4;   //Connect the output pin of IR receiver at pin 4
int vcc = 5;            //VCC for IR sensor
int gnd = 6;            //GND for IR sensor

int statusled = 13;

IRrecv irrecv(receiver_pin);

decode_results results;


// connect motor controller pins to Arduino digital pins
// motor A
int enA = 6;
int in1 = 12;
int in2 = 11;
// motor B
int enB = 5;
int in3 = 10;
int in4 = 9;


void setup()

{
Serial.begin(9600);

irrecv.enableIRIn();

pinMode(statusled,OUTPUT);

digitalWrite(statusled,LOW);

// set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(vcc, OUTPUT);
  pinMode(gnd, OUTPUT);

// Initializing vcc pin high
  digitalWrite(vcc, HIGH);



}

void loop() {

if (irrecv.decode(&results)) {

digitalWrite(statusled,LOW);

irrecv.resume();

if (results.value == 0x40BF609F){ // type button 2 forward robot control

// this function will run the motors in both directions at a fixed speed
Serial.println("Button 2");
  // turn on motor A
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 130);
  // turn on motor B
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 130);



}else if(results.value == 0x40BF906F){ // type button 4 turn left robot control

// this function will run motor A in forward directions  motor B stop
  Serial.println("Button 4");
  // turn on motor A
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 130);
  // turn on motor B
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 130);


}else if(results.value == 0x40BF48B7){ // type button 1 rotate left robot control

// this function will run motor A in forward directions  motor B in backward directions
  Serial.println("Button Turn Right");
  // turn on motor A
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 130);
  // turn on motor B
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 130);


}else if(results.value == 0x40BFD02F){ // type button 6 turn right robot control

// this function will  stop motor A  run motor B in forward directions
Serial.println("Button Turn Left");
  // turn on motor A
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 130);
  // turn on motor B
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 130);

}else if(results.value == 0x40BFC837){ // type button 3 rotate right robot control

// this function will run motor A  in backward directions  motor B in forward directions
  // turn on motor A
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 130);
  // turn on motor B
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 130);

} else if(results.value == 0x40BF708F){ // type button 8 backward robot control

// this function will run motor A and motor B in backward directions
  // turn on motor A
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA,130);
  // turn on motor B
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 130);



}else if(results.value == 0x40BF50AF){ // type button 5 stop robot control


// this function will stop both motor A and motor B
  // turn on motor A
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enA, 130);
  // turn on motor B
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  // set speed to 200 out of possible range 0~255
  analogWrite(enB, 130);



}

}

}

Bu koda hız efekti ekleyebilir misiniz? Yani enB ve enA değişken olarak atanıp, hızları 40 birim veya başka bir şekilde artacak biçimde ayarlamam gerekiyor. Yardımcı olabilir misiniz?

Kumandanın kodları:

Arttırma:40BFF807/ICODE] Azaltma:[ICODE]40BF7887

Şimdiden teşekkür ederim. :)

@FakirMaker
 
En başa
Kod:
uint8_t hiz = 0;

olarak hız değişkeni belirle sonra yazığın if lerden sonra

Kod:
}else if(results.value == 0x40BFF807){ // artır
   if(hiz<255)
      hiz +=51;
  analogWrite(enA,hiz);
  analogWrite(enB,hiz);
}else if(results.value == 0x40BF7887){ // azalt
   if(hiz>0)
      hiz -=51;
  analogWrite(enA,hiz);
  analogWrite(enB,hiz);
}

40 olmaz çünkü pwm 8 bit maksimum 255 olabilir. Tam bölünen bir sayı olması lazım. 51 yaptım o yüzden. 5 kademe hız seçeneğin var.
 
Son düzenleme:
En başa
Kod:
uint8_t hiz = 0;

olarak hız değişkeni belirle sonra yazığın if lerden sonra

Kod:
}else if(results.value == 0x40BFF807){ // artır
   if(hiz<255)
      hiz +=51;
  analogWrite(enA,hiz);
  analogWrite(enB,hiz);
}else if(results.value == 0x40BF7887){ // azalt
   if(hiz>0)
      hiz -=51;
  analogWrite(enA,hiz);
  analogWrite(enB,hiz);
}

40 olmaz çünkü pwm 8 bit maksimum 255 olabilir. Tam bölünen bir sayı olması lazım. 51 yaptım o yüzden. 5 kademe hız seçeneğin var.
Çok tesekkurler. Robotistan kanalınin kdounu buldum ama değiştirmek istemedim. Hem bu kod güzel calisiyordu. Bir de bir sorum var. Bu ileri geri voidlerinin içinde enA enB değerleri değiştirilmişti. Onları elleyecek miyim?
 
Çok tesekkurler. Robotistan kanalınin kdounu buldum ama değiştirmek istemedim. Hem bu kod güzel calisiyordu. Bir de bir sorum var. Bu ileri geri voidlerinin içinde enA enB değerleri değiştirilmişti. Onları elleyecek miyim?
Evet 130 yerine hiz yapman gerekir yoksa her yön komutunda hiz otomatik olarak 130 olacaktır ben sadece ekleme yaptım düzeltmedim hiç.

edit: Hız ayarının yön komutlarının içinde işi yok tümden sil gitsin. Zaten hız için ayrı bi tuş atanmış.

Ayrıca çoklu seçmelerde else if gibi bir çamura batma hem kafa karıştırır hemde işlemciye ekstra cycle yaptırı onun yerine:

Kod:
switch(results.value){
  case 0x40BFF807:
    if(hiz<255)
      hiz +=51;
    analogWrite(enA,hiz);
    analogWrite(enB,hiz);
    break;
  case 0x40BF7887:
    if(hiz>0)
      hiz -=51;
    analogWrite(enA,hiz);
    analogWrite(enB,hiz);
    break;
  default:
    break;
}

bunu kullan hem kafan karışmaz hem nerede hata yaptığını kolay bulursun.
 
Son düzenleme:
Evet 130 yerine hiz yapman gerekir yoksa her yön komutunda hiz otomatik olarak 130 olacaktır ben sadece ekleme yaptım düzeltmedim hiç.

edit: Hız ayarının yön komutlarının içinde işi yok tümden sil gitsin. Zaten hız için ayrı bi tuş atanmış.

Ayrıca çoklu seçmelerde else if gibi bir çamura batma hem kafa karıştırır hemde işlemciye ekstra cycle yaptırı onun yerine:

Kod:
switch(results.value){
  case 0x40BFF807:
    if(hiz<255)
      hiz +=51;
    analogWrite(enA,hiz);
    analogWrite(enB,hiz);
    break;
  case 0x40BF7887:
    if(hiz>0)
      hiz -=51;
    analogWrite(enA,hiz);
    analogWrite(enB,hiz);
    break;
  default:
    break;
}

bunu kullan hem kafan karışmaz hem nerede hata yaptığını kolay bulursun.
Tamamdır deneyeceğim birazdan. Bir de buna başka bir koddan ekleme yapmak istiyorum ama bu kof bluetooth araba kodu, benimki IR. Ekleme yapılabilir mi? Denemiştim olmamıştı.

Bu arada yön komutlarının içinden sileyim mi yoksa hiz değişkenini mi koymalıyım?
 
Sil gerek yok ona.

Her kod her yere eklenebilir sadece birbirine uyumlu hale getirmek gerek
O zaman deneyeyim. Zamanınızı ayırdığınız için teşekkür ederim. Diğer forumlarda sadece değişkeni tanımlıyorlar, gerisini siz yapın diyorlardı. Tekrardan teşekkürler. :)
 
Maalesef insanlar forumda çözüm vermek yerine akıl veriyorlar. Onun için doğru düzgün türkçe kaynak oluşmamış. Ben ileride birileri arar belki işine yarar diye mümkün oldukça çözüm yazıyorum.
 
Maalesef insanlar forumda çözüm vermek yerine akıl veriyorlar. Onun için doğru düzgün türkçe kaynak oluşmamış. Ben ileride birileri arar belki işine yarar diye mümkün oldukça çözüm yazıyorum.
Güzel yapıyorsunuz. Ben de internette arattım ama hız ayarlı bir kod bulamadım. Kod çalışırsa kodun tamamını size gönderirim, bir konu açarsınız insanlar yararlanır. :)

Evet 130 yerine hiz yapman gerekir yoksa her yön komutunda hiz otomatik olarak 130 olacaktır ben sadece ekleme yaptım düzeltmedim hiç.

edit: Hız ayarının yön komutlarının içinde işi yok tümden sil gitsin. Zaten hız için ayrı bi tuş atanmış.

Ayrıca çoklu seçmelerde else if gibi bir çamura batma hem kafa karıştırır hemde işlemciye ekstra cycle yaptırı onun yerine:

Kod:
switch(results.value){
  case 0x40BFF807:
    if(hiz<255)
      hiz +=51;
    analogWrite(enA,hiz);
    analogWrite(enB,hiz);
    break;
  case 0x40BF7887:
    if(hiz>0)
      hiz -=51;
    analogWrite(enA,hiz);
    analogWrite(enB,hiz);
    break;
  default:
    break;
}

bunu kullan hem kafan karışmaz hem nerede hata yaptığını kolay bulursun.
Bir şey soracağım? Sadece bu kodu mu ekleyeyim? Yoksa hiz değişkenini de ekleyeyim mi?

@FakirMaker

Ekleme: Çok güzel çalıştı. Elinize sağlık tam istediğim gibi oldu. Hız ayarı olayı da güzel. Tekrardan teşekkürler. :)
1615974859342.png

1615974903552.png
Ekli dosyayı görüntüle 72738

@cengover_ekin @FakirMaker aletin videosunu çektim, MP4 desteklemediği için forum ZİP'in içine atıp gönderiyorum.

Bu arada eklenecek veya çevirilecek birkaç kod daha var. Müsait olduğunuzda onları da çevirebilir misiniz?

Aralarında bir tane Süper Mario melodisi var. :)
 

Ekli dosyalar

  • WhatsApp Video 2021-03-17 at 16.21.05 (1).rar
    6.1 MB · Görüntüleme: 4

Forum istatistikleri

Konular
127,956
Mesajlar
913,898
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst