Go Down

Topic: Inicializar la IP (Read 283 times) previous topic - next topic

11Vane

Hola a todos

   Estoy realizando un proyecto que ya me funciona teniendo conectado el puerto serie a Arduino, sin embargo al intentar que la placa funcione con la ultima configuracion al suministrarle solo voltaje no consigo que funcione.

 El código de programa utiliza una placa extra con cnexion ethernet y ha de inicializar la ip y los datos de red al arrancar y creo que es esa parte la que no realiza cuando suprimo la subida del codigo con el puerto serie .


Que podria hacer?
 gracias de antemano

surbyte

#1
Mar 14, 2020, 02:28 pm Last Edit: Mar 14, 2020, 02:34 pm by surbyte
Hola #11Vane, bienvenido al foro Arduino.
En la sección proyectos tienes estos dos hilos que debiste haber leído antes de postear




Como tu consulta es para otra sección lo muevo a Hardware (porque hablas de un problema de tensión).
Presta mas atención a las indicaciones que cada foro tiene.

labgluon

Buenas 11Vane,

Estaría bien, que ante dudas así pusieras el código que estás usando, y como estás conectado el Arduino y las placas.

11Vane

Hola!
Mi programacion es muy sencilla
Se trata de un lector de tarjetas que dependiendo de si las tiene registradas o no mada un codigo udp que sera un mensaje en red para otros dispositivos.

 El problema que tengo es que al trabajar con el puerto de comunicacion y volcar le programa funciona sin problema
  Al desconectar el puerto de comunicacion y conectar la alimentacion directamente no se inicializa la ip y por lo tanto no funciona nada en la red.

 te dejo el codigo
 

// no soy tampoco una crack con el codigo...



//RST          D9
//SDA(SS)      D8
//MOSI         D11
//MISO         D12
//SCK          D13
 
#include <SPI.h>
#include <MFRC522.h>
#include <SPI.h>
#include <Ethernet.h>

EthernetUDP Udp;
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x5C, 0x18};
IPAddress ip(192,168,1,15);
unsigned int localport = 8888;

IPAddress remoteIP(192,168,1,200);
unsigned int remotePort = 0002;
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

 
const int RST_PIN = 9;        // Pin 9 para el reset del RC522
const int SS_PIN = 8;        // Pin 8 para el SS (SDA) del RC522
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Crear instancia del MFRC522
 
byte validKey1[4] = { 0x4E, 0x4C, 0xB3, 0xC7 };  // Ejemplo de clave valida
byte validKey2[4] = { 0x01, 0x28, 0xB3, 0xC7 };
byte validKey3[4] = { 0x4E, 0x46, 0xB3, 0xC7 };
 
//Función para comparar dos vectores
bool isEqualArray(byte* arrayA, byte* arrayB, int length)
{
  for (int index = 0; index < length; index++)
  {
    if (arrayA[index] != arrayB[index]) return false;
  }
  return true;
}
 
void setup() {
  Serial.begin(9600);
 Serial.println("****************");
 Serial.println("Puerto Serial OK");


 
 Ethernet.begin(mac,ip);
 Serial.print("IP : ");
 Serial.println(Ethernet.localIP());
 Udp.begin(localport);
 Ethernet.setSubnetMask(subnet);
 
  SPI.begin();        // Iniciar SPI
  mfrc522.PCD_Init(); // Iniciar MFRC522
}
 
void loop() {
  // Detectar tarjeta
  if (mfrc522.PICC_IsNewCardPresent())
  {
    //Seleccionamos una tarjeta
    if (mfrc522.PICC_ReadCardSerial())
    {
      // Comparar ID con las claves válidas
      if (isEqualArray(mfrc522.uid.uidByte, validKey1, 4)){
        Serial.println("Tarjeta valida");
         Udp.beginPacket(remoteIP, remotePort);
         Udp.write("message");
         Serial.println("Mensaje UDP");
         Udp.endPacket();
         delay(5000);}
      else
      {
        if (isEqualArray(mfrc522.uid.uidByte, validKey2, 4)){
        Serial.println("Tarjeta valida 2");
         Udp.beginPacket(remoteIP, remotePort);
         Udp.write("message");
         Serial.println("Mensaje UDP");
         Udp.endPacket();
         delay(5000);}
         else
         {
          if (isEqualArray(mfrc522.uid.uidByte, validKey3, 4)){
        Serial.println("Tarjeta valida3");
         Udp.beginPacket(remoteIP, remotePort);
         Udp.write("message");
         Serial.println("Mensaje UDP");
         Udp.endPacket();
         delay(5000);}
         
         else
        Serial.println("Tarjeta invalida");
         }
      }
   
   
      mfrc522.PICC_HaltA();
    }
 
  }

    //cierre de lectura y comprobacion
// cierre deteccion tarjeta
  delay(250);
 
}//cierre de void loop





 Un abrazo y gracias!!

labgluon

Buenas,

Teniendo en cuenta la de cosas que pueden ser, te voy a dar unas pautas para que puedas depurar el código y el hardware.

Por lo que dices, es difícil que sea el hardware, así que prueba con un multímetro a ver que la alimentación de todo está bien. Es decir, comprueba que cuando alimentas de otra fuente, los voltajes que llegan al lector de SD y del ethernet, sobre todo los 5 o 3.3v de alimentación.

Luego comprueba, que la fuente con la que alimentas todo, puede dar corriente suficiente para hacer trabajar todo...

Por último prueba a depurar usando el LED del arduino, para ver hasta donde llega el código y por donde está pasando (puedes hacer que se encienda si llega a un punto concreto).

Son muchos puntos posibles de fallo como para poder ayudarte en un correo, intenta acotar un poco más el problema, y quizá te pueda ayudar mejor.


Un saludo y suerte!

surbyte

#5
Mar 15, 2020, 04:02 pm Last Edit: Mar 15, 2020, 04:07 pm by surbyte
Moderador:
Lee las normas tal como te pedí en mi primer respuesta y edita tu post#3.
Menos mal que te lo indiqué antes y aún asi posteaste sin leer las normas.

Usa etiquetas para códigos y edita por favor.



Respueta a tu pregunta:

Jamás vi que se use un puerto como este

Code: [Select]
unsigned int remotePort = 0002;

En principio me llama la atención, no digo que no se pueda, solo que siempre he visto puertos desde el 15 en adelante. Por qué no lo se!!
Si uso unpuerto para una comunción UDP o TCP/IP seguro estará desde 1000 en adelante porque todos los ejemplos que he visto los usan asi.

Ahora tu dices
Quote
Estoy realizando un proyecto que ya me funciona teniendo conectado el puerto serie a Arduino, sin embargo al intentar que la placa funcione con la ultima configuracion al suministrarle solo voltaje no consigo que funcione.
Que funciona bien con el puerto serie? No entiendo que puerto serie.
Tienes un Lector de RFID, eso funciona?
La pregunta es, probaste algún ejemplo de la librería Ethernet, cuál fue el resultado, con dicho ejemplo?

Go Up