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.
Sorununuz Olursa Tek ÖM Yeterli  
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;
       }
Sorununuz Olursa Tek ÖM Yeterli  
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ı.
Sorununuz Olursa Tek ÖM Yeterli  
maker by Alperen Alpaydın   
     TEŞEKKÜR İÇİN REP BUTONUNU KULLANINIZ



Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Arduino Program Yükleme Sorunu [ÇÖZÜLDÜ] electromath 4 150 04-12-2016, Saat: 22:37
Son Yorum: electromath
  ARDUINO IDE AÇILMAMA SORUNU fkarakus 2 94 01-12-2016, Saat: 17:56
Son Yorum: fkarakus
Exclamation Arduino kartı sorunu Colomborne 6 141 25-11-2016, Saat: 17:14
Son Yorum: Online
  Arduino pro mini 3V ATmega 328 kod yükleme sorunu kocahasanbahadr 3 163 14-11-2016, Saat: 18:19
Son Yorum: Online
  Arduino nano atmega 168 kod yükleme sorunu [ÇÖZÜLDÜ] Erhan 7 254 10-11-2016, Saat: 23:29
Son Yorum: z1rqdym

Hızlı Menü:


Konuyu Okuyanlar:
1 Ziyaretçi