HC-05'den gelen veriyi kontrol etme

doktorlevi

Üye
Katılım
23 Kas 2020
Mesajlar
25
Puanları
1
Selamlar arkadaşlar; birkaç gün önce attığım bir odayı tıpkı akıllı ev gibi yapma projesinde kilit sistemi ve butonlarla kontrol sistemini yardımlarınız ile başarıyla tamamladım. Şimdi ise bir başka bir sorun var. Butonlarla yaptığım açma kapama işlemini şimdi App Inventor ile yaptığım uygulamada Bluetooth üzerinden yapmak istiyorum. Uygulama kodlarda ve bağlantıda bir sıkıntı olduğunu düşünmediğim halde RFID'den doğru kartı okutmayıp yani kitliyken uygulamadan komut gönderdiğimde izinsiz giriş uyarı yapmıyor kitli değilken herhangi bir komutta ise buzzer hiç kapanmayan bir şekilde sürekli olarak çalıyor ve LCD ekranda 1 saniyeliğinden kısa bir süreliğine "İzinsiz Giriş" yazısı çıkıp siliniyor. Gerekli kodları ve bağlantıyı atıyorum diğer kısımların herhangi bir kodunu veya bağlantı şemasını paylaşmıyorum haberiniz olsun. Şimdiden teşekkürler.
Kod:
// Kütüphaneler
#include <SPI.h>
#include <RFID.h>
#include <LiquidCrystal.h>

RFID rfid(10, 9); // RFID'in giriş pinlerini tanımlıyoruz
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // LCD'yi ve pinlerini tanımlıyoruz.
// Gerekli pinleri ve değişkenleri tanımlıyoruz.

#define buzzer A4
#define role A5
int kilit;

String readString; // Bluetooth için gereli Serial haberleşmeyi başlatıyoruz.


void setup()
{
  Serial.begin(9600); // Serial Haberleşme
  lcd.begin(16,2); // LCD'nin boyutunu ayarlıyoruz.
 
  // RFID'yi başlatıyoruz.
  SPI.begin();
  rfid.init();
 
  // Butonları giriş röleyi çıkış olarak ayarlıyoruz.
  pinMode(buzzer, OUTPUT);
  pinMode(role, OUTPUT);
 
  // Açılışta gerekli işlemleri yapıyoruz.
  digitalWrite(buzzer, LOW);
  digitalWrite(role, HIGH);
  lcd.clear();
  delay(1000);
  digitalWrite(buzzer, HIGH);
  delay(3000);
  digitalWrite(buzzer, LOW);
  lcd.print("...");
}

void loop(){   
 

    // Blueetooth için gerekli Seri haberleşme ile ile ilgili kodlar
    while (Serial.available()) {
    delay(3); 
    char c = Serial.read();
    readString += c;
  }

  //RFID kartın okuma işlemini gerçekleştiriyoruz
  if (rfid.isCard()) {

    
    if (rfid.readCardSerial()) {

      // Okunan kartları Serial Monitore yazdırıyoruz.
      Serial.println("Kart Bulundu ID : ");
      Serial.print(rfid.serNum[0]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[1]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[2]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[3]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[4]);
      Serial.println(" ");
      delay(500);
      
      // İzinli kart mı değil mi bakıyoruz.
      if(rfid.serNum[0] == 83 && rfid.serNum[1] == 16 && rfid.serNum[2] == 223 && rfid.serNum[3] == 12 && rfid.serNum[4] == 144 ){
       lcd.clear();
       digitalWrite(buzzer, HIGH);
       delay(1000);
       digitalWrite(buzzer, LOW);
       lcd.print("GIRIS YAPILDI");
       kilit = 1;
      }
       else{
      
        lcd.clear();
        digitalWrite(buzzer, HIGH);
        delay(3000);
        digitalWrite(buzzer, LOW);
        lcd.print("Izinsiz giris!!!");
        kilit = 0;
       }
      }
    }
 
  
 
   rfid.halt();


    // Bluetooth'tan gelen komutları kontrol etme.
    if (readString.length() >0) {
  Serial.println(readString);
 
  // Kilit durumunu kontrol etme.
      if(kilit == 1){
        if(readString == "roleOn"){
            lcd.clear();
            digitalWrite(buzzer, HIGH);
            delay(1000);
            digitalWrite(buzzer, LOW);
            digitalWrite(role, LOW);
            lcd.setCursor(0,0);
            lcd.print("ROLE ACILDI");
        
       }
      if(readString == "roleOff"){
            lcd.clear();
            digitalWrite(buzzer, HIGH);
            delay(1000);
            digitalWrite(buzzer, LOW);
            digitalWrite(role, HIGH);
            lcd.setCursor(0,0);
            lcd.print("ROLE KAPANDI");
            
       }

      if(readString == "kilitle"){
          digitalWrite(buzzer, HIGH);
          delay(4000);
          digitalWrite(buzzer, LOW);
          lcd.clear();
          lcd.print("SISTEM KILITLENDI");
          kilit = 0;
          delay(5000);
          lcd.clear();
          lcd.print("...");
      
       }
      } else{
           lcd.clear();
           digitalWrite(buzzer, HIGH);
           delay(3000);
           digitalWrite(buzzer, LOW);
           lcd.print("Izinsiz giris!!!");
           kilit = 0;
        }[ATTACH type="full"]68917[/ATTACH][ATTACH type="full"]68918[/ATTACH]
    
      
    
    }
}
Arduino-Uno-r3-with-RFID-RC522_bb.png

