Projekt-Repository - Firmware-Shareware für RFID-Domination-Timer: Airsoft Domination Timer firmware
Wenn Sie an der vollständigen Firmware für den RFID Stoppuhr der Dominanz interessiert sind, wenden Sie sich bitte an den Autor des Projekts auf Englisch unter:

martinius96@gmail.com

Arduino LCD RFID, NFC RC522 Stopwatch Schematics Airsoft Paintball Stoppuhr der Dominanz

RFID Stoppuhr der Dominanz - Stoppuhr für Airsoft | Paintball


Die neue Version des RFID Stoppuhr der Dominanz-Projekts (Stoppuhr der Dominanz) unterstützt diese Arten von Firmware-RFID-Lesegeräten NXP RC522:
  • Firmware version: 0x12 = counterfeit chip - (Nicht originaler NXP-Chip, Ersatz)
  • Firmware version: 0x91 = Version 1.0 - (Original NXP Semiconductors Chip)
  • Firmware version: 0x92 = Version 2.0 - (Original NXP Semiconductors Chip)
  • Benutzerentitäten in einem farbcodierten RFID Stoppuhr der Dominanz-Projekt:

    RFID-Armband nach ISO / IEC 14443-A - Mannschaft RED
    Mannschaft RED
    RFID-Armband nach ISO / IEC 14443-A - Mannschaft GRE
    Mannschaft GRE
    RFID-Armband nach ISO / IEC 14443-A - Schiedsrichter
    Schiedsrichter
    RFID-Armband nach ISO / IEC 14443-A - Radiergummi
    Radiergummi

    Projektbeschreibung - RFID Stoppuhr der Dominanz:

    Stoppuhr der Dominanz ist ein Gerät, das für 2 Mannschaft entwickelt wurde, die gegeneinander spielen. Die Stoppuhr ist geeignet für den Airsoft / Paintball Spielmodus DOMINATION, bzw. Hügel erobern. Sie bestehen aus einem ATmega328P-Mikrocontroller (AVR), der Teil des Arduino-Entwicklungskits (Uno / Nano / Pro Mini) oder eigenständig verwendet werden kann. Zur Visualisierung der Zeiten dient ein LCD-Zeichendisplay (Größe 16x2 oder 20x4), das mit dem Mikrocontroller verbunden ist und mit diesem kommuniziert. Die Zeiten werden in zwei Zeilen untereinander aufgelistet und werden dynamisch aktualisiert, wenn sich ein aktives Mannschaft an dem Punkt befindet (ein von einem Mannschaft besetzter Punkt). Die Stoppuhr ist mit Anzeige-LEDs in Form einzelner Mannschaften ausgestattet, die das aktive Mannschaft am Punkt signalisieren und einem Detektor (Piezowandler), der nach Aufstecken der RFID-Karte den Wechsel am Punkt ankündigt. Mannschaften werden im Spiel implementiert - RED Mannschaft und GRE Mannschaft die gegeneinander spielen und versuchen, den Punkt zu besetzen und dann so lange wie möglich zu behalten. Zu Beginn des Spiels zeigt das Display die Zeiten 00 Stunden, 00 Minuten, 00 Sekunden für RED Mannschaft , GRE Mannschaft . Jedes Mannschaftsmitglied ist mit einem RFID-Chip ausgestattet, der in das Armband (oder die Karte / den Schlüsselanhänger) integriert ist. Der RFID-Chip überträgt seine eindeutige Kennung - UID (unique ID), die von einem RFID-Lesegerät gelesen und in der Logik des Systems verifiziert wird, zu dem die Entität (das Mannschaft) gehört. Einzelne Armbänder können farblich gekennzeichnet werden (rot, grün nach Mannschaft- und Entity-Funktion), wodurch sie schneller an die Spieler verteilt, aber auch farblich archiviert und gespeichert werden können. Das RED Mannschaft besetzt den Punkt, an dem das RED-Mannschaftsmitglied seine Karte am RFID-Lesegerät anbringt. Diese Aktion löst einen Summer aus, der den Punktwechsel mit einem kurzen Piepton ankündigt. Anschließend leuchtet die LED des RED Mannschaft an dieser Station und das Display beginnt die Zeit für dieses Mannschaft zu addieren, bis die Mannschaftkarte des Mitglieds eingesteckt wird , Schiedsrichter oder Radiergummi . Wenn der Punkt von einem GRE-Spieler besetzt ist und die Karte an einem RFID-Lesegerät befestigt ist, kündigt der Summer diese Änderung mit einem kurzen Piepton an, die GRE-LED leuchtet (RED LED erlischt), REDs aktuelle Zeit stoppt und GREs Zeit wird gewertet.


    Wenn der Schiedsrichter seine RFID-Karte anlegt, stoppt die Laufzeit beim aktuellen Wert. Der Punkt wird neutral, die LED des aktiven Mannschaften erlischt. Die Unterbrechung dauert an, bis ein Mitglied des RED Mannschafts oder des GRE Mannschafts seine Karte vorlegt. Dieser Kartentyp ist somit geeignet, ein laufendes Spiel vorübergehend zu unterbrechen, Eingriffe eines Spielers oder Verletzungen zu kontrollieren. Gleichzeitig kann die Karte am Ende der Spielrunde verwendet werden, um die Runde zu bewerten, Mannschaften neu zu spawnen, bevor es weitergeht. Wenn der Radierer die Karte anbringt, werden beide Zeiten angehalten und auf den Anfangswert von 00 Stunden, 00 Minuten, 00 Sekunden zurückgesetzt, der angezeigt wird. Die Radiergummikarte wird verwendet, um das Spiel neu zu starten, um ein neues Spiel zu initialisieren, ohne dass ein Einschaltzyklus erforderlich ist. Der RFID-Reader reagiert sofort auf das Einstecken einer RFID-Karte, inklusive der gesamten Logik des Dominator-Projekts. Das Projekt eignet sich für Airsoft-Events (MilSim, LARP), Sportstätten oder Airsoft-Mannschaften, die mit eigener Hardware ein Dominator-Gerät bauen können. Die Firmware ist universell, basierend auf dem Schaltplan, es ist auch möglich das vorhandene PCB-Design für die Herstellung von Leiterplatten zu verwenden. Der Vorteil des RFID Stoppuhr der Dominanz-Projekts besteht darin, dass die Nutzungslizenz den Benutzer berechtigt, X-Punkte mit gleicher Konfiguration über Maschinencode zu klonen und zu erstellen. Maschinencode (.hex) ist ein kompiliertes Firmware-Format für das RFID Dominator-Projekt für gelieferte UID-RFID-Karten, die vor der Kompilierung in den Code eingebettet werden. Damit ist es möglich, beliebig viele unabhängig voneinander arbeitende RFID-Stoppuhr der Dominanz-Punkte im Spiel zu platzieren, die nach einer einheitlichen Konfiguration auf identische RFID-Karten reagieren. Das RFID Dominator System ist abgestimmt, es kann sofort ins Spiel eingesetzt werden. Firmware-Uploads innerhalb von 10 Sekunden über XLoader .


    Liste der Zeiten auf der LCD-Zeichenanzeige 20x4:


    Liste der Zeiten auf der LCD-Zeichenanzeige 20x4

    Kompatible Steuerungshardware für RFID Stoppuhr der Dominanz:



    Kompatible Peripheriegeräte für RFID Stoppuhr der Dominanz:


    RFID Stoppuhr der Dominanz - DOMINATION TIMER

    Funktionsprinzip auf der Hardwareseite:

    Der NXP RC522 RFID Reader kommuniziert mit dem Mikrocontroller (Arduino / Standalone ATmega328P Chip) über den SPI Bus mit einem Taktsignal (SCLK) von 4 MHz. Der RC522-Reader reagiert auf den RFID-Chip in einem Abstand von ca. 3 cm von der Antenne mit einem konfigurierbaren Antennengewinn im Bereich von 18 bis 48 dB (48 dB wird in der Endanwendung für DOMINATOR verwendet). Liest die UID (Identifier) von RFID-Chips in Reichweite, leitet diesen Identifier an Arduino weiter. Arduino vergleicht die gelesene Kartenadresse in einem Multi-Zustand, löst einen Summerton aus, wendet digitale Zustände an die LEDs an, führt einen universellen Zähler aus, der von der internen Funktion millis() gesteuert wird, die für das Zählen beider Zeiten verantwortlich ist. Aufgrund der erfüllten Bedingung wird der Zähler auf das angegebene Mannschaft angewendet, zu dem die UID gehört und der Zeitzähler läuft. Die Zeit wird auf einem 16x2 oder 20x4 LCD-Zeichen-Display angezeigt. Die Zeitdaten werden über den I2C-Bus mit einem Taktsignal (SCL) von 100 kHz (Standard Speed) gesendet. Um die Anzeige möglichst schnell wiederherzustellen, wird nur die Zahl an der angegebenen Stelle (vorgegebenes Zeichen) überschrieben. Stunden und Minuten und Sekunden werden nur bei Änderung und immer nur für ein bestimmtes Mannschaft neu geschrieben. Bei ernsthaftem Interesse kann im Maschinencode für ATmega328P Firmware erstellt werden, um für andere Arten von RFID-Lesegeräten zu messen: RDM6300, PN532, Wiegand W26, Erhöhung des I2C-Bus-Taktsignals auf 400 kHz (Fast Speed). Mögliche Firmware-Erweiterung für das DOMINATOR-Spiel auf 3 oder 4 Mannschaften.

    RFID Dominator - hra pre 4 tímy
    Maximaler Zeitbereich, der im System aufgelistet werden kann: 99 Stunden, 59 Minuten und 59 Sekunden
    Verbrauch: ca. 110mAh mit 5V Stromversorgung. Geeignet für die Stromversorgung über Power Bank, Ladegerät von einem Telefon mit USB-Ausgang.

    So geben Sie ein RFID Stoppuhr der Dominanz-Projekt an:

  • Das Projekt eignet sich für Mannschaften, Vereine, Sportanlagen und Veranstaltungen.
  • Wenn RFID-Karten, Armbänder oder Schlüsselanhänger farbcodiert sind, sind sie sehr einfach und universell an die Spieler verteilt.
  • Tabs sind für alle Altersgruppen einfach zu verwenden. Der Chip ist in einem Kunststoffgehäuse geschützt, es macht nichts gegen Schmutz, Wasser ...
  • Geeignet für DOMINATION-Spielmodi, Capture Point (mehr als ein Stoppuhr der Dominanz kann im Spiel verwendet werden), ein Spielmodus mit einer ausgeglichenen Anzahl von Spielern.
  • Die Verwendung ist hauptsächlich für Sportarten wie Airsoft, Paintball und Nerf Wars.

  • Funktionsdemonstration - RFID Stoppuhr der Dominanz:



    Leiterplatte - (PCB) - RFID Stoppuhr der Dominanz - GERBER / Produktion auf Fotoroute


    Das PCB-Design sieht die Verwendung einer Arduino Nano-Platine vor
  • Die Leiterplatte ist doppelseitig mit Überzügen, Abmessungen: 100 x 105 mm
  • Leiterplattenproduktion in China

    PCBs können in der Slowakei unter hergestellt werden PB Spoj, oder auch in China - Maschinenproduktion aus GERBER-Dateien. Einer der beliebtesten und billigsten Hersteller ist: JLCPCB. GERBER-Dateien können direkt als Archiv hochgeladen werden, während die Leiterplatte visualisiert wird, die von ihr aufgezeichneten Schichten automatisch festgelegt werden und die Abmessungen der Leiterplatte festgelegt werden. Die Produktion dauert 1-2 Tage. Dieser Hersteller war berühmt für die Herstellung von 10 Stück Leiterplatten für 2 US-Dollar. Heute können Sie mit JLCPCB 5 Stück dieser Leiterplatte für RFID Stoppuhr der Dominanz für 6,96 € und 10 Stück für 10,16 € herstellen. Transport - Die günstigste Alternative ist für 7,44 € bis DHL mit Lieferung innerhalb von 3-5 Werktagen erhältlich, während die Transportkosten 23,16 € betragen. JLCPCB verwendet automatisch einen Rabattgutschein in Höhe von 8 € für den Versand, der Ihnen nach der Registrierung zugewiesen wird. Mit der günstigsten Versandalternative mit Lieferung innerhalb von 25 Tagen ist dieser Versand beim ersten Kauf kostenlos. Es ist auch möglich, andere verfügbare Hersteller zu verwenden, zum Beispiel: PCBWay, AllPCB, NextPCB, SeeedStudio, die über die Technologie für die maschinelle Herstellung von Leiterplatten aus GERBER-Dateien verfügen.

    DPS pre Airsoft Stoppuhr der Dominanz - JLCPCB

    Stiftkopf im PCB-Design:

  • 2x weiblicher Pin-Header 15-polig (für Arduino Nano)
  • 1x 8-polige Pin-Header-Buchse (für RFID-Lesegerät RC522)
  • 1x 90 ° -Pin-Kopfbuchse 4-polig (für I2C-LCD-Display-Wandler 20x4)
  • Abstandshalter in der Designplatine:

  • 4x Abstandhalter für Zeichen-LCD-Anzeige 20x4 (Ø max 2,5 mm)
  • 2x Abstandhalter für RFID RC522 (Ø max 3,5 mm)
  • Teileabmessungen:

    Ein PDF-Dokument mit Teileabmessungen ist verfügbar: HIER
    RFID Stoppuhr der Dominanz - DOSKA PLOŠNÝCH SPOJOV - DPS - PCB - RC522, Arduino - Nano, buzzer, LED, stopky, stopwatch
    RFID Stoppuhr der Dominanz - DOSKA PLOŠNÝCH SPOJOV - DPS - Výroba fotocestou

    Die Verkabelung der Klemmen - RFID Stoppuhr der Dominanz - entspricht vollständig dem Schaltplan:

    Arduino Uno / Nano (ATmega328P) NXP RFID Leser RC522
    GND GND
    3V3 3V3
    D9 RST
    D10 SDA (SS)
    D11 MOSI
    D12 MISO
    D13 SCK
    Arduino Uno / Nano (ATmega328P) I2C-Wandler für LCD-Anzeige
    GND GND
    5V Vcc
    A4 SDA
    A5 SCL
    Arduino Uno / Nano (ATmega328P) Buzzer
    GND GND
    5V Vcc
    D5 IN
    Arduino Uno / Nano (ATmega328P) LED Dioden
    GND GND
    D4 IN (RED)
    D3 IN (GREEN)

    Schaltplan - RFID Stoppuhr der Dominanz:


    Airsoft Dominator RFID

    Testprogramm (Shareware) - RFID Stoppuhr der Dominanz mit Maschinencode


    Für das RFID Stoppuhr der Dominanz-Projekt steht eine Shareware-Version in Form von Maschinencode (.hex) für den Arduino-Mikrocontroller (ATmega328P) zur Verfügung. In der Version können Sie zunächst 4 verschiedene UID-RFID-Karten aufzeichnen, die den Mannschaften RED, GRE, Schiedsrichter und Radiergummi zugeordnet sind. Die Aufforderung zur Eingabe einer bestimmten Karte wird auf dem LCD-Zeichendisplay 16x2 oder 20x4 mit I2C-Wandler angezeigt. Anschließend ist es möglich, die Spielmechanik und die Reaktion des Lesegeräts auf die RFID-Karte mit Zeitvisualisierung auf dem Display zu testen. Es ist möglich, für jedes Team maximal 15 Sekunden Spielzeit zu messen, mit der Möglichkeit, es mit einer Radiergummi-Karte zurückzusetzen und erneut für 15 Sekunden zu messen. Das Ziel der Version besteht darin, die Kompatibilität mit Ihrer Hardware zu überprüfen. Maschinencodes basierend auf der I2C-Konverteradresse für das LCD-Display sind im Github-Repository verfügbar. Die am häufigsten verwendeten Adressen sind 0x27 und 0x3F. Wenn Sie die Adresse Ihres Konverters nicht kennen, verwenden Sie das eingebaute Beispiel in Arduino IDE -> I2C Scanner, das die Adresse an die UART-Schnittstelle (Serieller Monitor) schreibt. Maschinencode kann über die AVRDUDE-Software - Teil der Arduino IDE - oder mit einer GUI-Schnittstelle über XLoader auf den Arduino Uno-Mikrocontroller hochgeladen werden - einfacher zu bedienen.

  • AVRDUDE muss über das mit der Arduino IDE installierte CMD (Befehlszeile) ausgeführt werden. Befindet sich in C:/Users/User/Documents/ArduinoData/packages/arduino/tools/avrdude/6.X.X-arduino/bin
  • Beispielbefehl zum Hochladen eines Programms auf Arduino Uno / Nano (ATmega328P):
  • avrdude -CC: avrdude.conf -v -patmega328p -carduino -PCOM21 -b115200 -D -Uflash:w:sketch.ino.hex:i
  • XLoader ist eine Windows-Anwendung (ausführbares .exe-Tool) mit einer einfachen grafischen Oberfläche mit dem Sie die Firmware auswählen können - Maschinencode (.hex), die Zielplattform und kann dynamisch den COM-Port anzeigen, auf dem sich das Gerät befindet.
  • Durch einfaches Klicken auf Hochladen kann Maschinencode automatisch hochgeladen werden ( XLoader verwendet ähnlich wie Arduino IDE-Tool AVRDUDE). Das Fenster XLoader informiert Sie über einen erfolgreichen Upload, indem es die Anzahl der hochgeladenen Bytes auflistet.
  • Die Firmware kann aus dem Projekt-Repository heruntergeladen werden: HIER . Die Firmware befindet sich im Github-Ordner des Projekt-Repositorys /rfid_dominator/ aufgeteilt nach der Adresse des I2C-Konverters (das haben Sie aus der I2C-Scanner-Ausgabe auf der UART-Schnittstelle herausgefunden).

    Verfügbare Firmware (Shareware) - RFID Stoppuhr der Dominanz


    Firmware-Name (im Ordner rfid_dominator) Designed für Herunterladen
    RFID_Dominator_0x27.hex LCD-Zeichenanzeigegröße 16x2 oder 20x4 mit I2C-Konverter, der unter Adresse 0x27 . kommuniziert Firmware herunterladen
    RFID_Dominator_0x3F.hex LCD-Zeichenanzeigegröße 16x2 oder 20x4 mit I2C-Konverter, der unter Adresse 0x3F . kommuniziert Firmware herunterladen

    Demonstration der Funktionalität - Shareware RFID DOMINATOR:


    Bei den neuesten chinesischen Arduino-Nano-Klonen, die einen "Old Bootloader" besitzen, muss mit 57600 Baud/s aufgenommen werden! Für andere Versionen mit dem neueren Bootloader 115200 Baud/s (diese Geschwindigkeit wird auch im AVRDUDE-Befehl zum Laden von Maschinencode verwendet).

    Programm zum Lesen von UID-Adressen von RFID-Karten für Stoppuhr der Dominanz


  • Mit dem Programm werden Kennungen (UID) von RFID-Tags abgerufen, Karten, die im Programm für RFID Stoppuhr der Dominanz verwendet werden
  • Die Kartenadresse ist im seriellen (UART) Monitor aufgeführt - 9600 Baud / s werden verwendet.
  • Es ist eine gute Idee, den Bericht in einem übersichtlichen XLS-Dokument (EXCEL) zu speichern und zu überschreiben, um die Verwaltung der zugewiesenen RFID-Karten für bestimmte Mannschaften und Entitäten zu vereinfachen.
  • Um den Quellcode zum Laden von UID-Karten erfolgreich hochzuladen, muss die MFRC522-Bibliothek in Ihre Arduino IDE-Umgebung importiert werden.. Laden Sie das RFID Stoppuhr der Dominanz-Projekt-Repository herunter (auf das durch den ersten Link oben auf der Seite verwiesen wird) und kopieren Sie den Inhalt des Ordners /src/ (Ordner MFRC522) in den Ordner / Arduino / library / (Pfad zum Ordner) hängt davon ab, wo Sie die Arduino IDE installiert haben), am häufigsten in Dokumenten / Programmdateien unter älteren Windows-Betriebssystemen.

    Verfügbare Bibliotheken für Mikrocontroller


    Bibliotheksarchiv (.zip) erweitern auf C:/Users/[User]/Documents/Arduino/libraries
    Name der Bibliothek Bibliotheksfunktion Herunterladen
    MFRC522

    Bibliothek für AVR-Mikrocontroller (ATmega) Arduino Uno / Nano / Mega. Es ermöglicht die Kommunikation mit dem RFID-Lesegerät NXP RC522 über den SPI-Bus.

    Herunterladen
    LiquidCrystal_I2C

    Bibliothek für AVR-Mikrocontroller (ATmega) Arduino Uno / Nano / Mega. Es ermöglicht die Kommunikation mit dem LCD-Zeichendisplay über den I2C-Bus.

    Herunterladen

    Beispiel für gespeicherte UID-RFID-Karten in Excel-Dokumenten (.xls):

    Fyzické UID RFID kariet uložené v prehľadnom Excel dokumente

    Programmausgabe an die UART-Schnittstelle:

    Výpis UID RFID tagu, karty na UART rozhranie s vypísaním typu karty

    Software-Implementierung für RFID Stoppuhr der Dominanz:

  • UID-Daten für RED, GRE, Schiedsrichter und Radiergummi, eingebettet in Felder, die einfach skaliert werden können, um die Anzahl der Spieler zu erhöhen
  • Software-Implementierung - DOMINATION TIMER RFID
    Die Vorlage ist auch in der Offline-Version im .xlsx-Format verfügbar: Template.xlsx
    /*|------------------------------------------------------------------|*/
    /*|Titel: Abrufen der RFID-Kartenkennung                             |*/
    /*|Beschreibung: Liest über RFID-Lesegerät RC522                     |*/
    /*|die Adresse der angebrachten und ausgedruckten RFID-Karte Kennung |*/
    /*|auf der UART-Schnittstelle.                                       |*/
    /*|Die aufgezeichneten UID-Karten werden in RFID Stoppuhr verwendet  |*/
    /*|Der Autor: Martin Chlebovec                                       |*/
    /*|E-mail: martinius96@gmail.com                                     |*/
    /*|Nutzungslizenz: MIT                                               |*/
    /*|Revision: 12. März 2021                                           |*/
    /*|------------------------------------------------------------------|*/
    
    #include <SPI.h>
    #include <MFRC522.h>
    #define SS_PIN 10
    #define RST_PIN 9
    
    MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
    void setup() {
      Serial.begin(9600);
      while (!Serial);
      SPI.begin();
      rfid.PCD_Init(); // Init MFRC522
      rfid.PCD_SetAntennaGain(rfid.RxGain_max);
      rfid.PCD_DumpVersionToSerial();
    }
    
    void loop() {
      if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
        Serial.print(F("Card UID: "));
        dump_byte_array(rfid.uid.uidByte, rfid.uid.size);
        Serial.println();
        Serial.print(F("PICC type: "));
        MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
        Serial.println(rfid.PICC_GetTypeName(piccType));
        rfid.PICC_HaltA();
        rfid.PCD_StopCrypto1();
      }
    
    }
    
    void dump_byte_array(byte *buffer, byte bufferSize) {
      for (byte i = 0; i < bufferSize; i++) {
      }
      Serial.print("Nacitany kod: ");
      unsigned long kod = 10000 * buffer[4] + 1000 * buffer[3] + 100 * buffer[2] + 10 * buffer[1] + buffer[0]; //finalny kod karty
      Serial.println(kod);
    }
    

    I2C-Scanner - ein Programm zum Lesen der Adresse des I2C-Wandlers für das LCD-Display


    Erwartete Ausgabe des I2C-Scanners:

    Výpis I2C adresy, na ktorej komunikuje I2C prevodník pre displej 16x2 / 20x4
    Die Wire-Bibliothek ist in die Arduino IDE integriert. Eine Installation ist nicht erforderlich. Das Programm kann sofort hochgeladen werden. Es wird empfohlen, den Hardware-I2C-Konverter für die 16x2 / 20x4-Anzeige auch ohne Anzeige anzuschließen, bevor Sie das Programm starten.
    #include <Wire.h>
     
     
    void setup()
    {
      Wire.begin();
     
      Serial.begin(9600);
      while (!Serial);             // Leonardo: wait for serial monitor
      Serial.println("\nI2C Scanner");
    }
     
     
    void loop()
    {
      byte error, address;
      int nDevices;
     
      Serial.println("Scanning...");
     
      nDevices = 0;
      for(address = 1; address < 127; address++ )
      {
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the address.
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
     
        if (error == 0)
        {
          Serial.print("I2C device found at address 0x");
          if (address < 16)
            Serial.print("0");
          Serial.print(address,HEX);
          Serial.println("  !");
     
          nDevices++;
        }
        else if (error==4)
        {
          Serial.print("Unknown error at address 0x");
          if (address < 16)
            Serial.print("0");
          Serial.println(address,HEX);
        }    
      }
      if (nDevices == 0)
        Serial.println("No I2C devices found\n");
      else
        Serial.println("done\n");
     
      delay(5000);           // wait 5 seconds for next scan
    }