Hola a todos. tengo un arduino UNO y una Ethernet Shield Wiznet W5100 y quiero conectarla a un PLC Siemens S7-1200 para que me lea los datos de un sensor ultrasonico Hc-sr04, buscando en vídeos tutoriales y foros vi el código para poder conectar ambos aparatos (arduino - plc) a los cual le acople el resto del código para hacer funcionar el sensor. Pero tengo un problema y es que no puedo hacer "ping" y comprobar la conexión con el arduino apareciéndome la frase "Host de destino inaccesible."
- ya verifique que mi PC y el arduino estén en la misma subred.
- verifique que la shield, cable, router y los materiales están buenos, ya que hice pruebas con los ejemplos de la librería de ethernet como servidor y luego poniendo la ip en google y ningún drama.
- probé con el mismo código pero con otras librerías (SPI.h, Ethernet.h, Modbus.h, ModbusIP.h) y puedo hacer "ping" pero cuando pongo la librería que necesito para enlazar el arduino con el plc me sale error al momento de compilar el arduino (Se encontraron múltiples librerías para "EtherCard.h")
adjunto el código para que revisen y vean si me pueden ayudar.
#include <EtherCard.h>
#include <ModbusIP_ENC28J60.h>
#include <Modbus.h>
#define Ptrig 7
const int SENSOR_IREG = 100; //direccion modbus para el dato del sensor.
const int Pecho= A0;
ModbusIP mb;
long duracion, distancia;
long ts; //para modbus
byte mac[]= {0XDE, 0XAD, 0XBE, 0XEF, 0XFE, 0XED}; // MAC
byte ip[]= {192, 168, 0, 6}; // IP
void setup()
{
Serial.begin (9600); // inicializa el puerto seria a 9600 baudios
mb.config(mac,ip); // configuracion de la tarjeta
mb.addIreg (SENSOR_IREG);
ts = millis ();
pinMode(Pecho, INPUT); // define el pin 0 como entrada (echo)
pinMode(Ptrig, OUTPUT); // define el pin 7 como salida (triger)
pinMode(13, 1); // Define el pin 13 como salida
}
void loop() {
digitalWrite(Ptrig, LOW);
delay(2);
digitalWrite(Ptrig, HIGH); // genera el pulso de triger por 10ms
delay(10);
digitalWrite(Ptrig, LOW);
duracion = pulseIn(Pecho, HIGH);
distancia = (duracion/2) / 29; // calcula la distancia en centimetros
if (distancia >= 500 || distancia <= 0){ // si la distancia es mayor a 500cm o menor a 0cm
Serial.println("---"); // no mide nada
}
else {
Serial.print(distancia); // envia el valor de la distancia por el puerto serial
Serial.println("cm"); // le coloca a la distancia los centimetros "cm"
}
mb.task();
if (millis()>ts+1000)
ts= millis();
mb.Ireg(SENSOR_IREG, analogRead(Pecho));
delay(500); // espera 400ms para que se logre ver la distancia en la consola
}
Espero me puedan ayudar ya que estoy casi desesperado, por que le doy y le doy vueltas y nada.