Selamlar arkadaşlar; birkaç gün önce attığım bir odayı tıpkı akıllı ev gibi yapma projesinde kilit sistemi ve butonlarla kontrol sistemini yardımlarınız ile başarıyla tamamladım. Şimdi ise bir başka bir sorun var. Butonlarla yaptığım açma kapama işlemini şimdi App Inventor ile yaptığım uygulamada Bluetooth üzerinden yapmak istiyorum. Uygulama kodlarda ve bağlantıda bir sıkıntı olduğunu düşünmediğim halde RFID'den doğru kartı okutmayıp yani kitliyken uygulamadan komut gönderdiğimde izinsiz giriş uyarı yapmıyor kitli değilken herhangi bir komutta ise buzzer hiç kapanmayan bir şekilde sürekli olarak çalıyor ve LCD ekranda 1 saniyeliğinden kısa bir süreliğine "İzinsiz Giriş" yazısı çıkıp siliniyor. Gerekli kodları ve bağlantıyı atıyorum diğer kısımların herhangi bir kodunu veya bağlantı şemasını paylaşmıyorum haberiniz olsun. Şimdiden teşekkürler.
Kod:
// Kütüphaneler
#include <SPI.h>
#include <RFID.h>
#include <LiquidCrystal.h>

RFID rfid(10, 9); // RFID'in giriş pinlerini tanımlıyoruz
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // LCD'yi ve pinlerini tanımlıyoruz.
// Gerekli pinleri ve değişkenleri tanımlıyoruz.

#define buzzer A4
#define role A5
int kilit;

String readString; // Bluetooth için gereli Serial haberleşmeyi başlatıyoruz.


void setup()
{
  Serial.begin(9600); // Serial Haberleşme
  lcd.begin(16,2); // LCD'nin boyutunu ayarlıyoruz.

  // RFID'yi başlatıyoruz.
  SPI.begin();
  rfid.init();

  // Butonları giriş röleyi çıkış olarak ayarlıyoruz.
  pinMode(buzzer, OUTPUT);
  pinMode(role, OUTPUT);

  // Açılışta gerekli işlemleri yapıyoruz.
  digitalWrite(buzzer, LOW);
  digitalWrite(role, HIGH);
  lcd.clear();
  delay(1000);
  digitalWrite(buzzer, HIGH);
  delay(3000);
  digitalWrite(buzzer, LOW);
  lcd.print("...");
}

void loop(){  


    // Blueetooth için gerekli Seri haberleşme ile ile ilgili kodlar
    while (Serial.available()) {
    delay(3);
    char c = Serial.read();
    readString += c;
  }

  //RFID kartın okuma işlemini gerçekleştiriyoruz
  if (rfid.isCard()) {

   
    if (rfid.readCardSerial()) {

      // Okunan kartları Serial Monitore yazdırıyoruz.
      Serial.println("Kart Bulundu ID : ");
      Serial.print(rfid.serNum[0]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[1]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[2]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[3]);
      Serial.print(" , ");
      Serial.print(rfid.serNum[4]);
      Serial.println(" ");
      delay(500);
     
      // İzinli kart mı değil mi bakıyoruz.
      if(rfid.serNum[0] == 83 && rfid.serNum[1] == 16 && rfid.serNum[2] == 223 && rfid.serNum[3] == 12 && rfid.serNum[4] == 144 ){
       lcd.clear();
       digitalWrite(buzzer, HIGH);
       delay(1000);
       digitalWrite(buzzer, LOW);
       lcd.print("GIRIS YAPILDI");
       kilit = 1;
      }
       else{
     
        lcd.clear();
        digitalWrite(buzzer, HIGH);
        delay(3000);
        digitalWrite(buzzer, LOW);
        lcd.print("Izinsiz giris!!!");
        kilit = 0;
       }
      }
    }

 

   rfid.halt();


    // Bluetooth'tan gelen komutları kontrol etme.
    if (readString.length() >0) {
  Serial.println(readString);

  // Kilit durumunu kontrol etme.
      if(kilit == 1){
        if(readString == "roleOn"){
            lcd.clear();
            digitalWrite(buzzer, HIGH);
            delay(1000);
            digitalWrite(buzzer, LOW);
            digitalWrite(role, LOW);
            lcd.setCursor(0,0);
            lcd.print("ROLE ACILDI");
       
       }
      if(readString == "roleOff"){
            lcd.clear();
            digitalWrite(buzzer, HIGH);
            delay(1000);
            digitalWrite(buzzer, LOW);
            digitalWrite(role, HIGH);
            lcd.setCursor(0,0);
            lcd.print("ROLE KAPANDI");
           
       }

      if(readString == "kilitle"){
          digitalWrite(buzzer, HIGH);
          delay(4000);
          digitalWrite(buzzer, LOW);
          lcd.clear();
          lcd.print("SISTEM KILITLENDI");
          kilit = 0;
          delay(5000);
          lcd.clear();
          lcd.print("...");
     
       }
      } else{
           lcd.clear();
           digitalWrite(buzzer, HIGH);
           delay(3000);
           digitalWrite(buzzer, LOW);
           lcd.print("Izinsiz giris!!!");
           kilit = 0;
        }[ATTACH type="full"]68917[/ATTACH][ATTACH type="full"]68918[/ATTACH]
   
     
   
    }
}
Arduino-Uno-r3-with-RFID-RC522_bb.png
Bu arada şemada röle bulamadığımdan led kullandım
 

