Lezzetli Robot Tarifleri Sosyal'e Hoş Geldiniz.. Devamı..

Giriş Yap Üye Ol


Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
RFID ile RC araba çalıştırıp kapatma sorunu
#1
Question 
Merhaba arkadaşalar Big Grin Başlıktan da anlayacağınız üzere RFID-RC522 ile RC Araba çalıştırıp durdurmayı planlıyorum.Simülasyon için led üzerinde deneyeyim dedim.Kartı bir kere tuttuğumda çalışıyor ise çalışmayı bırakmasını, çalışmıyor ise çalışmasını istiyorum.Sorun şu ki kartı her tutmamda bir kere okusun istiyorum.Fakat her tutmamda 3-4 kere okuyor.Bu yüzden ledler aç-kapat-aç-kapat olup, kartı tuttuğum sürece ledler sonsuz döngüye giriyor.Yardımcı olursanız sevinirim  Smile




Kod:
#include "SPI.h"
#include "MFRC522.h"

#define SS_PIN 10
#define RST_PIN 9
#define SP_PIN 8
#define led 2


MFRC522 rfid(SS_PIN, RST_PIN);

MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  pinMode(led, OUTPUT);
  
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
    return;


  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  

  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
      piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }

  String strID = "";
  for (byte i = 0; i < 4; i++) {
    strID +=
      (rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
      String(rfid.uid.uidByte[i], HEX) +
      (i != 3 ? ":" : "");
  }
  strID.toUpperCase();

[color=#ff3333]//----------------------------------------------------------------[/color]
[color=#ff3333]//SIKINTI BURDA BAŞLIYOR!!!!!!!!!!!!!![/color]


[color=#ff3333]  Serial.print("Tap card key: ");[/color]
[color=#ff3333]  Serial.println(strID);[/color]

[color=#ff3333]  if (strID.indexOf("96:98:27:4B") >= 0)[/color]
[color=#ff3333]  {[/color]
[color=#ff3333]    digitalWrite(led, HIGH);[/color]

[color=#ff3333]    rfid.PICC_ReadCardSerial();[/color]

[color=#ff3333]       if (strID.indexOf("96:98:27:4B") >= 0)[/color]
[color=#ff3333]           {
[/color]
[color=#ff3333]    digitalWrite(led, LOW);[/color]
[color=#ff3333]           }[/color]
[color=#ff3333]  }[/color]

[color=#ff3333]  //---------------------------------------------------------------------[/color]


  rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
}
Ara
Cevapla
#2
Merhaba, teorik bir mantık var. Arduino tarifleri serisinde buna benzer bir örnek yapılmıştı. Bir sayaç. Ama bir bastığında çok yükseldiği için while ve if kullanarak bir çözüm üretmiştik.
 
       Bu sorunu çözebilmek için eğer kart numarası doğru ise aracı çalıştıracaktır. Bu kadar tamam. Araca çalıştırdıktan sonra eğer bir while döngüsüne sokarsak sürekli algılama yapamaz. While içine bir if yapısı kullanarak bu if yapısını "eğer hiç bir kart okunmuyorsa" gibi bir ifade ile kart çekildiğini anlayıp break komutu ile whileden çıkartabiliriz. Bu mantığı kullanmamız gereklidir.
Maker by : Alperen Alpaydın   
     TEŞEKKÜR İÇİN REP BUTONUNU KULLANINIZ



Cevapla
#3
Dediğin gibi yaptım.Çoğu şey oldu fakat şimdide sadece kartı tuttuğum zaman led yanıp çektiğim zaman sönüyor.Yani okuttuğum sürece araba çalışcak.Bunuda hallettik mi sorun çözülcek   Smile Değiştirdiğim kodun son hali




Kod:
if (strID.indexOf("96:98:27:4B") >= 0)
  {
    digitalWrite(led1, HIGH);

    while (1)
    {
      rfid.PICC_ReadCardSerial();

      if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
      {
        if (strID.indexOf("96:98:27:4B") >= 0)
        {
          digitalWrite(led1, LOW);
          break;
        }
      }
    }
  }
Ara
Cevapla
#4
Aşağıdaki if yapısında ledi söndürmessen çözülür. Yani orada low yapmaman gerekli.


Kod:
if (strID.indexOf("96:98:27:4B") >= 0)
       {
         digitalWrite(led1, LOW);
         break;
       }
Maker by : Alperen Alpaydın   
     TEŞEKKÜR İÇİN REP BUTONUNU KULLANINIZ



Cevapla
#5
(12-01-2017, Saat: 07:56)AlperrTG Adlı Kullanıcıdan Alıntı: Aşağıdaki if yapısında ledi söndürmessen çözülür. Yani orada low yapmaman gerekli.


Kod:
if (strID.indexOf("96:98:27:4B") >= 0)
       {
         digitalWrite(led1, LOW);
         break;
       }

Öyle olursa led hiç sönmez ama ?
Ara
Cevapla
#6
Söndürmek için aynı ifi yazmalısın. Ama sadece o low yapmalı.
Maker by : Alperen Alpaydın   
     TEŞEKKÜR İÇİN REP BUTONUNU KULLANINIZ



Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Shocked arduino rfid role kontrol freekevin 0 32 18-05-2017, Saat: 17:33
Son Yorum: freekevin
  ESP 8266 D1 MİNİ WİFİ SORUNU FİRMWARE YÜKLEME. [ÇÖZÜLDÜ] msuphi 6 145 05-05-2017, Saat: 02:02
Son Yorum: guvejokua
Wink [ÇÖZÜLDÜ] RFID Mödülü Arduino Yusufkvn 7 200 14-03-2017, Saat: 22:14
Son Yorum: Yusufkvn
  RFID OKUMA SORUNU ZaferGüler 2 148 26-02-2017, Saat: 16:18
Son Yorum: ZaferGüler
  SI4432 Sorunu bluebar 0 64 23-02-2017, Saat: 15:28
Son Yorum: bluebar

Hızlı Menü:


Konuyu Okuyanlar:
1 Ziyaretçi