Repositorio de proyectos - Shareware de firmware para RFID Dominator: Firmware del temporizador de dominación de Airsoft
Si está interesado en el firmware completo para RFID DOMINADOR, comuníquese con el autor en inglés en:

martinius96@gmail.com

Arduino LCD RFID, NFC RC522 Cronógrafo Esquema Airsoft Paintball DOMINADOR

RFID DOMINADOR - cronómetro para Airsoft | Paintball


La nueva versión del proyecto RFID DOMINADOR es compatible con los siguientes tipos de firmware del lector RFID NXP RC522:
  • Versión de firmware: 0x12 = chip falsificado - (chip NXP no original, reemplazo)
  • Versión de firmware: 0x91 = Versión 1.0 - (chip NXP Semiconductors original)
  • Versión de firmware: 0x92 = Versión 2.0 - (chip NXP Semiconductors original)

  • Entidades en RFID DOMINADOR para Airsoft:


    RFID náramok štandardu ISO/IEC 14443-A - Tím RED
    El equipo RED
    RFID náramok štandardu ISO/IEC 14443-A - Tím GRE
    El equipo GRE
    RFID náramok štandardu ISO/IEC 14443-A - Rozhodca
    Árbitro
    RFID náramok štandardu ISO/IEC 14443-A - Eraser
    Borrador

    Descripción del proyecto RFID DOMINADOR para Airsoft:


    DOMINADOR (Domination Timer) es un dispositivo (cronómetro) diseñado para 2 equipos que juegan uno contra el otro e intentan ocupar el punto y mantenerlo el mayor tiempo posible. El cronómetro es adecuado para el modo de juego DOMINATION de Airsoft / Paintball, resp. Colina de captura. Constan de un microcontrolador ATmega328P (AVR), que puede formar parte del kit de desarrollo Arduino (Uno/Nano/Pro Mini). Se utiliza una pantalla de caracteres LCD (tamaño 16x2 o 20x4) para visualizar los tiempos. Los tiempos se enumeran en dos líneas debajo de cada uno y se actualizan dinámicamente si hay un equipo activo en el punto (un punto ocupado por un equipo). El cronómetro está equipado con indicadores LED en los colores del equipo, que señalan el equipo activo en el punto y un detector (transductor piezoeléctrico), que anuncia el cambio en el punto después de colocar la tarjeta RFID. Los equipos se implementan en el juego: equipo RED y equipo GRE que juegan unos contra otros e intentan ocupar el punto y luego mantenerlo el mayor tiempo posible. Al comienzo del juego, la pantalla muestra los tiempos 00 horas, 00 minutos, 00 segundos para equipo RED , equipo GRE . Cada miembro del equipo está equipado con un chip RFID que se integra en la pulsera (o tarjeta/llavero). El chip RFID transmite su identificador único - UID (Unique ID), que es leído por un lector RFID y verificado en la lógica del sistema al que pertenece la entidad (equipo). Los brazaletes individuales se pueden codificar por colores (rojo, verde por función de equipo y entidad), lo que permite distribuirlos más rápidamente a los jugadores, pero también archivarlos y almacenarlos por color. El equipo RED ocupará el punto cuando el miembro del equipo RED adjunte su tarjeta al lector RFID. Esta acción activa un zumbador que anuncia el cambio de punto con un pitido breve. Posteriormente, el LED del equipo RED en esta estación se encenderá y la pantalla comenzará a agregar el tiempo de este equipo hasta que se inserte la tarjeta de equipo del miembro , Árbitro, o Borrador. Si el punto está ocupado por un jugador GRE y la tarjeta está conectada a un lector RFID, el zumbador anunciará este cambio con un pitido corto, el LED GRE se encenderá (el LED RED se apaga), el tiempo actual de RED se detiene y se puntúa el tiempo de GRE.


    Si el árbitro adjunta su tarjeta RFID, el tiempo de ejecución se detendrá en el valor actual. El punto se vuelve neutral, el LED del equipo activo se apaga. El paro dura hasta que un miembro del equipo RED o del equipo GRE presente su tarjeta. Por lo tanto, este tipo de tarjeta es adecuado para detener temporalmente un juego en curso, controlar la intervención de un jugador o las lesiones. Al mismo tiempo, la tarjeta se puede usar al final de una ronda del juego, para evaluar la ronda, reaparecer equipos antes de continuar. Si Eraser conecta la tarjeta, ambos tiempos se detendrán y se restablecerán al valor inicial de 00 horas, 00 minutos, 00 segundos, que se mostrará. La pestaña Borrador se usa para reiniciar el juego, inicializar un nuevo juego sin necesidad de un ciclo de encendido del dispositivo. El lector RFID responde inmediatamente a la inserción de una tarjeta RFID, incluyendo toda la lógica del proyecto Dominator. El proyecto es adecuado para eventos (MilSim, LARP) de Airsoft, instalaciones deportivas o equipos de Airsoft, que pueden construir un dispositivo Dominator con su propio hardware. El firmware es universal, que se basa en el diagrama de cableado, también es posible utilizar el diseño de PCB disponible para la producción de placas de circuito impreso. La ventaja del proyecto RFID DOMINADOR es que la licencia de uso autoriza al usuario a clonar y crear X puntos con la misma configuración vía código máquina. El código de máquina (.hex) es un formato de firmware compilado para el proyecto RFID Dominator para tarjetas UID RFID suministradas que están incrustadas en el código antes de la compilación. Por lo tanto, es posible colocar en el juego cualquier número de puntos RFID DOMINADOR que funcionen de forma independiente, que respondan a tarjetas RFID idénticas de acuerdo con una configuración uniforme. El sistema RFID Dominator está sintonizado, se puede poner en juego de inmediato. El firmware se carga en 10 segundos a través de XLoader .


    Lista de tiempos en la pantalla de caracteres LCD 20x4:


    LCD character display 20x4 - Arduino Domination Timer - DOMINADOR

    Kompatibilný riadiaci hardvér pre RFID DOMINADOR:



    Periféricos compatibles para RFID DOMINADOR:


    RFID DOMINATOR - DOMINATION TIMER

    El principio de funcionalidad del proyecto RFID DOMINADOR en términos de hardware:


    El lector RFID NXP RC522 se comunica con el microcontrolador (chip Arduino/stand-alone ATmega328P) a través del bus SPI con una señal de reloj (SCLK) de 4 MHz. El NXP RC522 responde a un chip RFID a una distancia de aproximadamente 3 cm de la antena, con una ganancia de antena configurable en el rango de 18 a 48 dB (48 dB se usa en la aplicación final para DOMINATOR). Lee el UID (identificador) de los chips RFID en rango, envía este identificador a Arduino. Arduino compara la dirección de la tarjeta de lectura en una condición múltiple, activa un pitido y aplica estados digitales a los LED . El Arduino ha estado ejecutando un contador (Temporizador 0) desde que se inició el procesador. La función millis() devuelve el número de milisegundos desde que se inició el procesador. El contador se utiliza para contar el tiempo del equipo activo en el punto DOMINADOR. Basado en la condición cumplida de ocupar un punto con la tarjeta RFID del equipo dado, el contador se aplica en la lógica del cronómetro para el equipo dado. El tiempo se representa en una pantalla de caracteres LCD de 16x2 o 20x4. Los datos de tiempo se envían a través del bus I2C con una señal de reloj (SCL) de 100 kHz (velocidad estándar). Para restaurar la pantalla lo más rápido posible, solo se sobrescribe el número en la posición dada (caracter dado). Las horas, los minutos y los segundos se reescriben solo cuando se modifican y siempre solo para un equipo determinado. Con serio interés, puede crear firmware en código máquina para ATmega328P, u otro microcontrolador personalizado para otros tipos de lectores RFID: RDM6300, PN532, Wiegand W26, aumentar la señal de reloj del bus I2C hasta 400 kHz (Fast Velocidad). Posible expansión de firmware para DOMINADOR a 3 o 4 equipos.

    RFID DOMINADOR - juego para 4 equipos
    Cantidad máxima de tiempo que se puede mostrar: 99 horas, 59 minutos y 59 segundos. - Las posiciones de tiempo se sobrescribirán incorrectamente cuando se desbo
    Consumo: aproximadamente 110 mAh con alimentación de 5V. Apto para alimentación mediante power bank, cargador desde un teléfono con salida USB, o cargador externo de 7 a 9V DC.

    Determinación del proyecto RFID DOMINADOR:


    El proyecto RFID DOMINADOR es, en cuanto a su versatilidad, adecuado para la implementación en acciones masivas de Airsoft / Paintball, y con la posibilidad de clonar el firmware, es posible colocar X puntos DOMINATOR con idéntico firmware en el campo de juego, que los jugadores pueden jugar con las mismas tarjetas RFID. Los puntos DOMINADOR clonados funcionan independientemente unos de otros. DOMINADOR también es adecuado para equipos, instalaciones deportivas y parques infantiles, que pueden utilizar este dispositivo para ampliar los servicios y modos de juego ofrecidos a diferentes números de jugadores. Si las tarjetas, pulseras o llaveros RFID están codificados por colores, es muy fácil y universal distribuirlos a los jugadores según su equipo, así como su almacenamiento. El chip RFID en sí está protegido en una caja de plástico, no le importa el barro, la suciedad, el agua, las heladas, no requiere mantenimiento. El chip no tiene batería, es pasivo. El lector RFID lo carga al campo eléctrico y le permite enviar un UID - identificador si está dentro del alcance del lector RFID. DOMINADOR es adecuado para modos de juego con el mismo número de jugadores en ambos equipos, p. DOMINACIÓN, Punto de captura (Puntos para múltiples puntos DOMINADOR clonados). El uso es principalmente para deportes Airsoft, Paintball.


    Demostración funcional - RFID DOMINADOR:



    Placa de circuito impreso - (DPS) - RFID DOMINADOR - GERBER / producción por ruta fotográfica


    El diseño de PCB tiene en cuenta el uso de la placa Arduino Nano
  • La PCB es de doble cara con perforaciones, dimensiones: 100x105 mm

  • Producción de PCB para RFID DOMINADOR en China/Eslovaquia


    Los PCB se pueden fabricar en Eslovaquia en PB Spoj , donde pueden producir PCB de doble cara. La producción se puede realizar, por ejemplo, en China, donde pueden producir PCB de doble cara a partir del diseño GERBER. Uno de los fabricantes más populares y económicos es JLCPCB, donde los archivos GERBER se pueden cargar directamente como un archivo .zip. La PCB se visualiza, las capas, las dimensiones de la PCB y la PCB de doble cara se configuran automáticamente. La producción tarda 1-2 días. Este fabricante solía ser famoso por la acción de producir 10 piezas de PCB por $ 2.


    Hoy, JLCPCB te permite producir 5 piezas de este PCB para RFID DOMINADOR por 6,96 €, 10 piezas por 10,16 € (actualmente a partir de enero de 2021, los precios están subiendo). Envío: la alternativa más barata está disponible a 7,44 € para la entrega de DHL dentro de 3-5 días hábiles, mientras que el precio del envío es de 23,16 €. JLCPCB aplicará automáticamente un cupón de descuento de 8 € para el envío, que se le asignará al registrarse. Así, con la alternativa de envío más barata con entrega en 25 días, este envío es gratis con el cupón en la primera compra. Un fabricante de PCB interesante también es AISLER, que ofrece producción de PCB a partir de 3 piezas con un precio de unos 7,6 € por pieza con envío gratuito, o también ofrece la posibilidad de envío por un cargo adicional a través de UPS. También es posible utilizar otros fabricantes disponibles, por ejemplo: PCBWay, AllPCB, NextPCB, SeeedStudio, que tienen la tecnología para la producción de PCB por método de máquina a partir de archivos GERBER.

    DPS pre Airsoft DOMINADOR - AISLER Osadená DPS s komponentami pre RFID Dominator

    Pin headre en PCB de diseño:


  • 2 pines hembra de 15 pines (para Arduino Nano)
  • 1x pin-header hembra de 8 pines (para lector RFX NXP RC522)
  • 1 pin-header hembra de 90 ° de 4 pines (para convertidor de pantalla LCD I2C 20x4)

  • Separadores en la PCB de diseño:


  • 4x espaciador para pantalla LCD de caracteres 20x4 (Ø máx. 2,5 mm)
  • 2 espaciadores RFID NXP RC522 (Ø máx. 3,5 mm)

  • Dimensiones de la pieza:


    Está disponible un documento PDF con las dimensiones de las piezas utilizadas para el montaje de PCB: AQUÍ

    El cableado de la placa de circuito - RFID DOMINADOR - corresponde completamente al diagrama de cableado:


    Arduino Uno / Nano (ATmega328P) NXP RFID RC522
    GND GND
    3V3 3V3
    D9 RST
    D10 SDA (SS)
    D11 (Hardware MOSI) MOSI
    D12 (Hardware MISO) MISO
    D13 (Hardware SCK) SCK
    Arduino Uno / Nano (ATmega328P) Convertidor I2C para pantalla LCD
    GND GND
    5V Vcc
    A4 (Hardware SDA) SDA
    A5 (Hardware SCL) SCL
    Arduino Uno / Nano (ATmega328P) Zumbador
    GND GND
    D5 IN
    Arduino Uno / Nano (ATmega328P) LED diodos
    GND GND
    D4 IN (RED)
    D3 IN (GREEN)

    Diagrama de cableado - DOMINADOR RFID:


    Airsoft Dominator RFID

    Programa de prueba (Shareware) - RFID DOMINADOR con código máquina


    Está disponible una versión Shareware en forma de código de máquina (.hex) para el proyecto RFID DOMINADOR para el microcontrolador Arduino (ATmega328P, es decir, Arduino Uno / Nano / Pro Mini). La versión permite registrar inicialmente 4 tarjetas UID RFID diferentes, que se asignan a los equipos RED, GRE, Referee y Eraser. La solicitud para ingresar una tarjeta específica se muestra en una pantalla de caracteres LCD de 16x2 o 20x4 con un convertidor I2C. Posteriormente, es posible probar la mecánica del juego y la respuesta del lector a la tarjeta RFID con visualización del tiempo en la pantalla. Es posible medir un máximo de 15 segundos de juego para cada equipo con la posibilidad de resetearlo con una tarjeta Eraser y volver a medir por 15 segundos indefinidamente. El objetivo de la versión es verificar la compatibilidad con su hardware. Los códigos de máquina basados en la dirección del convertidor I2C para la pantalla LCD están disponibles en el repositorio de Github. Las direcciones de convertidor I2C más utilizadas son 0x27 y 0x3F. Si no conoce la dirección de su convertidor, use el ejemplo incorporado en Arduino IDE -> I2C Scanner (también disponible en esta página al final), que escribirá la dirección en la interfaz UART (Serial Monitor). El código de la máquina se puede cargar en el microcontrolador Arduino Uno a través del software AVRDUDE, parte del IDE de Arduino, o con una interfaz GUI a través de XLoader - más fácil de usar.

  • AVRDUDE debe ejecutarse a través del CMD (línea de comando) instalado con el IDE de Arduino. Situado en C:/Users/User/Documents/ArduinoData/packages/arduino/tools/avrdude/6.X.X-arduino/bin
  • Vzorový príkaz pre nahratie programu do Arduino Uno / Nano (ATmega328P):
  • avrdude -CC: avrdude.conf -v -patmega328p -carduino -PCOM21 -b115200 -D -Uflash:w:sketch.ino.hex:i
  • XLoader es una aplicación de Windows (herramienta ejecutable .exe) con una interfaz gráfica simple que le permite seleccionar el firmware - código de máquina (.hex), la plataforma de destino y puede mostrar dinámicamente el puerto COM en el que se encuentra el dispositivo.
  • Simplemente haciendo clic en Cargar, el código de máquina se puede cargar automáticamente ( XLoader utiliza similar a la herramienta Arduino IDE AVRDUDE). La ventana XLoader le informa de una carga exitosa enumerando la cantidad de bytes cargados.
  • La versión de firmware del proyecto RFID Dominator se puede descargar desde el repositorio: Firmware disponible AQUÍ. El firmware está en la carpeta Github del repositorio del proyecto /rfid_dominator/ dividido según la dirección del convertidor I2C (se enteró de la salida del escáner I2C en la interfaz UART). El programa tarda un máximo de 10 segundos en grabarse. Posteriormente, el firmware se iniciará automáticamente y se podrá probar. En el caso de la versión completa del proyecto RFID Dominator, se puede operar de forma permanente sin restricciones.

    Firmware disponible (Shareware) - RFID DOMINADOR


    Nombre del firmware (en la carpeta rfid_dominator) Funcionalidad Descargar
    RFID_Dominator_0x27.hex El firmware de prueba del proyecto RFID Dominator permite medir tiempos de 15 segundos para cada equipo. Diseñado para pantalla de caracteres LCD de 16x2 o 20x4 con convertidor I2C, que se comunica en la dirección 0x27 Descargar firmware
    RFID_Dominator_0x3F.hex El firmware de prueba del proyecto RFID Dominator permite medir tiempos de 15 segundos para cada equipo. Diseñado para pantalla de caracteres LCD de 16x2 o 20x4 con convertidor I2C que se comunica a 0x3F Descargar firmware

    Demostración funcional - Shareware RFID DOMINADOR:


    En el caso de los últimos clones chinos de Arduino Nano que tienen un "Old Bootloader", ¡es necesario grabar a 57600 baudios / s! Para otras versiones con el Bootloader más nuevo 115200 baudios/s (esta velocidad también se usa en el comando AVRDUDE para cargar código máquina).

    Programa para leer direcciones UID de tarjetas RFID para DOMINADOR


    El programa se utiliza para recuperar identificadores (UID) de etiquetas RFID, tarjetas que se utilizarán en el programa para RFID DOMINADOR - este código fuente no representa RFID DOMINATOR o su lógica ! . La tarjeta UID RFID se escribe en el monitor serial (UART); la velocidad utilizada es de 9600 baudios / s (caracteres por segundo). La declaración debe guardarse y transcribirse en un documento claro .xls (EXCEL), que facilitará la gestión de las tarjetas RFID asignadas a equipos y entidades específicos para la aplicación final de RFID DOMINATOR, cuyo código de máquina está vinculado a la tarjetas UID suministradas. Debe importar la biblioteca MFRC522 en su IDE de Arduino para cargar con éxito el código fuente para cargar las tarjetas UID.


    Bibliotecas disponibles para microcontroladores (Arduino)


    Archivo de la biblioteca (.zip) expandir a C:/Users/[User]/Documents/Arduino/libraries
    El nombre de la biblioteca Función de biblioteca Descargar
    MFRC522

    Biblioteca para microcontroladores AVR (ATmega) Arduino Uno / Nano / Mega. Permite comunicarse con lector RFID NXP RC522 vía bus SPI.

    Descargar
    LiquidCrystal_I2C

    Biblioteca para microcontroladores AVR (ATmega) Arduino Uno / Nano / Mega. Permite comunicarse con la pantalla de caracteres LCD a través del bus I2C.

    Descargar

    Ejemplo de tarjetas UID RFID almacenadas - Documento Excel .xls:


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

    Plantilla de inscripción de UID de Excel (.xls) - Hojas de cálculo de Google en línea: Google Tabuľky - RFID DOMINATOR Template

    Programová implementácia - DOMINATION TIMER RFID
    La plantilla también está disponible en la versión sin conexión en formato .xlsx: Template.xlsx
    /*|----------------------------------------------------------|*/
    /*|Título: Carga de tarjetas UID RFID                        |*/
    /*|Descripción: Lee a través del lector RFID RC522           |*/
    /*|la dirección de la tarjeta RFID que se adjunta e imprime  |*/
    /*|UID en la interfaz UART.                                  |*/
    /*|Las tarjetas UID grabadas se utilizarán para DOMINADOR    |*/
    /*|El utor: Bc. Martin Chlebovec                             |*/
    /*|E-mail: martinius96@gmail.com                             |*/
    /*|Revisión: 12. marcha 2021                                 |*/
    /*|----------------------------------------------------------|*/
    
    
    // Plantilla - Google SpreadSheet: https://docs.google.com/spreadsheets/d/1EHpdJi8v84eJ-6ExEPT6JuPkxI9Tfbm8v85zGRFvJ1Q/edit?usp=sharing
    
    
    /*
     * Typical pin layout used:
     * -----------------------------------------------------------------------------------------
     *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino
     *             Reader/PCD   Uno/101       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
     *
     */
    #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("Code: ");
      unsigned long kod = 10000 * buffer[4] + 1000 * buffer[3] + 100 * buffer[2] + 10 * buffer[1] + buffer[0]; //finalny kod karty
      Serial.println(kod);
    }
    

    Use la salida del programa a la aplicación principal RFID Dominator:


    Las tarjetas RFID UID registradas para RED, GRE, Árbitro y Borrador se ingresan en los campos. Los campos se pueden escalar fácilmente para ampliar el número de jugadores, árbitros... El UID debe proporcionarse en la salida .xls. Puede utilizar la plantilla pública para hojas de cálculo de Google encima del código fuente (icono de hoja de cálculo de Google). Los campos completos se almacenan en la memoria flash del microcontrolador como segmentos de solo fila, por lo que los campos no tienen que ejecutarse en la RAM para ocupar la memoria operativa que DOMINATOR usa para el conteo continuo de tiempos. Al mismo tiempo, los campos no se pueden ampliar mientras se ejecuta el programa. Su configuración, el tamaño se fija para una aplicación específica adaptada. El programa estándar RFID DOMINADOR para 10x UID para el equipo RED y GRE y 2x UID para Árbitro y Eraser (total 24x UID) ocupa 9512 bytes de memoria flash, i. 30% y 501 bytes de RAM, i. 24%. Variables de cadenas estáticas (const) almacenadas en PROGMEM. F macro utilizada para informes estáticos en el monitor UART o en la pantalla de caracteres LCD.


    Escáner I2C: un programa para leer la dirección del convertidor I2C para la pantalla LCD


    Salida esperada del escáner I2C:


    Výpis I2C adresy, na ktorej komunikuje I2C prevodník pre displej 16x2 / 20x4

    La biblioteca Wire está integrada en el IDE de Arduino, no se requiere instalación. El programa se puede compilar y verificar la comunicación a través del bus I2C con pantalla LCD de caracteres. El convertidor I2C debe conectarse a Arduino a los terminales de hardware I2C (SCL a A5, SDA a A4) antes de cargar el programa, es suficiente incluso sin pantalla. La dirección de visualización recuperada debe proporcionarse para una compilación exitosa de Arduino junto con el UID de las tarjetas RFID.

    #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
    }