  *
  *  Recommended Modbus Master: QModbus
  *  http://qmodbus.sourceforge.net/
+ *
+ *  Editado al español por LuxARTS
  */
 
+//Incluye la librería del protocolo Modbus
 #include <ModbusRtu.h>
 #define ID   1
 
-Modbus slave(ID, 0, 0); // this is slave ID and RS-232 or USB-FTDI
+//Crear instancia
+Modbus slave(ID, 0, 0); //ID del nodo. 0 para el master, 1-247 para esclavo
+                        //Puerto serie (0 = TX: 1 - RX: 0)
+                        //Protocolo serie. 0 para RS-232 + USB (default), cualquier pin mayor a 1 para RS-485
 boolean led;
 int8_t state = 0;
 unsigned long tempus;
 
-// data array for modbus network sharing
-uint16_t au16data[9];
+uint16_t au16data[9]; //La tabla de registros que se desea compartir por la red
 
-/**
- *  Setup procedure
- */
+/*********************************************************
+ Configuración del programa
+*********************************************************/
 void setup() {
-  io_setup(); // I/O settings
+  io_setup(); //configura las entradas y salidas
 
-  // start communication
-  slave.begin( 19200 );
-  tempus = millis() + 100;
-  digitalWrite(13, HIGH );
+  slave.begin(19200); //Abre la comunicación como esclavo
+  tempus = millis() + 100; //Guarda el tiempo actual + 100ms
+  digitalWrite(13, HIGH ); //Prende el led del pin 13 (el de la placa)
 }
 
-/**
- *  Loop procedure
- */
+/*********************************************************
+ Inicio del programa
+*********************************************************/
 void loop() {
-  // poll messages
-  // blink led pin on each valid message
-  state = slave.poll( au16data, 9 );
+  //Comprueba el buffer de entrada
+  state = slave.poll( au16data, 9 ); //Parámetros: Tabla de registros para el intercambio de info
+                                     //            Tamaño de la tabla de registros
+                                     //Devuelve 0 si no hay pedido de datos
+                                     //Devuelve 1 al 4 si hubo error de comunicación
+                                     //Devuelve mas de 4 si se procesó correctamente el pedido
 
-  if (state > 4) {
-    tempus = millis() + 50;
-    digitalWrite(13, HIGH);
+  if (state > 4) { //Si es mayor a 4 = el pedido fué correcto
+    tempus = millis() + 50; //Tiempo actual + 50ms
+    digitalWrite(13, HIGH);//Prende el led
   }
-  if (millis() > tempus) digitalWrite(13, LOW );
-
-  // link the Arduino pins to the Modbus array
+  if (millis() > tempus) digitalWrite(13, LOW );//Apaga el led 50ms después
+  
+  //Actualiza los pines de Arduino con la tabla de Modbus
   io_poll();
 } 
 

  digitalWrite(7, LOW );
  digitalWrite(8, LOW );
  digitalWrite(9, LOW );
  digitalWrite(13, HIGH ); // this is for the UNO led pin
  analogWrite(10, 0 );
  analogWrite(11, 0 );
}

/**
 *  Link between the Arduino pins and the Modbus array
 */
void io_poll() {
  // get digital inputs -> au16data[0]
  bitWrite( au16data[0], 0, digitalRead( 2 ));
  bitWrite( au16data[0], 1, digitalRead( 3 ));
  bitWrite( au16data[0], 2, digitalRead( 4 ));
  bitWrite( au16data[0], 3, digitalRead( 5 ));

  // set digital outputs -> au16data[1]
  digitalWrite( 6, bitRead( au16data[1], 0 ));
  digitalWrite( 7, bitRead( au16data[1], 1 ));
  digitalWrite( 8, bitRead( au16data[1], 2 ));
  digitalWrite( 9, bitRead( au16data[1], 3 ));

  // set analog outputs
  analogWrite( 10, au16data[2] );
  analogWrite( 11, au16data[3] );

  // read analog inputs
  au16data[4] = analogRead( 0 );
  au16data[5] = analogRead( 1 );

  // diagnose communication
  au16data[6] = slave.getInCnt();
  au16data[7] = slave.getOutCnt();
  au16data[8] = slave.getErrCnt();
}

 * 14 - analog input
 * 15 - analog input
 *
 * pin 13 reservado para ver el estado de la comunicación
 */
void io_setup() {
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
