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
  RFID Frekansını Nasıl Öğrenebilirim? sakgoo 1 188 10-06-2017, Saat: 16:38
Son Yorum: z1rqdym
Shocked arduino rfid role kontrol freekevin 0 225 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 658 05-05-2017, Saat: 02:02
Son Yorum: guvejokua
Wink [ÇÖZÜLDÜ] RFID Mödülü Arduino Yusufkvn 7 539 14-03-2017, Saat: 22:14
Son Yorum: Yusufkvn
  RFID OKUMA SORUNU ZaferGüler 2 362 26-02-2017, Saat: 16:18
Son Yorum: ZaferGüler

Hızlı Menü:


Konuyu Okuyanlar:
1 Ziyaretçi