Ekli dosyalar

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    50.6 KB · Görüntüleme: 14
  • Ekran Alıntısı1.PNG
    Ekran Alıntısı1.PNG
    48.3 KB · Görüntüleme: 15
Eğer birden fazla izin verilen kart varsa ve işleci (&&) değil, veya (||) işleci kullanmak gerekiyor.
C++:
            // İzinli kart mı değil mi bakıyoruz.
            if(rfid.serNum[0] == 83 ||
               rfid.serNum[1] == 16 ||
               rfid.serNum[2] == 223 ||
               rfid.serNum[3] == 12 ||
               rfid.serNum[4] == 144 )
            {
                /*  ...  */
            }
            else
            {
                /*  ...  */
            }

Sonra kilit değişkenine ilk değer verilmemiş. Değişkenlere ilk değer vermek iyi bir alışkanlık. Aksi halde rastgele bir değer alabilir.

Anladığım kadarıyla ilk başta sistemin kilitli olması gerekiyor. Eğer öyleyse kilit değişkenine 1 değeri verebilirsiniz.

int kilit == 1;

Hızlıca görebildiklerim bunlar.
 
Eğer birden fazla izin verilen kart varsa ve işleci (&&) değil, veya (||) işleci kullanmak gerekiyor.
C++:
            // İzinli kart mı değil mi bakıyoruz.
            if(rfid.serNum[0] == 83 ||
               rfid.serNum[1] == 16 ||
               rfid.serNum[2] == 223 ||
               rfid.serNum[3] == 12 ||
               rfid.serNum[4] == 144 )
            {
                /*  ...  */
            }
            else
            {
                /*  ...  */
            }

Sonra kilit değişkenine ilk değer verilmemiş. Değişkenlere ilk değer vermek iyi bir alışkanlık. Aksi halde rastgele bir değer alabilir.

Anladığım kadarıyla ilk başta sistemin kilitli olması gerekiyor. Eğer öyleyse kilit değişkenine 1 değeri verebilirsiniz.

int kilit == 1;

Hızlıca görebildiklerim bunlar.
Hayır birden fazla kart değil kartın ID'si o yani kartın seri numarasını 1. , 2. 3. .. gibi kontrol ettiriyorum ve o yüzden veya değil de ve kullanmam gerek öbür türlü Benim kartımla ID numarasının herhangi bir bölümü aynı olan kilidi açabilir. o kısımda bir hata olduğunu düşünmüyorum çünkü o kısmının projenin diğer kısmına entegre hali sorunsuz çalışıyor. Ek olarak kilit 1 değilse kilitli oluyor 1 ise kilitli değil mantığıyla yaptım yani kilit değişkenine sadece doğru okunduğunda 1 yanlış okunduğunda 0 vermem yeterli başlangıçta ise herhangi bir değer vermesem de oluyor.
Merhabalar, kilit değişkeni short tipinde de olabilir diye düşünüyorum. Hata olmaz öyle değil mi? Yani kapı kilitliyken kilit değişkeni 1, kapı kilitli değilken kilit değişkeni 0 olsun mesela.
Merhabalar, evet sadece değişkeni oluştururken başta int kilit; dememiz yeterli. Daha sonra doğru kartın okunup okunamamasına bağlı olarak kilit = 0; veya kilit = 1; gibi değerler verebiliriz ama sorunun buralarda olduğunu düşünmüyorum eğer istediğiniz takdirde kodun butonlarla entegre halini atabilirim ama kod çok uzuyor sizlere kalmış daha iyi anlayabilirsiniz.
 
Doğru kartı okuttğunuzda doğru bir şekilde çalışıyor mu? MPLAB XC8 mi kullanıyorsunuz?
 
Son düzenleme:
Doğru kartı okuttğunuzda doğru bir şekilde çalışıyor mu? MPLAB XC8 mi kullanıyorsunuz?
Hatırlamıyorum maalesef dostum olmayınca vaz geçtim sonra yaparım dedim sorun zaten veri gelmemesi değildi birkez gönderilen verinin devamlı olarak gelmesiydi
 

Forum istatistikleri

Konular
127,966
Mesajlar
913,966
Kullanıcılar
449,612
Son üye
esperran

Yeni konular

Geri
Üst