RC522 Rfid kart modülü ile açılıp kapanan, kapı kilidi projesi üzerinde çalışıyorum.
Projenin mekanik aksamını tamamladım, fakat arduino kodlama kısmında ufak bir sorun ile karşılaştım.
Projede iki adet rfid kart kullanacağım bunlardan birisi kapıyı kilitlerken, diğeri kapıyı açacak.
l293d motor shield vasıtası ile dc motoru ileri ve geri döndürmek suretiyle kapı açılıp kapanacak, kartlardan birisini okuttuğumda motor dönmeye başlıyor diğer kartı okuttuğumda ise motor diğer yöne doğru dönüyor buraya kadar her şey tam olarak istediğim gibi fakat motorları durduramıyorum en son hangi kartı okuttuysam o yönde dönmeye devam ediyor.
Benim istediğim şey kartı okutunca 5 saniye dönsün sonra dursun fakat bir türlü beceremedim
Azda olsa modüllerin ne yapmaya çalıştığını anlamak için kodda şöyle bir değişiklik yaptım
************************************************************************** if (rfid == kart1)
{ Serial.println("1. kart"); motor.run(FORWARD);
delay(7000);
motor.run(BACKWARD);
delay(500);
motor.run(RELEASE);
delay(1000);
motor.run(FORWARD);
delay(300);
rfid=""; }
********************************************************************* bu şekilde bir değişiklik yaptığımda şunları gözlemledim:
1- Seri haberleşmede "1. kart" yazısı kartı okuttuğum gibi ekrana geliyor.
2- Yazdığım motor.run komutlarından sadece en alta yazılan çalışıyor üsttekilerin herhangi bir işlevi olmuyor. (Kodu değiştirerek tekrar tekrar denedim.)
3- Delay kodlarından hangisi en uzunsa o çalışıyor
Mesela üstteki örneği ele alırsak kartı okuttuğumda "1. kart" yazısı anında ekranda beliriyor 7 saniye sonra da motor en altta yazan (FORWARD) yönünde dönmeye başlıyor.
Bir de şöyle bir şey denedim
RFID modülünü tamamen projeden söküp a isminde bir değişken oluşturdum ve bu değişkenin 5'e eşit olup olmadığı durumlarda motorun hareketlerini inceledim.
Tam olarak bilmiyorum. Dediğin gibi motor sürücüyü iptal edip led yakıp söndürmeyi deneyeceğim ama şu aralar çalıştığım yerde işler biraz yoğun mesaiye kalmam gerekiyor bu sebeple pek vakit bulamıyorum.
Ben deneyene kadar kodun tamamını şuraya bırakayım, belki gözüne takılan bir şey olur.
Serial.println("Kartlar Okunmaya Hazir"); Serial.println("--------------------------"); Serial.println(); //EEPROM'dan kart bilgisini oku readEEPROM();
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } if ( ! mfrc522.PICC_ReadCardSerial()) { return; }
String rfid = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { rfid += mfrc522.uid.uidByte < 0x10 ? " 0" : " "; rfid += String(mfrc522.uid.uidByte, HEX); }
RC522 Rfid kart modülü ile açılıp kapanan, kapı kilidi projesi üzerinde çalışıyorum.
Projenin mekanik aksamını tamamladım, fakat arduino kodlama kısmında ufak bir sorun ile karşılaştım.
Projede iki adet rfid kart kullanacağım bunlardan birisi kapıyı kilitlerken, diğeri kapıyı açacak.
l293d motor shield vasıtası ile dc motoru ileri ve geri döndürmek suretiyle kapı açılıp kapanacak, kartlardan birisini okuttuğumda motor dönmeye başlıyor diğer kartı okuttuğumda ise motor diğer yöne doğru dönüyor buraya kadar her şey tam olarak istediğim gibi fakat motorları durduramıyorum en son hangi kartı okuttuysam o yönde dönmeye devam ediyor.
Benim istediğim şey kartı okutunca 5 saniye dönsün sonra dursun fakat bir türlü beceremedim
yazdığım if dizininden örnek vermem gerekirse
******************************************************************************
if (rfid == kart1)
{
motor.run(BACKWARD);
Serial.println("Kapi Kapaniyor");
delay(5000);
}
***************************************************************************
yukarıdaki şekildeyken motor kart okunduktan 5 saniye sonra dönmeye başlıyor
aşağıdaki gibi bir değişiklik yaptığımda ise motor dönmeye başlamadan durma komutunu kullanıyor.
///////////////////////////////////////////////////////////////////////////
if (rfid == kart1)
{
motor.run(BACKWARD);
Serial.println("Kapi Kapaniyor");
delay(5000);
motor.run(RELEASE);
}
////////////////////////////////////////////////////////////////////////
Bu durumda ben ne yapmalıyım ki motor 5 saniye çalıştıktan sonra dursun? Nerede hata yapıyor olabilirim acaba?
Şimdiden yardımlarınız için teşekkürler.