Egy kartyaolvasoval vezerelnek egy relet. Irtam hozza egy programot, ami reszben mukodik is. Ha leolvastatom a kartyat, akkor aktivalodik is a kimenet a megfelelo idore. Ha olvastatas utan a bemenetet aktivalom, akkor a kimenetnek aktivnak kell maradnia, ez a resz is mukodik. Ha a bemenet az olvastatas utan nem aktiv, a kimenet elenged. Ezzel sincs semmi gond. Ha a bemenetet
a beallitottkesleltetesi idon belul, tobbszor aktivalom/inaktivalom, akkor a kivant kesleltetesi ido, nem mindig a megfelelo hosszusagu. Szoval a cel,ha a bemenetet inaktivalom, akkor az elejtesi kesleltetes,mindig 20 mp legyen.Szerintem kihagytam valamit, csak nem tudom hogy mit
Kezdo vagyok meg a temaban, de szeretnem ezt a feladatot valahogy tokeletesen megoldani.
Ime a program:
Kód: Egész kijelölése
/* Inditastiltas autohoz. Irta: Tajti Laszlo.
Felhasznalt eszkozok:
Arduino Uno, (NANO ha Unoval mar mukodik, helymegtakaritas vegett)
RFID-RC522 kartyaolvaso,
Piezo zummer,
Ketszinu led, ket kivezetessel,
Relepanel. (alacsony-aktiv)
Mukodes: Ervenyes katya leolvasasa utan, a relekimenet 20 masodpercre aktivalodik,
a LED pirosrol-zoldre valt.
Ha a gyujtast raadjuk az autora, a rele 20 masodperc utan is aktiv marad.
Ha levesszuk a gyujtast, a rele 20 masodperc mulva elenged, es a LED pirosra valt.
RFID olvaso bekotese:
MOSI:Pin 11
MISO:Pin 12
SCK:Pin 13
SS:Pin 10
RST:Pin 9
*/
#include <SPI.h>
#include <RFID.h>
RFID rfid(10,9); // Olvaso SS es RST kivezetese
int buzzPin = 3; // kimenet a zummerhez
int relay = 4; // Rele kimenet
int led = 6; //LED Anod
int led1 = 7; //LED Katod
int gyujtas = 2; // bemenet a gyujtas erzekelesere
void setup(){
pinMode(relay, OUTPUT);
pinMode(led, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(gyujtas, INPUT);
//Serial.begin(9600); // Soros kommunikacio, a kartyaadatok kiolvasasahoz.
SPI.begin();
rfid.init();
}
void loop(){
if(digitalRead(gyujtas) == HIGH) // Bemenet magas (gyujtas raadva) Rele huzva marad.
// Az auto lefulladasa eseten hasznos.
// a megadott idon belul, nem kell ujra olvastatni.
delay(20000); // Gyujtas leveve, Rele 20 masodperc utan elenged.
{
if(digitalRead(gyujtas) == LOW) // Bemenet alacsony,rele elengedve.
{
digitalWrite(relay,HIGH); // Rele elengedve- gyujtas blokkolva
// Esetleges akku levetelekor, es ujra
{ // csatlakoztatasanal, az auto blokkolva marad.
digitalWrite(led, HIGH); // LED pirosan vilagit
digitalWrite(led1, LOW);
}
{
if (rfid.isCard()) // Kartya erzekelve
{
//Serial.print("Card detected, ");
if (rfid.readCardSerial()) // Kartya adatok kiolvasasa
{
//Serial.print("the card's number is: ");
//Serial.print(rfid.serNum[0]);
//Serial.print(".");
//Serial.print(rfid.serNum[1]);
//Serial.print("."); // A kartyaadatokat kiirathatjuk,
//Serial.print(rfid.serNum[2]); // a soros monitorra. Az uj kartyak
//Serial.print("."); // ervenyesitesenel hasznos.
//Serial.print(rfid.serNum[3]);
//Serial.print(".");
//Serial.print(rfid.serNum[4]);
//Serial.println(" ");
}
if(rfid.serNum[0]==180&&rfid.serNum[1]==166&&rfid.serNum[2]==20&&rfid.serNum[3]==29&&rfid.serNum[4]==27
||
rfid.serNum[0]==164&&rfid.serNum[1]==169&&rfid.serNum[2]==82&&rfid.serNum[3]==46&&rfid.serNum[4]==113)
// Ha a kartyaazonositok minden tagja egyezik,
{
digitalWrite(led,LOW); // A LED zoldre valt
digitalWrite(led1,HIGH);
digitalWrite(relay,LOW); // A rele meghuz, gyujtasblokk feloldva
analogWrite(3,250); // Piezo megszolal
delay(1000);
analogWrite(3,0);
if(digitalRead(gyujtas) == LOW) // Ha a bemenet alacsony, (nincs rajta a gyujtas)
delay(20000); // A rele 20 mp.-ig huz
}
}
}
}
}
rfid.halt();
}
Ha van otletetek,hogy mi lehet a hiba, azt elore is megkoszonnem.
Udv.
T.L.
Admin: Legközelebb használd kódbeszúráshoz a CODE gombot!
