hc-05 arduino uno

Kodla Büyü

hubulu

Üye
Mesajlar
12
merhaba. Bu gün TÜbitak 4006+ bilim fuarı için yapmaya çalıştığımız robovale adlı uygulamada yaşadığımız kod sorunundan bahsedeceğim.
olay tam olarak şöyle;
Telefondan arduino uno'ya bağlı hc-05 adlı modüle sinyal göderdiğimizde arduino o sinyalle bir tür çizgi izleyen robot gibi davranmalı. Ancak sinyali gönderdiğimizde çok kısa bir süre çalışıp duruyor. Aşağıya kodları atacağım. Sadece nasıl yapabileceğimi anlatsanız yeterli.
Teşekkürler.
Kod:
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX
int led1 = 7;
const int sag_i = 4; // motor sürücü ve sensör pinleri tanımlandı
const int sag_g = 5;
const int sol_i = 7;
const int sol_g = 6;
const int sol_sensor = 2;
const int sag_sensor = 3;
int sol_durum, sag_durum;

void setup()
{
  pinMode(led1, OUTPUT);

  mySerial.begin(9600);
  mySerial.println("LED uygulamasi");
pinMode(sag_i, OUTPUT); // motor sürücü pinleri çıkış olarak atandı
  pinMode(sag_g, OUTPUT);
  pinMode(sol_i, OUTPUT);
  pinMode(sol_g, OUTPUT);
  
  pinMode(sag_sensor, INPUT); // sensör pinleri giriş pini olarak atandı
  pinMode(sol_sensor, INPUT);
}

void loop()
{
  char ch = mySerial.read();
   sol_durum = digitalRead(sol_sensor); // sol ve sağ sensör okunup değişkenlere kaydedildi.
  sag_durum = digitalRead(sag_sensor);
  if (ch == 'z')
  {
    digitalWrite(led1, LOW);

    mySerial.println("Tum LED'ler sondu");
  }
  if (ch == 'x')
  {
    if (sol_durum == LOW && sag_durum == LOW) // iki sensör de siyah görmüyor ise motorlar ileri gidecek şekilde çalışıtırıldı.
  {
    digitalWrite(sag_i, HIGH);
    digitalWrite(sag_g, LOW);
    digitalWrite(sol_i, HIGH);
    digitalWrite(sol_g, LOW);
    delay(50);
  }
  else if (sol_durum == LOW && sag_durum == HIGH) // sağ sensör siyah görüyor ise motorlar sağa dönecek şekilde çalıştırıldı.
  {
    digitalWrite(sag_i, HIGH);
    digitalWrite(sag_g, HIGH);
    digitalWrite(sol_i, HIGH);
    digitalWrite(sol_g, LOW);
  }
  else if (sol_durum == HIGH && sag_durum == LOW) // sol sensör siyah görüyor ise motorlar sola dönecek şekilde çalıştırıldı.
  {
    digitalWrite(sag_i, HIGH);
    digitalWrite(sag_g, LOW);
    digitalWrite(sol_i, HIGH);
    digitalWrite(sol_g, HIGH);
  }
  else  //eğer yukarıda şartların 3 üde değilse dur.
  {
    digitalWrite(sag_i, LOW);
    digitalWrite(sag_g, LOW);
    digitalWrite(sol_i, LOW);
    digitalWrite(sol_g, LOW);
  }
  delay(25);                      // ivme kırıcı kodlar, bunların mantığı videolarda anlatıldı arkadaşlar.
  digitalWrite(sag_i, LOW); 
  digitalWrite(sag_g, LOW);
  digitalWrite(sol_i, LOW);
  digitalWrite(sol_g, LOW);
  delay(50);
   mySerial.println("Tum LED'ler yandi");
}

   
  }
 
hocam bu gibi durumların başlıca sebebi pull up veya pull down dirençlerinin kullanılmamasıdır. ilgili pinler için pull down ya da pull up direnci koyun. kararsızlıklar sona erer.
 
her seferinde x karakterini bekliyor hocam

if (ch == 'x')


kodunun içine yazmışsınız motorun ileri hareketlerini, x karakteri geldiğinde motor çalışır ve kod devam eder, sonrasındaki tüm kontrolleri yaptığında loop fonksiyonunun sonuna geldiğinde

digitalWrite(sag_i, LOW);
digitalWrite(sag_g, LOW);
digitalWrite(sol_i, LOW);
digitalWrite(sol_g, LOW);
kodları motoru durdurur ve loop başadöndüğünde tekrar x tuşuna basana kadar ileri komutları çalışmaz.
Bu nedenle kodunuz bir kere çalışıyor ve biraz ileri gidip duruyor.

İnşallah açıklayabilmişimdir :)
 
gsaydin' Alıntı:
her seferinde x karakterini bekliyor hocam

if (ch == 'x')


kodunun içine yazmışsınız motorun ileri hareketlerini, x karakteri geldiğinde motor çalışır ve kod devam eder, sonrasındaki tüm kontrolleri yaptığında loop fonksiyonunun sonuna geldiğinde

digitalWrite(sag_i, LOW);
digitalWrite(sag_g, LOW);
digitalWrite(sol_i, LOW);
digitalWrite(sol_g, LOW);
kodları motoru durdurur ve loop başadöndüğünde tekrar x tuşuna basana kadar ileri komutları çalışmaz.
Bu nedenle kodunuz bir kere çalışıyor ve biraz ileri gidip duruyor.

İnşallah açıklayabilmişimdir :)

doğru tespit
 
Geri
Üst