Como pasar una variable uint8_t a una función

Buenas tardes.
Tengo que passar unos parametros a una funcion, uno de ellos és un uint8_t que contiene una direccion IP y no se como hacer.

Llamada a funcion:
a = ValorSlaveModbus ("{172, 20, 20, 212}", 502, 1, 6, 2);

“{172, 20, 20, 212}” → seguro que no es correcto !!!

La funcion:
long ValorSlaveModbus (uint8_t IPSlave , uint16_t PortSlave , int idAddress, int Address, int Qtt)

La función no recibi bien la IP.

Adjunto el codigo:

long a = 0;

void setup() 
  {
  Serial.begin(9600);
  }

void loop() 
  {
  a = ValorSlaveModbus ("{ 172, 20, 20, 212 }", 502, 1, 6, 2);
  Serial.print("Hola "); Serial.println(a);
  delay(2000);
  }

long ValorSlaveModbus( uint8_t IPSlave[], uint16_t PortSlave[], int idAddress, int Address, int Qtt)
  {
  long resultat = 0 ;

  resultat = random (1,50000);
  return resultat; 
  }

TestRutina_00.ino (437 Bytes)

Mas informacion, el resultado de ejecutar el codigo que adjunto és:

IP :123.32.49.55 Port:47288 1,6,2
y lo estoy haciendo mal, porque deveria ser:
IP :172.20.20.212 Port:502 1,6,2

long a = 0;

void setup() 
  {
  Serial.begin(9600);
  }

void loop() 
  {
  a = ValorSlaveModbus ([b]"{ 172, 20, 20, 212 }"[/b], 502, 1, 6, 2);
  Serial.print("Hola:"); Serial.println(a);
  delay(2000);
  }

long ValorSlaveModbus( uint8_t IPSlave[], uint16_t PortSlave[], int idAddress, int Address, int Qtt)
  {
  long resultat = 0 ;

  int* comoInt = (int*) IPSlave;
  Serial.print("IP  :");
  Serial.print(IPSlave[0]); Serial.print(".");
  Serial.print(IPSlave[1]); Serial.print(".");
  Serial.print(IPSlave[2]); Serial.print(".");
  Serial.print(IPSlave[3]); 
  Serial.print(" Port:");
  Serial.print(PortSlave[0]); 
  Serial.print(" "); Serial.print(idAddress); Serial.print(","); 
  Serial.print(Address); Serial.print(","); Serial.println(Qtt);
  
  resultat = random (1,50000);
  return resultat; 
  }

¿No te sirve así?

ip_slv[4] = {172, 20, 20, 212};
prt_slv[1] = {502};
a = ValorSlaveModbus (ip_slv, prt_slv, 1, 6, 2);

Atento: PortSlave también está definido como array, no podés pasar un literal.

Saludos

PD: Edita tus post y pon el código como corresponde (ver Normas del foro, punto 7), es para tu beneficio. :wink:

Disculpa el tema del código.
Si funciona tal como tu propones, mil gracias.

long a = 0;
uint8_t ip_slv[] = {172, 20, 20, 212};
uint16_t prt_slv = 502;

void setup() 
  {
  Serial.begin(9600);
  }

void loop() 
  {

  a = ValorSlaveModbus (ip_slv, prt_slv, 1, 6, 2);
  Serial.print("Hola:"); Serial.println(a);
  delay(2000);
  }

long ValorSlaveModbus( uint8_t IPSlave[], uint16_t PortSlave[], int idAddress, int Address, int Qtt)
  {
  long resultat = 0 ;

  int* comoInt = (int*) IPSlave;
  Serial.print("IP  :");
  Serial.print(IPSlave[0]); Serial.print(".");
  Serial.print(IPSlave[1]); Serial.print(".");
  Serial.print(IPSlave[2]); Serial.print(".");
  Serial.print(IPSlave[3]); 
  Serial.print(" Port:");
  Serial.print(PortSlave[0]); 
  Serial.print(" "); Serial.print(idAddress); Serial.print(","); 
  Serial.print(Address); Serial.print(","); Serial.println(Qtt);
  
  resultat = random (1,50000);
  return resultat; 
  }

Solo me queda arreglar la impression del
Serial.print(" Port:"); Serial.print(PortSlave[0]);
Que al ser de 16bits, no me imprime bien. Pero ya es un detalle menor.
Gracias.

Mira, yo he hecho varias pruebas antes de sugerirte el código e imprimía bien todas las cifras.
En todo caso prueba con

Serial.print(PortSlave[0], DEC);

pero como te dije, a mi no me hizo falta.

Saludos

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.