Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. My Project
  3. RFID Garage door opener

RFID Garage door opener

Scheduled Pinned Locked Moved My Project
47 Posts 23 Posters 37.5k Views 26 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Mercury69M Mercury69

    @Rod-MacPherson
    Dear Rod, thank you for the suggestion you gave me.
    Following the instruction you indicated me, I was able to make the sketch working with new MySensors 2.0 library.

    Considering that I'm not a programmer, it was quite easy to make the sketch working.

    Thank you again for your suggestion and off course thank you to BartE for the good original work he did.

    If someone need new sketch working with library 2.0, feel free to ask me.

    Michel - ItM Offline
    Michel - ItM Offline
    Michel - It
    wrote on last edited by
    #30

    @Mercury69 you can post the sketch ?

    1 Reply Last reply
    0
    • Mercury69M Mercury69

      @Rod-MacPherson
      Dear Rod, thank you for the suggestion you gave me.
      Following the instruction you indicated me, I was able to make the sketch working with new MySensors 2.0 library.

      Considering that I'm not a programmer, it was quite easy to make the sketch working.

      Thank you again for your suggestion and off course thank you to BartE for the good original work he did.

      If someone need new sketch working with library 2.0, feel free to ask me.

      J Offline
      J Offline
      jeti
      wrote on last edited by
      #31

      @Mercury69 I would also love to have a look at your scetch!

      1 Reply Last reply
      0
      • miroM Offline
        miroM Offline
        miro
        wrote on last edited by
        #32

        @Mercury69

        Please, I would also like to see your code if it possible.

        1 Reply Last reply
        0
        • cadetC Offline
          cadetC Offline
          cadet
          wrote on last edited by
          #33

          Hi Rod

          Can you modify your code for 2.0 lib ?

          Thank you
          Andrey

          1 Reply Last reply
          0
          • gohanG Offline
            gohanG Offline
            gohan
            Mod
            wrote on last edited by gohan
            #34

            Here is the new code for lib 2.0, but I am having some problem with initialization of rc522. I connected RST tu D7 and SDA to D8. Any idea what to look for?

            /*
            * ----------------------------------------------------------------------------
            * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid
            * for further details and other examples.
            *
            * NOTE: The library file MFRC522.h has a lot of useful info. Please read it.
            *
            * Released into the public domain.
            * ----------------------------------------------------------------------------
            * Example sketch/program showing how to read data from a PICC (that is: a RFID
            * Tag or Card) using a MFRC522 based RFID Reader on the Arduino SPI interface.
            *
            * When the Arduino and the MFRC522 module are connected (see the pin layout
            * below), load this sketch into Arduino IDE then verify/compile and upload it.
            * To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M).
            * When you present a PICC (that is: a RFID Tag or Card) at reading distance
            * of the MFRC522 Reader/PCD, the serial output will show the ID/UID, type and
            * any data blocks it can read. Note: you may see "Timeout in communication"
            * messages when removing the PICC from reading distance too early.
            *
            * If your reader supports it, this sketch/program will read all the PICCs
            * presented (that is: multiple tag reading). So if you stack two or more
            * PICCs on top of each other and present them to the reader, it will first
            * output all details of the first and then the next PICC. Note that this
            * may take some time as all data blocks are dumped, so keep the PICCs at
            * reading distance until complete.
            *
            * Typical pin layout used:
            * -----------------------------------------------------------------------------------------
            *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
            *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
            * Signal      Pin          Pin           Pin       Pin        Pin              Pin
            * -----------------------------------------------------------------------------------------
            * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
            * SPI SS      SDA(SS)      10            53        D10        10               10
            * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
            * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
            * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
            */
            
            /*
            RFID Garagedoor opener by Bart Eversdijk
            
            This sketch is to open a Garage door with an mifare RIFD-tag
            
            For an Arduino Nano v3
            Connection wiring :
            - nrf24l01+ as descibed on the MySensors website
            - MFRC522 reader/writer as described above EXCEPT for pin D9 and D10:  connect RST i.s.o. pin D9 to pin D7 and connect SDA(SS) i.s.o. pin D10 to pin D8
            - LED with 470ohm resistor between GMD and pin A3
            - push button between GND and pin D5
            - 5v relays coil between GND and  pin D4 -> switch pins of the relays should be connected in parallel with your garage door push button.
            
            Features:
            This project can record up to 18 RFID-"tags"
            These card IDs are stored in to EEPROM by keeping them next to the RFID reader when the system in program mode. (Slow blinking LED) When a card is accepted as new card the LED will blink fast for a short time.
            To keep the master-tags (choose your own) next to the RFID reader when pressing the push button. To clear all cards (except the master card) press the push button in program mode for 6 seconds. The LED will now fast blink for a couple of seconds.
            
            Your garage your can be opened by keep a registered RFID tag next to the reader or by clicking the open icon on lock node presented by this plugin.
            By by-passing the alarm node presented by this plug in the RFID will be temporarily disabled.
            When an incorrect (not registered) RFID tag is scanned the alarm is triggered to detect illegal scan attempts
            
            */ 
            #include <MySensors.h>
            #include <SPI.h>
            #include <MFRC522.h> 
            #include <Bounce2.h>
            
            #define RF_INIT_DELAY   125
            #define ONE_SEC         1000
            #define MAX_CARDS       18
            #define PROG_WAIT       10
            #define HEARTBEAT       10
            #define BAUD            115200
            
            /*Pin definitions*/
            #define LED_PIN         A3
            #define GARAGEPIN       4
            #define SWITCH_PIN      5
            #define RST_PIN		7		//  MFRC 
            #define SS_PIN		8		//  MFRC 
            
            MFRC522      mfrc522(SS_PIN, RST_PIN);	// Create MFRC522 instance
            MFRC522::Uid olduid;
            MFRC522::Uid masterkey = { 10,{ 0,0,0,0, 0,0,0,0, 0,0 },  0 };
            
            byte       countValidCards = 0;
            MFRC522::Uid validCards[MAX_CARDS];
            
            void       ShowCardData(MFRC522::Uid* uid);
            bool       sameUid(MFRC522::Uid* old, MFRC522::Uid* check);
            void       copyUid(MFRC522::Uid* src, MFRC522::Uid* dest);
            bool       isValidCard(MFRC522::Uid* uid);
            int        releasecnt = 0;
            
            #define    CHILD_ID_ALARM    1
            #define    CHILD_ID_LOCK     2
            Bounce     debouncer = Bounce();
            
            int        oldSwitchValue = -1;
            int        switchValue = 0;
            long       timer = -1;
            bool       programmode = false;
            bool       ledon;
            int        programTimer = 0;
            bool       armed = true;
            unsigned long lastTime = 0;
            
            MyMessage  lockMsg(CHILD_ID_LOCK, V_LOCK_STATUS);
            MyMessage  lockArmMsg(CHILD_ID_ALARM, V_ARMED);
            MyMessage  wrongMsg(CHILD_ID_ALARM, V_TRIPPED);
            
            void setup() {
            	Serial.begin(BAUD);		// Initialize serial communications with the PC
            	pinMode(GARAGEPIN, OUTPUT);     // Initialise in/output ports
            
            									// Make sure MFRC will be disabled on the SPI bus
            	pinMode(RST_PIN, OUTPUT);
            	digitalWrite(RST_PIN, LOW);
            	pinMode(SS_PIN, OUTPUT);
            	digitalWrite(SS_PIN, LOW);
            
            	pinMode(LED_PIN, OUTPUT);
            	digitalWrite(LED_PIN, LOW);
            	// Setup the button
            	pinMode(SWITCH_PIN, INPUT);
            	// Activate internal pull-up
            	digitalWrite(SWITCH_PIN, HIGH);
            
            	// After setting up the button, setup debouncer
            	debouncer.attach(SWITCH_PIN);
            	debouncer.interval(5);
            
            	// Init mysensors library
            	
            	sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
            
            	// Register all sensors to gw (they will be created as child devices)
            	present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
            	present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
            
            	recallEeprom();
            
            	// Init MFRC RFID sensor
            	SPI.begin();			// Init SPI bus
            	mfrc522.PCD_Init();		// Init MFRC522
            	ShowReaderDetails();	        // Show details of PCD - MFRC522 Card Reader details
            
            	send(lockArmMsg.set(armed));
            	Serial.println(F("Init done..."));
            }
            
            void loop() {
            	timer++;
            	delay(HEARTBEAT);
            	debouncer.update();
            
            	// Get the update value
            	int switchValue = debouncer.read();
            	if (switchValue != oldSwitchValue) {
            		// Send in the new value
            		Serial.print(F("Switch "));
            		Serial.println(switchValue);
            
            		if (switchValue && programmode) {
            			lastTime = millis() / 1000;
            		}
            
            		if (!switchValue && programmode && lastTime > 0) {
            			if ((millis() / 1000) - lastTime > 3) {
            				Serial.println(F("Reset all cards"));
            				countValidCards = 0;
            				blinkFast(50);
            			}
            			else {
            				Serial.println(F("Program off"));
            				digitalWrite(LED_PIN, LOW);
            				programmode = false;
            
            				storeEeprom();
            			}
            		}
            
            		if (!switchValue) {
            			programTimer = 0;
            		}
            		oldSwitchValue = switchValue;
            	}
            
            	if (programmode && ((timer % (ONE_SEC / HEARTBEAT)) == 0)) {
            		ledon = !ledon;
            		digitalWrite(LED_PIN, ledon);
            		programTimer++;
            
            		// Stop program mode after 20 sec inactivity
            		if (programTimer > PROG_WAIT) {
            			programmode = false;
            			digitalWrite(LED_PIN, false);
            			Serial.println(F("Program expired"));
            		}
            	}
            
            	if ((timer % (200 / HEARTBEAT)) == 0) {
            		// Look for new cards
            		if (!mfrc522.PICC_IsNewCardPresent()) {
            			if (releasecnt > 0) {
            				releasecnt--;
            				if (!releasecnt) {
            					olduid.size = 0;
            					Serial.println(F("release"));
            				}
            			}
            			return;
            		}
            		releasecnt = 5;
            
            		// Select one of the cards
            		if (!mfrc522.PICC_ReadCardSerial()) {
            			return;
            		}
            
            		// Dump debug info about the card; PICC_HaltA() is automatically called
            		//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
            		if (!olduid.size || !sameUid(&(mfrc522.uid), &olduid)) {
            			ShowCardData(&(mfrc522.uid));
            			copyUid(&(mfrc522.uid), &olduid);
            			if (isValidCard(&olduid)) {
            				OpenDoor(programmode);
            			}
            			else {
            
            				if (sameUid(&(mfrc522.uid), &masterkey)) {
            					// Only switch in program mode when mastercard is found AND the program button is pressed
            					if (switchValue) {
            						Serial.println(F("Program mode"));
            						programmode = true;
            						programTimer = 0;
            						lastTime = 0;
            					}
            				}
            				else {
            					if (programmode) {
            						Serial.println(F("new card"));
            						programTimer = 0;
            
            						if (countValidCards < MAX_CARDS)
            						{
            							// Add card to list...
            							copyUid(&(mfrc522.uid), &validCards[countValidCards]);
            							countValidCards++;
            							blinkFast(15);
            						}
            					}
            					else {
            						Serial.println(F("Invalid card"));
            						if (armed) {
            							send(wrongMsg.set(1));
            							delay(2000);
            							send(wrongMsg.set(0));
            						}
            					}
            				}
            			}
            		}
            	}
            }
            
            void ShowCardData(MFRC522::Uid* uid) {
            	Serial.print(F("Card UID:"));
            	for (byte i = 0; i < uid->size; i++) {
            		if (uid->uidByte[i] < 0x10) {
            			Serial.print(F(" 0"));
            		}
            		else {
            			Serial.print(F(" "));
            		}
            		Serial.print(uid->uidByte[i], HEX);
            	}
            	Serial.println();
            }
            
            void copyUid(MFRC522::Uid* src, MFRC522::Uid* dest)
            {
            	dest->size = src->size;
            	dest->sak = src->sak;
            
            	for (byte i = 0; i < src->size; i++) {
            		dest->uidByte[i] = src->uidByte[i];
            	}
            }
            
            bool sameUid(MFRC522::Uid* old, MFRC522::Uid* check)
            {
            	if (old->size != check->size) {
            		return false;
            	}
            	for (byte i = 0; i < old->size; i++) {
            		if (old->uidByte[i] != check->uidByte[i]) {
            			return false;
            		}
            	}
            	return true;
            }
            
            bool isValidCard(MFRC522::Uid* uid)
            {
            	for (byte i = 0; i < countValidCards; i++) {
            		if (validCards[i].size != uid->size) {
            			break;
            		}
            		for (int j = 0; j < uid->size; j++) {
            			if (validCards[i].uidByte[j] != uid->uidByte[j]) {
            				break;
            			}
            			if (j == (uid->size - 1)) {
            				return true;
            			}
            		}
            	}
            	return false;
            }
            
            
            void storeEeprom()
            {
            	byte address = 0;
            	saveState(address++, countValidCards);
            
            	for (byte i = 0; i < countValidCards; i++) {
            		saveState(address++, validCards[i].size);
            		for (byte j = 0; j < 10; j++) {
            			saveState(address++, validCards[i].uidByte[j]);
            		}
            	}
            }
            
            void recallEeprom()
            {
            	byte address = 0;
            
            	countValidCards = loadState(address++);
            	if (countValidCards > MAX_CARDS) {
            		Serial.println(F("Not a valid EEPROM reading set to default"));
            		countValidCards = 0;
            		storeEeprom();
            		return;
            	}
            
            	for (byte i = 0; i < countValidCards; i++) {
            		validCards[i].size = loadState(address++);
            		for (byte j = 0; j < 10; j++) {
            			validCards[i].uidByte[j] = loadState(address++);
            		}
            	}
            
            }
            
            void blinkFast(int times)
            {
            	for (int i = 0; i < times; i++) {
            		ledon = !ledon;
            		digitalWrite(LED_PIN, ledon);
            		delay(100);
            	}
            }
            
            void OpenDoor(bool fakeOpen)
            {
            	Serial.println(F("Open door!"));
            	send(lockMsg.set(false));
            
            	if (!fakeOpen) {
            		digitalWrite(LED_PIN, HIGH);
            		digitalWrite(GARAGEPIN, HIGH);
            	}
            	delay(1000);
            
            	if (!fakeOpen) {
            		digitalWrite(GARAGEPIN, LOW);
            		digitalWrite(LED_PIN, LOW);
            	}
            
            	send(lockMsg.set(true));
            }
            
            void ShowReaderDetails() {
            	// Get the MFRC522 software version
            	byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
            	Serial.print(F("MFRC522 Software Version: 0x"));
            	Serial.print(v, HEX);
            	if (v == 0x91) {
            		Serial.print(F(" = v1.0"));
            	}
            	else if (v == 0x92) {
            		Serial.print(F(" = v2.0"));
            	}
            	else {
            		Serial.print(F(" (unknown)"));
            	}
            	Serial.println("");
            
            	// When 0x00 or 0xFF is returned, communication probably failed
            	if ((v == 0x00) || (v == 0xFF)) {
            		Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
            	}
            }
            
            
            void incomingMessage(const MyMessage &message)
            {
            	if (message.type == V_LOCK_STATUS) {
            		// Change relay state
            		if (!message.getBool()) {
            			OpenDoor(false);
            		}
            
            		// Write some debug info
            		Serial.print(F("Lock status: "));
            		Serial.println(message.getBool());
            	}
            	else
            	{
            		if (message.type == V_ARMED) {
            			// Change relay state
            			armed = message.getBool();
            
            			// Write some debug info
            			Serial.print(F("Arm status: "));
            			Serial.println(message.getBool());
            		}
            		else
            		{
            			// Write some debug info
            			Serial.print(F("Incoming msg type: "));
            			Serial.print(message.type);
            			Serial.print(F(" id: "));
            			Serial.print(message.sensor);
            			Serial.print(F(" content: "));
            			Serial.println(message.getInt());
            		}
            	}
            }
            
            BartEB 2 Replies Last reply
            0
            • gohanG gohan

              Here is the new code for lib 2.0, but I am having some problem with initialization of rc522. I connected RST tu D7 and SDA to D8. Any idea what to look for?

              /*
              * ----------------------------------------------------------------------------
              * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid
              * for further details and other examples.
              *
              * NOTE: The library file MFRC522.h has a lot of useful info. Please read it.
              *
              * Released into the public domain.
              * ----------------------------------------------------------------------------
              * Example sketch/program showing how to read data from a PICC (that is: a RFID
              * Tag or Card) using a MFRC522 based RFID Reader on the Arduino SPI interface.
              *
              * When the Arduino and the MFRC522 module are connected (see the pin layout
              * below), load this sketch into Arduino IDE then verify/compile and upload it.
              * To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M).
              * When you present a PICC (that is: a RFID Tag or Card) at reading distance
              * of the MFRC522 Reader/PCD, the serial output will show the ID/UID, type and
              * any data blocks it can read. Note: you may see "Timeout in communication"
              * messages when removing the PICC from reading distance too early.
              *
              * If your reader supports it, this sketch/program will read all the PICCs
              * presented (that is: multiple tag reading). So if you stack two or more
              * PICCs on top of each other and present them to the reader, it will first
              * output all details of the first and then the next PICC. Note that this
              * may take some time as all data blocks are dumped, so keep the PICCs at
              * reading distance until complete.
              *
              * Typical pin layout used:
              * -----------------------------------------------------------------------------------------
              *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
              *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
              * Signal      Pin          Pin           Pin       Pin        Pin              Pin
              * -----------------------------------------------------------------------------------------
              * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
              * SPI SS      SDA(SS)      10            53        D10        10               10
              * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
              * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
              * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
              */
              
              /*
              RFID Garagedoor opener by Bart Eversdijk
              
              This sketch is to open a Garage door with an mifare RIFD-tag
              
              For an Arduino Nano v3
              Connection wiring :
              - nrf24l01+ as descibed on the MySensors website
              - MFRC522 reader/writer as described above EXCEPT for pin D9 and D10:  connect RST i.s.o. pin D9 to pin D7 and connect SDA(SS) i.s.o. pin D10 to pin D8
              - LED with 470ohm resistor between GMD and pin A3
              - push button between GND and pin D5
              - 5v relays coil between GND and  pin D4 -> switch pins of the relays should be connected in parallel with your garage door push button.
              
              Features:
              This project can record up to 18 RFID-"tags"
              These card IDs are stored in to EEPROM by keeping them next to the RFID reader when the system in program mode. (Slow blinking LED) When a card is accepted as new card the LED will blink fast for a short time.
              To keep the master-tags (choose your own) next to the RFID reader when pressing the push button. To clear all cards (except the master card) press the push button in program mode for 6 seconds. The LED will now fast blink for a couple of seconds.
              
              Your garage your can be opened by keep a registered RFID tag next to the reader or by clicking the open icon on lock node presented by this plugin.
              By by-passing the alarm node presented by this plug in the RFID will be temporarily disabled.
              When an incorrect (not registered) RFID tag is scanned the alarm is triggered to detect illegal scan attempts
              
              */ 
              #include <MySensors.h>
              #include <SPI.h>
              #include <MFRC522.h> 
              #include <Bounce2.h>
              
              #define RF_INIT_DELAY   125
              #define ONE_SEC         1000
              #define MAX_CARDS       18
              #define PROG_WAIT       10
              #define HEARTBEAT       10
              #define BAUD            115200
              
              /*Pin definitions*/
              #define LED_PIN         A3
              #define GARAGEPIN       4
              #define SWITCH_PIN      5
              #define RST_PIN		7		//  MFRC 
              #define SS_PIN		8		//  MFRC 
              
              MFRC522      mfrc522(SS_PIN, RST_PIN);	// Create MFRC522 instance
              MFRC522::Uid olduid;
              MFRC522::Uid masterkey = { 10,{ 0,0,0,0, 0,0,0,0, 0,0 },  0 };
              
              byte       countValidCards = 0;
              MFRC522::Uid validCards[MAX_CARDS];
              
              void       ShowCardData(MFRC522::Uid* uid);
              bool       sameUid(MFRC522::Uid* old, MFRC522::Uid* check);
              void       copyUid(MFRC522::Uid* src, MFRC522::Uid* dest);
              bool       isValidCard(MFRC522::Uid* uid);
              int        releasecnt = 0;
              
              #define    CHILD_ID_ALARM    1
              #define    CHILD_ID_LOCK     2
              Bounce     debouncer = Bounce();
              
              int        oldSwitchValue = -1;
              int        switchValue = 0;
              long       timer = -1;
              bool       programmode = false;
              bool       ledon;
              int        programTimer = 0;
              bool       armed = true;
              unsigned long lastTime = 0;
              
              MyMessage  lockMsg(CHILD_ID_LOCK, V_LOCK_STATUS);
              MyMessage  lockArmMsg(CHILD_ID_ALARM, V_ARMED);
              MyMessage  wrongMsg(CHILD_ID_ALARM, V_TRIPPED);
              
              void setup() {
              	Serial.begin(BAUD);		// Initialize serial communications with the PC
              	pinMode(GARAGEPIN, OUTPUT);     // Initialise in/output ports
              
              									// Make sure MFRC will be disabled on the SPI bus
              	pinMode(RST_PIN, OUTPUT);
              	digitalWrite(RST_PIN, LOW);
              	pinMode(SS_PIN, OUTPUT);
              	digitalWrite(SS_PIN, LOW);
              
              	pinMode(LED_PIN, OUTPUT);
              	digitalWrite(LED_PIN, LOW);
              	// Setup the button
              	pinMode(SWITCH_PIN, INPUT);
              	// Activate internal pull-up
              	digitalWrite(SWITCH_PIN, HIGH);
              
              	// After setting up the button, setup debouncer
              	debouncer.attach(SWITCH_PIN);
              	debouncer.interval(5);
              
              	// Init mysensors library
              	
              	sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
              
              	// Register all sensors to gw (they will be created as child devices)
              	present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
              	present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
              
              	recallEeprom();
              
              	// Init MFRC RFID sensor
              	SPI.begin();			// Init SPI bus
              	mfrc522.PCD_Init();		// Init MFRC522
              	ShowReaderDetails();	        // Show details of PCD - MFRC522 Card Reader details
              
              	send(lockArmMsg.set(armed));
              	Serial.println(F("Init done..."));
              }
              
              void loop() {
              	timer++;
              	delay(HEARTBEAT);
              	debouncer.update();
              
              	// Get the update value
              	int switchValue = debouncer.read();
              	if (switchValue != oldSwitchValue) {
              		// Send in the new value
              		Serial.print(F("Switch "));
              		Serial.println(switchValue);
              
              		if (switchValue && programmode) {
              			lastTime = millis() / 1000;
              		}
              
              		if (!switchValue && programmode && lastTime > 0) {
              			if ((millis() / 1000) - lastTime > 3) {
              				Serial.println(F("Reset all cards"));
              				countValidCards = 0;
              				blinkFast(50);
              			}
              			else {
              				Serial.println(F("Program off"));
              				digitalWrite(LED_PIN, LOW);
              				programmode = false;
              
              				storeEeprom();
              			}
              		}
              
              		if (!switchValue) {
              			programTimer = 0;
              		}
              		oldSwitchValue = switchValue;
              	}
              
              	if (programmode && ((timer % (ONE_SEC / HEARTBEAT)) == 0)) {
              		ledon = !ledon;
              		digitalWrite(LED_PIN, ledon);
              		programTimer++;
              
              		// Stop program mode after 20 sec inactivity
              		if (programTimer > PROG_WAIT) {
              			programmode = false;
              			digitalWrite(LED_PIN, false);
              			Serial.println(F("Program expired"));
              		}
              	}
              
              	if ((timer % (200 / HEARTBEAT)) == 0) {
              		// Look for new cards
              		if (!mfrc522.PICC_IsNewCardPresent()) {
              			if (releasecnt > 0) {
              				releasecnt--;
              				if (!releasecnt) {
              					olduid.size = 0;
              					Serial.println(F("release"));
              				}
              			}
              			return;
              		}
              		releasecnt = 5;
              
              		// Select one of the cards
              		if (!mfrc522.PICC_ReadCardSerial()) {
              			return;
              		}
              
              		// Dump debug info about the card; PICC_HaltA() is automatically called
              		//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
              		if (!olduid.size || !sameUid(&(mfrc522.uid), &olduid)) {
              			ShowCardData(&(mfrc522.uid));
              			copyUid(&(mfrc522.uid), &olduid);
              			if (isValidCard(&olduid)) {
              				OpenDoor(programmode);
              			}
              			else {
              
              				if (sameUid(&(mfrc522.uid), &masterkey)) {
              					// Only switch in program mode when mastercard is found AND the program button is pressed
              					if (switchValue) {
              						Serial.println(F("Program mode"));
              						programmode = true;
              						programTimer = 0;
              						lastTime = 0;
              					}
              				}
              				else {
              					if (programmode) {
              						Serial.println(F("new card"));
              						programTimer = 0;
              
              						if (countValidCards < MAX_CARDS)
              						{
              							// Add card to list...
              							copyUid(&(mfrc522.uid), &validCards[countValidCards]);
              							countValidCards++;
              							blinkFast(15);
              						}
              					}
              					else {
              						Serial.println(F("Invalid card"));
              						if (armed) {
              							send(wrongMsg.set(1));
              							delay(2000);
              							send(wrongMsg.set(0));
              						}
              					}
              				}
              			}
              		}
              	}
              }
              
              void ShowCardData(MFRC522::Uid* uid) {
              	Serial.print(F("Card UID:"));
              	for (byte i = 0; i < uid->size; i++) {
              		if (uid->uidByte[i] < 0x10) {
              			Serial.print(F(" 0"));
              		}
              		else {
              			Serial.print(F(" "));
              		}
              		Serial.print(uid->uidByte[i], HEX);
              	}
              	Serial.println();
              }
              
              void copyUid(MFRC522::Uid* src, MFRC522::Uid* dest)
              {
              	dest->size = src->size;
              	dest->sak = src->sak;
              
              	for (byte i = 0; i < src->size; i++) {
              		dest->uidByte[i] = src->uidByte[i];
              	}
              }
              
              bool sameUid(MFRC522::Uid* old, MFRC522::Uid* check)
              {
              	if (old->size != check->size) {
              		return false;
              	}
              	for (byte i = 0; i < old->size; i++) {
              		if (old->uidByte[i] != check->uidByte[i]) {
              			return false;
              		}
              	}
              	return true;
              }
              
              bool isValidCard(MFRC522::Uid* uid)
              {
              	for (byte i = 0; i < countValidCards; i++) {
              		if (validCards[i].size != uid->size) {
              			break;
              		}
              		for (int j = 0; j < uid->size; j++) {
              			if (validCards[i].uidByte[j] != uid->uidByte[j]) {
              				break;
              			}
              			if (j == (uid->size - 1)) {
              				return true;
              			}
              		}
              	}
              	return false;
              }
              
              
              void storeEeprom()
              {
              	byte address = 0;
              	saveState(address++, countValidCards);
              
              	for (byte i = 0; i < countValidCards; i++) {
              		saveState(address++, validCards[i].size);
              		for (byte j = 0; j < 10; j++) {
              			saveState(address++, validCards[i].uidByte[j]);
              		}
              	}
              }
              
              void recallEeprom()
              {
              	byte address = 0;
              
              	countValidCards = loadState(address++);
              	if (countValidCards > MAX_CARDS) {
              		Serial.println(F("Not a valid EEPROM reading set to default"));
              		countValidCards = 0;
              		storeEeprom();
              		return;
              	}
              
              	for (byte i = 0; i < countValidCards; i++) {
              		validCards[i].size = loadState(address++);
              		for (byte j = 0; j < 10; j++) {
              			validCards[i].uidByte[j] = loadState(address++);
              		}
              	}
              
              }
              
              void blinkFast(int times)
              {
              	for (int i = 0; i < times; i++) {
              		ledon = !ledon;
              		digitalWrite(LED_PIN, ledon);
              		delay(100);
              	}
              }
              
              void OpenDoor(bool fakeOpen)
              {
              	Serial.println(F("Open door!"));
              	send(lockMsg.set(false));
              
              	if (!fakeOpen) {
              		digitalWrite(LED_PIN, HIGH);
              		digitalWrite(GARAGEPIN, HIGH);
              	}
              	delay(1000);
              
              	if (!fakeOpen) {
              		digitalWrite(GARAGEPIN, LOW);
              		digitalWrite(LED_PIN, LOW);
              	}
              
              	send(lockMsg.set(true));
              }
              
              void ShowReaderDetails() {
              	// Get the MFRC522 software version
              	byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
              	Serial.print(F("MFRC522 Software Version: 0x"));
              	Serial.print(v, HEX);
              	if (v == 0x91) {
              		Serial.print(F(" = v1.0"));
              	}
              	else if (v == 0x92) {
              		Serial.print(F(" = v2.0"));
              	}
              	else {
              		Serial.print(F(" (unknown)"));
              	}
              	Serial.println("");
              
              	// When 0x00 or 0xFF is returned, communication probably failed
              	if ((v == 0x00) || (v == 0xFF)) {
              		Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
              	}
              }
              
              
              void incomingMessage(const MyMessage &message)
              {
              	if (message.type == V_LOCK_STATUS) {
              		// Change relay state
              		if (!message.getBool()) {
              			OpenDoor(false);
              		}
              
              		// Write some debug info
              		Serial.print(F("Lock status: "));
              		Serial.println(message.getBool());
              	}
              	else
              	{
              		if (message.type == V_ARMED) {
              			// Change relay state
              			armed = message.getBool();
              
              			// Write some debug info
              			Serial.print(F("Arm status: "));
              			Serial.println(message.getBool());
              		}
              		else
              		{
              			// Write some debug info
              			Serial.print(F("Incoming msg type: "));
              			Serial.print(message.type);
              			Serial.print(F(" id: "));
              			Serial.print(message.sensor);
              			Serial.print(F(" content: "));
              			Serial.println(message.getInt());
              		}
              	}
              }
              
              BartEB Offline
              BartEB Offline
              BartE
              Contest Winner
              wrote on last edited by BartE
              #35

              @gohan the MIFARE chip needs to be disabled from the SPI bus before the radio is initialized

              so put this piece of code in the before() function

              void before() {
              	// Make sure MFRC is disabled from the SPI bus
              	pinMode(RST_PIN, OUTPUT);
              	digitalWrite(RST_PIN, LOW);
              	pinMode(SS_PIN, OUTPUT);
              	digitalWrite(SS_PIN, LOW);
              }
              

              The MySensors library will iniitialize the MyS before the setup() function but after the before()

              these lines

              sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
              // Register all sensors to gw (they will be created as child devices)
              present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
              present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
              

              Should be part of

              void presentation() {
                   sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
                   // Register all sensors to gw (they will be created as child devices)
                   
                   present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
                   present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
              }
              

              and the function:

              void incomingMessage(const MyMessage &message) 
              

              should be renamed to

              void receive(const MyMessage &message)
              
              gohanG 1 Reply Last reply
              0
              • BartEB BartE

                @gohan the MIFARE chip needs to be disabled from the SPI bus before the radio is initialized

                so put this piece of code in the before() function

                void before() {
                	// Make sure MFRC is disabled from the SPI bus
                	pinMode(RST_PIN, OUTPUT);
                	digitalWrite(RST_PIN, LOW);
                	pinMode(SS_PIN, OUTPUT);
                	digitalWrite(SS_PIN, LOW);
                }
                

                The MySensors library will iniitialize the MyS before the setup() function but after the before()

                these lines

                sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
                // Register all sensors to gw (they will be created as child devices)
                present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
                present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
                

                Should be part of

                void presentation() {
                     sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
                     // Register all sensors to gw (they will be created as child devices)
                     
                     present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
                     present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
                }
                

                and the function:

                void incomingMessage(const MyMessage &message) 
                

                should be renamed to

                void receive(const MyMessage &message)
                
                gohanG Offline
                gohanG Offline
                gohan
                Mod
                wrote on last edited by
                #36

                It didn't change much, here is the log

                0 MCO:BGN:INIT NODE,CP=RNNNA--,VER=2.1.1
                3 MCO:BGN:BFR
                4 TSM:INIT
                5 TSF:WUR:MS=0
                13 TSM:INIT:TSP OK
                14 TSM:INIT:STATID=4
                16 TSF:SID:OK,ID=4
                18 TSM:FPAR
                59 TSF:MSG:SEND,4-4-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
                803 TSF:MSG:READ,0-0-4,s=255,c=3,t=8,pt=1,l=1,sg=0:0
                808 TSF:MSG:FPAR OK,ID=0,D=1
                2067 TSM:FPAR:OK
                2068 TSM:ID
                2069 TSM:ID:OK
                2071 TSM:UPL
                2075 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
                2082 TSF:MSG:READ,0-0-4,s=255,c=3,t=25,pt=1,l=1,sg=0:1
                2087 TSF:MSG:PONG RECV,HP=1
                2089 TSM:UPL:OK
                2092 TSM:READY:ID=4,PAR=0,DIS=1
                2135 !TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=NACK:0100
                4143 TSF:MSG:SEND,4-4-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=1,st=OK:2.1.1
                4152 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
                4250 TSF:MSG:READ,0-0-4,s=255,c=3,t=6,pt=0,l=1,sg=0:M
                4261 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=11,pt=0,l=11,sg=0,ft=0,st=OK:RFID Garage
                4272 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:1.1
                4406 TSF:MSG:SEND,4-4-0-0,s=2,c=0,t=19,pt=0,l=0,sg=0,ft=0,st=OK:
                4539 TSF:MSG:SEND,4-4-0-0,s=1,c=0,t=1,pt=0,l=0,sg=0,ft=0,st=OK:
                4670 MCO:REG:REQ
                4674 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
                4685 TSF:MSG:READ,0-0-4,s=255,c=3,t=27,pt=1,l=1,sg=0:1
                4690 MCO:PIM:NODE REG=1
                4692 MCO:BGN:STP
                MFRC522 Software Version: 0x0 (unknown)
                WARNING: Communication failure, is the MFRC522 properly connected?
                4755 TSF:MSG:SEND,4-4-0-0,s=1,c=1,t=15,pt=1,l=1,sg=0,ft=0,st=OK:1
                Init done...
                4761 MCO:BGN:INIT OK,TSP=1
                Switch 1
                

                Here is also the code with the changes you suggested

                /*
                * ----------------------------------------------------------------------------
                * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid
                * for further details and other examples.
                *
                * NOTE: The library file MFRC522.h has a lot of useful info. Please read it.
                *
                * Released into the public domain.
                * ----------------------------------------------------------------------------
                * Example sketch/program showing how to read data from a PICC (that is: a RFID
                * Tag or Card) using a MFRC522 based RFID Reader on the Arduino SPI interface.
                *
                * When the Arduino and the MFRC522 module are connected (see the pin layout
                * below), load this sketch into Arduino IDE then verify/compile and upload it.
                * To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M).
                * When you present a PICC (that is: a RFID Tag or Card) at reading distance
                * of the MFRC522 Reader/PCD, the serial output will show the ID/UID, type and
                * any data blocks it can read. Note: you may see "Timeout in communication"
                * messages when removing the PICC from reading distance too early.
                *
                * If your reader supports it, this sketch/program will read all the PICCs
                * presented (that is: multiple tag reading). So if you stack two or more
                * PICCs on top of each other and present them to the reader, it will first
                * output all details of the first and then the next PICC. Note that this
                * may take some time as all data blocks are dumped, so keep the PICCs at
                * reading distance until complete.
                *
                * Typical pin layout used:
                * -----------------------------------------------------------------------------------------
                *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
                *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
                * Signal      Pin          Pin           Pin       Pin        Pin              Pin
                * -----------------------------------------------------------------------------------------
                * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
                * SPI SS      SDA(SS)      10            53        D10        10               10
                * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
                * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
                * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
                */
                
                /*
                RFID Garagedoor opener by Bart Eversdijk
                
                This sketch is to open a Garage door with an mifare RIFD-tag
                
                For an Arduino Nano v3
                Connection wiring :
                - nrf24l01+ as descibed on the MySensors website
                - MFRC522 reader/writer as described above EXCEPT for pin D9 and D10:  connect RST i.s.o. pin D9 to pin D7 and connect SDA(SS) i.s.o. pin D10 to pin D8
                - LED with 470ohm resistor between GMD and pin A3
                - push button between GND and pin D5
                - 5v relays coil between GND and  pin D4 -> switch pins of the relays should be connected in parallel with your garage door push button.
                
                Features:
                This project can record up to 18 RFID-"tags"
                These card IDs are stored in to EEPROM by keeping them next to the RFID reader when the system in program mode. (Slow blinking LED) When a card is accepted as new card the LED will blink fast for a short time.
                To keep the master-tags (choose your own) next to the RFID reader when pressing the push button. To clear all cards (except the master card) press the push button in program mode for 6 seconds. The LED will now fast blink for a couple of seconds.
                
                Your garage your can be opened by keep a registered RFID tag next to the reader or by clicking the open icon on lock node presented by this plugin.
                By by-passing the alarm node presented by this plug in the RFID will be temporarily disabled.
                When an incorrect (not registered) RFID tag is scanned the alarm is triggered to detect illegal scan attempts
                
                */
                // Enable debug prints
                #define MY_DEBUG
                #define MY_NODE_ID 4
                // Enable and select radio type attached
                #define MY_RADIO_NRF24
                #define MY_RF24_CHANNEL	10 
                #include <MySensors.h>
                #include <SPI.h>
                #include <MFRC522.h> 
                #include <Bounce2.h>
                
                #define RF_INIT_DELAY   125
                #define ONE_SEC         1000
                #define MAX_CARDS       18
                #define PROG_WAIT       10
                #define HEARTBEAT       10
                #define BAUD            115200
                
                /*Pin definitions*/
                #define LED_PIN         A3
                #define GARAGEPIN       4
                #define SWITCH_PIN      5
                #define RST_PIN		7		//  MFRC 
                #define SS_PIN		8		//  MFRC 
                
                MFRC522      mfrc522(SS_PIN, RST_PIN);	// Create MFRC522 instance
                MFRC522::Uid olduid;
                MFRC522::Uid masterkey = { 4,{ 0xC6,0x35,0x5D,0x8E},  0 };
                
                byte       countValidCards = 0;
                MFRC522::Uid validCards[MAX_CARDS];
                
                void       ShowCardData(MFRC522::Uid* uid);
                bool       sameUid(MFRC522::Uid* old, MFRC522::Uid* check);
                void       copyUid(MFRC522::Uid* src, MFRC522::Uid* dest);
                bool       isValidCard(MFRC522::Uid* uid);
                int        releasecnt = 0;
                
                #define    CHILD_ID_ALARM    1
                #define    CHILD_ID_LOCK     2
                Bounce     debouncer = Bounce();
                
                int        oldSwitchValue = -1;
                int        switchValue = 0;
                long       timer = -1;
                bool       programmode = false;
                bool       ledon;
                int        programTimer = 0;
                bool       armed = true;
                unsigned long lastTime = 0;
                
                MyMessage  lockMsg(CHILD_ID_LOCK, V_LOCK_STATUS);
                MyMessage  lockArmMsg(CHILD_ID_ALARM, V_ARMED);
                MyMessage  wrongMsg(CHILD_ID_ALARM, V_TRIPPED);
                
                void before() {
                	// Make sure MFRC is disabled from the SPI bus
                	pinMode(RST_PIN, OUTPUT);
                	digitalWrite(RST_PIN, LOW);
                	pinMode(SS_PIN, OUTPUT);
                	digitalWrite(SS_PIN, LOW);
                }
                
                void presentation() {
                	sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
                	// Register all sensors to gw (they will be created as child devices)
                
                	present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
                	present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
                }
                
                void setup() {
                	Serial.begin(BAUD);		// Initialize serial communications with the PC
                	pinMode(GARAGEPIN, OUTPUT);     // Initialise in/output ports
                
                									// Make sure MFRC will be disabled on the SPI bus
                	/*pinMode(RST_PIN, OUTPUT);
                	digitalWrite(RST_PIN, LOW);
                	pinMode(SS_PIN, OUTPUT);
                	digitalWrite(SS_PIN, LOW);*/
                
                	pinMode(LED_PIN, OUTPUT);
                	digitalWrite(LED_PIN, LOW);
                	// Setup the button
                	pinMode(SWITCH_PIN, INPUT);
                	// Activate internal pull-up
                	digitalWrite(SWITCH_PIN, HIGH);
                
                	// After setting up the button, setup debouncer
                	debouncer.attach(SWITCH_PIN);
                	debouncer.interval(5);
                
                	// Init mysensors library
                	
                	/*sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
                
                	// Register all sensors to gw (they will be created as child devices)
                	present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
                	present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);*/
                
                	recallEeprom();
                
                	// Init MFRC RFID sensor
                	SPI.begin();			// Init SPI bus
                	mfrc522.PCD_Init();		// Init MFRC522
                	ShowReaderDetails();	        // Show details of PCD - MFRC522 Card Reader details
                
                	send(lockArmMsg.set(armed));
                	Serial.println(F("Init done..."));
                }
                
                void loop() {
                	timer++;
                	delay(HEARTBEAT);
                	debouncer.update();
                
                	// Get the update value
                	int switchValue = debouncer.read();
                	if (switchValue != oldSwitchValue) {
                		// Send in the new value
                		Serial.print(F("Switch "));
                		Serial.println(switchValue);
                
                		if (switchValue && programmode) {
                			lastTime = millis() / 1000;
                		}
                
                		if (!switchValue && programmode && lastTime > 0) {
                			if ((millis() / 1000) - lastTime > 3) {
                				Serial.println(F("Reset all cards"));
                				countValidCards = 0;
                				blinkFast(50);
                			}
                			else {
                				Serial.println(F("Program off"));
                				digitalWrite(LED_PIN, LOW);
                				programmode = false;
                
                				storeEeprom();
                			}
                		}
                
                		if (!switchValue) {
                			programTimer = 0;
                		}
                		oldSwitchValue = switchValue;
                	}
                
                	if (programmode && ((timer % (ONE_SEC / HEARTBEAT)) == 0)) {
                		ledon = !ledon;
                		digitalWrite(LED_PIN, ledon);
                		programTimer++;
                
                		// Stop program mode after 20 sec inactivity
                		if (programTimer > PROG_WAIT) {
                			programmode = false;
                			digitalWrite(LED_PIN, false);
                			Serial.println(F("Program expired"));
                		}
                	}
                
                	if ((timer % (200 / HEARTBEAT)) == 0) {
                		// Look for new cards
                		if (!mfrc522.PICC_IsNewCardPresent()) {
                			if (releasecnt > 0) {
                				releasecnt--;
                				if (!releasecnt) {
                					olduid.size = 0;
                					Serial.println(F("release"));
                				}
                			}
                			return;
                		}
                		releasecnt = 5;
                
                		// Select one of the cards
                		if (!mfrc522.PICC_ReadCardSerial()) {
                			return;
                		}
                
                		// Dump debug info about the card; PICC_HaltA() is automatically called
                		//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
                		if (!olduid.size || !sameUid(&(mfrc522.uid), &olduid)) {
                			ShowCardData(&(mfrc522.uid));
                			copyUid(&(mfrc522.uid), &olduid);
                			if (isValidCard(&olduid)) {
                				OpenDoor(programmode);
                			}
                			else {
                
                				if (sameUid(&(mfrc522.uid), &masterkey)) {
                					// Only switch in program mode when mastercard is found AND the program button is pressed
                					if (switchValue) {
                						Serial.println(F("Program mode"));
                						programmode = true;
                						programTimer = 0;
                						lastTime = 0;
                					}
                				}
                				else {
                					if (programmode) {
                						Serial.println(F("new card"));
                						programTimer = 0;
                
                						if (countValidCards < MAX_CARDS)
                						{
                							// Add card to list...
                							copyUid(&(mfrc522.uid), &validCards[countValidCards]);
                							countValidCards++;
                							blinkFast(15);
                						}
                					}
                					else {
                						Serial.println(F("Invalid card"));
                						if (armed) {
                							send(wrongMsg.set(1));
                							delay(2000);
                							send(wrongMsg.set(0));
                						}
                					}
                				}
                			}
                		}
                	}
                }
                
                void ShowCardData(MFRC522::Uid* uid) {
                	Serial.print(F("Card UID:"));
                	for (byte i = 0; i < uid->size; i++) {
                		if (uid->uidByte[i] < 0x10) {
                			Serial.print(F(" 0"));
                		}
                		else {
                			Serial.print(F(" "));
                		}
                		Serial.print(uid->uidByte[i], HEX);
                	}
                	Serial.println();
                }
                
                void copyUid(MFRC522::Uid* src, MFRC522::Uid* dest)
                {
                	dest->size = src->size;
                	dest->sak = src->sak;
                
                	for (byte i = 0; i < src->size; i++) {
                		dest->uidByte[i] = src->uidByte[i];
                	}
                }
                
                bool sameUid(MFRC522::Uid* old, MFRC522::Uid* check)
                {
                	if (old->size != check->size) {
                		return false;
                	}
                	for (byte i = 0; i < old->size; i++) {
                		if (old->uidByte[i] != check->uidByte[i]) {
                			return false;
                		}
                	}
                	return true;
                }
                
                bool isValidCard(MFRC522::Uid* uid)
                {
                	for (byte i = 0; i < countValidCards; i++) {
                		if (validCards[i].size != uid->size) {
                			break;
                		}
                		for (int j = 0; j < uid->size; j++) {
                			if (validCards[i].uidByte[j] != uid->uidByte[j]) {
                				break;
                			}
                			if (j == (uid->size - 1)) {
                				return true;
                			}
                		}
                	}
                	return false;
                }
                
                
                void storeEeprom()
                {
                	byte address = 0;
                	saveState(address++, countValidCards);
                
                	for (byte i = 0; i < countValidCards; i++) {
                		saveState(address++, validCards[i].size);
                		for (byte j = 0; j < 10; j++) {
                			saveState(address++, validCards[i].uidByte[j]);
                		}
                	}
                }
                
                void recallEeprom()
                {
                	byte address = 0;
                
                	countValidCards = loadState(address++);
                	if (countValidCards > MAX_CARDS) {
                		Serial.println(F("Not a valid EEPROM reading set to default"));
                		countValidCards = 0;
                		storeEeprom();
                		return;
                	}
                
                	for (byte i = 0; i < countValidCards; i++) {
                		validCards[i].size = loadState(address++);
                		for (byte j = 0; j < 10; j++) {
                			validCards[i].uidByte[j] = loadState(address++);
                		}
                	}
                
                }
                
                void blinkFast(int times)
                {
                	for (int i = 0; i < times; i++) {
                		ledon = !ledon;
                		digitalWrite(LED_PIN, ledon);
                		delay(100);
                	}
                }
                
                void OpenDoor(bool fakeOpen)
                {
                	Serial.println(F("Open door!"));
                	send(lockMsg.set(false));
                
                	if (!fakeOpen) {
                		digitalWrite(LED_PIN, HIGH);
                		digitalWrite(GARAGEPIN, HIGH);
                	}
                	delay(1000);
                
                	if (!fakeOpen) {
                		digitalWrite(GARAGEPIN, LOW);
                		digitalWrite(LED_PIN, LOW);
                	}
                
                	send(lockMsg.set(true));
                }
                
                void ShowReaderDetails() {
                	// Get the MFRC522 software version
                	byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
                	Serial.print(F("MFRC522 Software Version: 0x"));
                	Serial.print(v, HEX);
                	if (v == 0x91) {
                		Serial.print(F(" = v1.0"));
                	}
                	else if (v == 0x92) {
                		Serial.print(F(" = v2.0"));
                	}
                	else {
                		Serial.print(F(" (unknown)"));
                	}
                	Serial.println("");
                
                	// When 0x00 or 0xFF is returned, communication probably failed
                	if ((v == 0x00) || (v == 0xFF)) {
                		Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
                	}
                }
                
                
                void receive(const MyMessage &message)
                {
                	if (message.type == V_LOCK_STATUS) {
                		// Change relay state
                		if (!message.getBool()) {
                			OpenDoor(false);
                		}
                
                		// Write some debug info
                		Serial.print(F("Lock status: "));
                		Serial.println(message.getBool());
                	}
                	else
                	{
                		if (message.type == V_ARMED) {
                			// Change relay state
                			armed = message.getBool();
                
                			// Write some debug info
                			Serial.print(F("Arm status: "));
                			Serial.println(message.getBool());
                		}
                		else
                		{
                			// Write some debug info
                			Serial.print(F("Incoming msg type: "));
                			Serial.print(message.type);
                			Serial.print(F(" id: "));
                			Serial.print(message.sensor);
                			Serial.print(F(" content: "));
                			Serial.println(message.getInt());
                		}
                	}
                }
                
                1 Reply Last reply
                0
                • gohanG gohan

                  Here is the new code for lib 2.0, but I am having some problem with initialization of rc522. I connected RST tu D7 and SDA to D8. Any idea what to look for?

                  /*
                  * ----------------------------------------------------------------------------
                  * This is a MFRC522 library example; see https://github.com/miguelbalboa/rfid
                  * for further details and other examples.
                  *
                  * NOTE: The library file MFRC522.h has a lot of useful info. Please read it.
                  *
                  * Released into the public domain.
                  * ----------------------------------------------------------------------------
                  * Example sketch/program showing how to read data from a PICC (that is: a RFID
                  * Tag or Card) using a MFRC522 based RFID Reader on the Arduino SPI interface.
                  *
                  * When the Arduino and the MFRC522 module are connected (see the pin layout
                  * below), load this sketch into Arduino IDE then verify/compile and upload it.
                  * To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M).
                  * When you present a PICC (that is: a RFID Tag or Card) at reading distance
                  * of the MFRC522 Reader/PCD, the serial output will show the ID/UID, type and
                  * any data blocks it can read. Note: you may see "Timeout in communication"
                  * messages when removing the PICC from reading distance too early.
                  *
                  * If your reader supports it, this sketch/program will read all the PICCs
                  * presented (that is: multiple tag reading). So if you stack two or more
                  * PICCs on top of each other and present them to the reader, it will first
                  * output all details of the first and then the next PICC. Note that this
                  * may take some time as all data blocks are dumped, so keep the PICCs at
                  * reading distance until complete.
                  *
                  * Typical pin layout used:
                  * -----------------------------------------------------------------------------------------
                  *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
                  *             Reader/PCD   Uno           Mega      Nano v3    Leonardo/Micro   Pro Micro
                  * Signal      Pin          Pin           Pin       Pin        Pin              Pin
                  * -----------------------------------------------------------------------------------------
                  * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST
                  * SPI SS      SDA(SS)      10            53        D10        10               10
                  * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16
                  * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14
                  * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15
                  */
                  
                  /*
                  RFID Garagedoor opener by Bart Eversdijk
                  
                  This sketch is to open a Garage door with an mifare RIFD-tag
                  
                  For an Arduino Nano v3
                  Connection wiring :
                  - nrf24l01+ as descibed on the MySensors website
                  - MFRC522 reader/writer as described above EXCEPT for pin D9 and D10:  connect RST i.s.o. pin D9 to pin D7 and connect SDA(SS) i.s.o. pin D10 to pin D8
                  - LED with 470ohm resistor between GMD and pin A3
                  - push button between GND and pin D5
                  - 5v relays coil between GND and  pin D4 -> switch pins of the relays should be connected in parallel with your garage door push button.
                  
                  Features:
                  This project can record up to 18 RFID-"tags"
                  These card IDs are stored in to EEPROM by keeping them next to the RFID reader when the system in program mode. (Slow blinking LED) When a card is accepted as new card the LED will blink fast for a short time.
                  To keep the master-tags (choose your own) next to the RFID reader when pressing the push button. To clear all cards (except the master card) press the push button in program mode for 6 seconds. The LED will now fast blink for a couple of seconds.
                  
                  Your garage your can be opened by keep a registered RFID tag next to the reader or by clicking the open icon on lock node presented by this plugin.
                  By by-passing the alarm node presented by this plug in the RFID will be temporarily disabled.
                  When an incorrect (not registered) RFID tag is scanned the alarm is triggered to detect illegal scan attempts
                  
                  */ 
                  #include <MySensors.h>
                  #include <SPI.h>
                  #include <MFRC522.h> 
                  #include <Bounce2.h>
                  
                  #define RF_INIT_DELAY   125
                  #define ONE_SEC         1000
                  #define MAX_CARDS       18
                  #define PROG_WAIT       10
                  #define HEARTBEAT       10
                  #define BAUD            115200
                  
                  /*Pin definitions*/
                  #define LED_PIN         A3
                  #define GARAGEPIN       4
                  #define SWITCH_PIN      5
                  #define RST_PIN		7		//  MFRC 
                  #define SS_PIN		8		//  MFRC 
                  
                  MFRC522      mfrc522(SS_PIN, RST_PIN);	// Create MFRC522 instance
                  MFRC522::Uid olduid;
                  MFRC522::Uid masterkey = { 10,{ 0,0,0,0, 0,0,0,0, 0,0 },  0 };
                  
                  byte       countValidCards = 0;
                  MFRC522::Uid validCards[MAX_CARDS];
                  
                  void       ShowCardData(MFRC522::Uid* uid);
                  bool       sameUid(MFRC522::Uid* old, MFRC522::Uid* check);
                  void       copyUid(MFRC522::Uid* src, MFRC522::Uid* dest);
                  bool       isValidCard(MFRC522::Uid* uid);
                  int        releasecnt = 0;
                  
                  #define    CHILD_ID_ALARM    1
                  #define    CHILD_ID_LOCK     2
                  Bounce     debouncer = Bounce();
                  
                  int        oldSwitchValue = -1;
                  int        switchValue = 0;
                  long       timer = -1;
                  bool       programmode = false;
                  bool       ledon;
                  int        programTimer = 0;
                  bool       armed = true;
                  unsigned long lastTime = 0;
                  
                  MyMessage  lockMsg(CHILD_ID_LOCK, V_LOCK_STATUS);
                  MyMessage  lockArmMsg(CHILD_ID_ALARM, V_ARMED);
                  MyMessage  wrongMsg(CHILD_ID_ALARM, V_TRIPPED);
                  
                  void setup() {
                  	Serial.begin(BAUD);		// Initialize serial communications with the PC
                  	pinMode(GARAGEPIN, OUTPUT);     // Initialise in/output ports
                  
                  									// Make sure MFRC will be disabled on the SPI bus
                  	pinMode(RST_PIN, OUTPUT);
                  	digitalWrite(RST_PIN, LOW);
                  	pinMode(SS_PIN, OUTPUT);
                  	digitalWrite(SS_PIN, LOW);
                  
                  	pinMode(LED_PIN, OUTPUT);
                  	digitalWrite(LED_PIN, LOW);
                  	// Setup the button
                  	pinMode(SWITCH_PIN, INPUT);
                  	// Activate internal pull-up
                  	digitalWrite(SWITCH_PIN, HIGH);
                  
                  	// After setting up the button, setup debouncer
                  	debouncer.attach(SWITCH_PIN);
                  	debouncer.interval(5);
                  
                  	// Init mysensors library
                  	
                  	sendSketchInfo("RFID Garage", "1.1"); delay(RF_INIT_DELAY);
                  
                  	// Register all sensors to gw (they will be created as child devices)
                  	present(CHILD_ID_LOCK, S_LOCK);      delay(RF_INIT_DELAY);
                  	present(CHILD_ID_ALARM, S_MOTION);   delay(RF_INIT_DELAY);
                  
                  	recallEeprom();
                  
                  	// Init MFRC RFID sensor
                  	SPI.begin();			// Init SPI bus
                  	mfrc522.PCD_Init();		// Init MFRC522
                  	ShowReaderDetails();	        // Show details of PCD - MFRC522 Card Reader details
                  
                  	send(lockArmMsg.set(armed));
                  	Serial.println(F("Init done..."));
                  }
                  
                  void loop() {
                  	timer++;
                  	delay(HEARTBEAT);
                  	debouncer.update();
                  
                  	// Get the update value
                  	int switchValue = debouncer.read();
                  	if (switchValue != oldSwitchValue) {
                  		// Send in the new value
                  		Serial.print(F("Switch "));
                  		Serial.println(switchValue);
                  
                  		if (switchValue && programmode) {
                  			lastTime = millis() / 1000;
                  		}
                  
                  		if (!switchValue && programmode && lastTime > 0) {
                  			if ((millis() / 1000) - lastTime > 3) {
                  				Serial.println(F("Reset all cards"));
                  				countValidCards = 0;
                  				blinkFast(50);
                  			}
                  			else {
                  				Serial.println(F("Program off"));
                  				digitalWrite(LED_PIN, LOW);
                  				programmode = false;
                  
                  				storeEeprom();
                  			}
                  		}
                  
                  		if (!switchValue) {
                  			programTimer = 0;
                  		}
                  		oldSwitchValue = switchValue;
                  	}
                  
                  	if (programmode && ((timer % (ONE_SEC / HEARTBEAT)) == 0)) {
                  		ledon = !ledon;
                  		digitalWrite(LED_PIN, ledon);
                  		programTimer++;
                  
                  		// Stop program mode after 20 sec inactivity
                  		if (programTimer > PROG_WAIT) {
                  			programmode = false;
                  			digitalWrite(LED_PIN, false);
                  			Serial.println(F("Program expired"));
                  		}
                  	}
                  
                  	if ((timer % (200 / HEARTBEAT)) == 0) {
                  		// Look for new cards
                  		if (!mfrc522.PICC_IsNewCardPresent()) {
                  			if (releasecnt > 0) {
                  				releasecnt--;
                  				if (!releasecnt) {
                  					olduid.size = 0;
                  					Serial.println(F("release"));
                  				}
                  			}
                  			return;
                  		}
                  		releasecnt = 5;
                  
                  		// Select one of the cards
                  		if (!mfrc522.PICC_ReadCardSerial()) {
                  			return;
                  		}
                  
                  		// Dump debug info about the card; PICC_HaltA() is automatically called
                  		//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
                  		if (!olduid.size || !sameUid(&(mfrc522.uid), &olduid)) {
                  			ShowCardData(&(mfrc522.uid));
                  			copyUid(&(mfrc522.uid), &olduid);
                  			if (isValidCard(&olduid)) {
                  				OpenDoor(programmode);
                  			}
                  			else {
                  
                  				if (sameUid(&(mfrc522.uid), &masterkey)) {
                  					// Only switch in program mode when mastercard is found AND the program button is pressed
                  					if (switchValue) {
                  						Serial.println(F("Program mode"));
                  						programmode = true;
                  						programTimer = 0;
                  						lastTime = 0;
                  					}
                  				}
                  				else {
                  					if (programmode) {
                  						Serial.println(F("new card"));
                  						programTimer = 0;
                  
                  						if (countValidCards < MAX_CARDS)
                  						{
                  							// Add card to list...
                  							copyUid(&(mfrc522.uid), &validCards[countValidCards]);
                  							countValidCards++;
                  							blinkFast(15);
                  						}
                  					}
                  					else {
                  						Serial.println(F("Invalid card"));
                  						if (armed) {
                  							send(wrongMsg.set(1));
                  							delay(2000);
                  							send(wrongMsg.set(0));
                  						}
                  					}
                  				}
                  			}
                  		}
                  	}
                  }
                  
                  void ShowCardData(MFRC522::Uid* uid) {
                  	Serial.print(F("Card UID:"));
                  	for (byte i = 0; i < uid->size; i++) {
                  		if (uid->uidByte[i] < 0x10) {
                  			Serial.print(F(" 0"));
                  		}
                  		else {
                  			Serial.print(F(" "));
                  		}
                  		Serial.print(uid->uidByte[i], HEX);
                  	}
                  	Serial.println();
                  }
                  
                  void copyUid(MFRC522::Uid* src, MFRC522::Uid* dest)
                  {
                  	dest->size = src->size;
                  	dest->sak = src->sak;
                  
                  	for (byte i = 0; i < src->size; i++) {
                  		dest->uidByte[i] = src->uidByte[i];
                  	}
                  }
                  
                  bool sameUid(MFRC522::Uid* old, MFRC522::Uid* check)
                  {
                  	if (old->size != check->size) {
                  		return false;
                  	}
                  	for (byte i = 0; i < old->size; i++) {
                  		if (old->uidByte[i] != check->uidByte[i]) {
                  			return false;
                  		}
                  	}
                  	return true;
                  }
                  
                  bool isValidCard(MFRC522::Uid* uid)
                  {
                  	for (byte i = 0; i < countValidCards; i++) {
                  		if (validCards[i].size != uid->size) {
                  			break;
                  		}
                  		for (int j = 0; j < uid->size; j++) {
                  			if (validCards[i].uidByte[j] != uid->uidByte[j]) {
                  				break;
                  			}
                  			if (j == (uid->size - 1)) {
                  				return true;
                  			}
                  		}
                  	}
                  	return false;
                  }
                  
                  
                  void storeEeprom()
                  {
                  	byte address = 0;
                  	saveState(address++, countValidCards);
                  
                  	for (byte i = 0; i < countValidCards; i++) {
                  		saveState(address++, validCards[i].size);
                  		for (byte j = 0; j < 10; j++) {
                  			saveState(address++, validCards[i].uidByte[j]);
                  		}
                  	}
                  }
                  
                  void recallEeprom()
                  {
                  	byte address = 0;
                  
                  	countValidCards = loadState(address++);
                  	if (countValidCards > MAX_CARDS) {
                  		Serial.println(F("Not a valid EEPROM reading set to default"));
                  		countValidCards = 0;
                  		storeEeprom();
                  		return;
                  	}
                  
                  	for (byte i = 0; i < countValidCards; i++) {
                  		validCards[i].size = loadState(address++);
                  		for (byte j = 0; j < 10; j++) {
                  			validCards[i].uidByte[j] = loadState(address++);
                  		}
                  	}
                  
                  }
                  
                  void blinkFast(int times)
                  {
                  	for (int i = 0; i < times; i++) {
                  		ledon = !ledon;
                  		digitalWrite(LED_PIN, ledon);
                  		delay(100);
                  	}
                  }
                  
                  void OpenDoor(bool fakeOpen)
                  {
                  	Serial.println(F("Open door!"));
                  	send(lockMsg.set(false));
                  
                  	if (!fakeOpen) {
                  		digitalWrite(LED_PIN, HIGH);
                  		digitalWrite(GARAGEPIN, HIGH);
                  	}
                  	delay(1000);
                  
                  	if (!fakeOpen) {
                  		digitalWrite(GARAGEPIN, LOW);
                  		digitalWrite(LED_PIN, LOW);
                  	}
                  
                  	send(lockMsg.set(true));
                  }
                  
                  void ShowReaderDetails() {
                  	// Get the MFRC522 software version
                  	byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
                  	Serial.print(F("MFRC522 Software Version: 0x"));
                  	Serial.print(v, HEX);
                  	if (v == 0x91) {
                  		Serial.print(F(" = v1.0"));
                  	}
                  	else if (v == 0x92) {
                  		Serial.print(F(" = v2.0"));
                  	}
                  	else {
                  		Serial.print(F(" (unknown)"));
                  	}
                  	Serial.println("");
                  
                  	// When 0x00 or 0xFF is returned, communication probably failed
                  	if ((v == 0x00) || (v == 0xFF)) {
                  		Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
                  	}
                  }
                  
                  
                  void incomingMessage(const MyMessage &message)
                  {
                  	if (message.type == V_LOCK_STATUS) {
                  		// Change relay state
                  		if (!message.getBool()) {
                  			OpenDoor(false);
                  		}
                  
                  		// Write some debug info
                  		Serial.print(F("Lock status: "));
                  		Serial.println(message.getBool());
                  	}
                  	else
                  	{
                  		if (message.type == V_ARMED) {
                  			// Change relay state
                  			armed = message.getBool();
                  
                  			// Write some debug info
                  			Serial.print(F("Arm status: "));
                  			Serial.println(message.getBool());
                  		}
                  		else
                  		{
                  			// Write some debug info
                  			Serial.print(F("Incoming msg type: "));
                  			Serial.print(message.type);
                  			Serial.print(F(" id: "));
                  			Serial.print(message.sensor);
                  			Serial.print(F(" content: "));
                  			Serial.println(message.getInt());
                  		}
                  	}
                  }
                  
                  BartEB Offline
                  BartEB Offline
                  BartE
                  Contest Winner
                  wrote on last edited by
                  #37

                  @gohan did you try running the MRRC522 demo application only?

                  So eliminating all MySensors stuff. To check the wiring.(make sure the pin 7 an 8 definition are correct.)

                  1 Reply Last reply
                  0
                  • gohanG Offline
                    gohanG Offline
                    gohan
                    Mod
                    wrote on last edited by
                    #38

                    If I unplug the nrf24 and use the original wiring with the demo sketch I can read the tags. I checked with multimeter from arduino to the rfid pins and they are OK. But I'll be ordering the newer board that supports nfc

                    1 Reply Last reply
                    0
                    • T Offline
                      T Offline
                      thomas84
                      wrote on last edited by
                      #39

                      Hello all,

                      I am very new to arduino and all this stuff. This rfid garage opener ist exactly what i am lookibg for as my first project. But i have problems compiling the code with arduino ide. I get error notifications regarding the .h files. Do I have to include them in my arduino ide folders? Can someone please tell me where to find them? And where i have to save them?

                      It would be very nice if someone helps me!

                      Thanks

                      marceltrapmanM gohanG mfalkviddM 3 Replies Last reply
                      0
                      • T thomas84

                        Hello all,

                        I am very new to arduino and all this stuff. This rfid garage opener ist exactly what i am lookibg for as my first project. But i have problems compiling the code with arduino ide. I get error notifications regarding the .h files. Do I have to include them in my arduino ide folders? Can someone please tell me where to find them? And where i have to save them?

                        It would be very nice if someone helps me!

                        Thanks

                        marceltrapmanM Offline
                        marceltrapmanM Offline
                        marceltrapman
                        Mod
                        wrote on last edited by
                        #40

                        It would help if you share your error messages.
                        In general I would say, read the messages and (try to) interpret them (google?).

                        Fulltime Servoy Developer
                        Parttime Moderator MySensors board

                        I use Domoticz as controller for Z-Wave and MySensors (previously Indigo and OpenHAB).
                        I have a FABtotum to print cases.

                        1 Reply Last reply
                        0
                        • T thomas84

                          Hello all,

                          I am very new to arduino and all this stuff. This rfid garage opener ist exactly what i am lookibg for as my first project. But i have problems compiling the code with arduino ide. I get error notifications regarding the .h files. Do I have to include them in my arduino ide folders? Can someone please tell me where to find them? And where i have to save them?

                          It would be very nice if someone helps me!

                          Thanks

                          gohanG Offline
                          gohanG Offline
                          gohan
                          Mod
                          wrote on last edited by
                          #41

                          @thomas84 of course you need to install the libraries from library manager for all the Includes

                          1 Reply Last reply
                          0
                          • T thomas84

                            Hello all,

                            I am very new to arduino and all this stuff. This rfid garage opener ist exactly what i am lookibg for as my first project. But i have problems compiling the code with arduino ide. I get error notifications regarding the .h files. Do I have to include them in my arduino ide folders? Can someone please tell me where to find them? And where i have to save them?

                            It would be very nice if someone helps me!

                            Thanks

                            mfalkviddM Offline
                            mfalkviddM Offline
                            mfalkvidd
                            Mod
                            wrote on last edited by
                            #42

                            Welcome to the MySensors community @thomas84 !

                            Instructions on how to install MySensors is available at https://www.mysensors.org/about/arduino#installing-the-sensor-libraries

                            1 Reply Last reply
                            0
                            • T Offline
                              T Offline
                              thomas84
                              wrote on last edited by
                              #43

                              Hello all,

                              Thanks for your answers! Yesterday I could finish the uploading to the arduino nano. Now I wanted to test the garage opener and did the connections like in the picture at the top of this. But nothing is hapening 😞 Even the red light led ist not on. Do I have to "start" the programm some how?

                              Thanks for your help!

                              1 Reply Last reply
                              0
                              • gohanG Offline
                                gohanG Offline
                                gohan
                                Mod
                                wrote on last edited by
                                #44

                                I got issues too when I tryed the MFRC522 and couldn't get it working with the NFR24, you might have better luck using the I2C model

                                1 Reply Last reply
                                0
                                • T Offline
                                  T Offline
                                  thomas84
                                  wrote on last edited by
                                  #45

                                  Why is the NFR24 needed at all?

                                  1 Reply Last reply
                                  0
                                  • A Offline
                                    A Offline
                                    Armstrong
                                    wrote on last edited by Armstrong
                                    #46

                                    I was Looking for the best garage Door Openers and some other issues related to their installation and so i found this discussion.I want some suggestions that which will be best and good quality garage door opener? also i saw somewhere that it may start making noises and it may have small range so which will be the quietest and longer range with best in quality.

                                    1 Reply Last reply
                                    0
                                    • gohanG Offline
                                      gohanG Offline
                                      gohan
                                      Mod
                                      wrote on last edited by
                                      #47

                                      Are you looking for an rfid system or just a radio remote control?

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      6

                                      Online

                                      11.7k

                                      Users

                                      11.2k

                                      Topics

                                      113.1k

                                      Posts


                                      Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • MySensors
                                      • OpenHardware.io
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular