B4R Question Help with inline c

Hello, please can any help with this code
Puerto:
Sub Process_Globals
    Public Serial1 As Serial
    Private Result As Int
End Sub

Private Sub AppStart
    Serial1.Initialize(115200)
    Log("AppStart")
    RunNative("readModbusRegisters", Null)
    Log("Resultado: ", Result)
End Sub

#if C
#include <ModbusMaster.h>
#include <SoftwareSerial.h>

SoftwareSerial S(4, 5); // RX = GPIO4 (D2), TX = GPIO5 (D1)
ModbusMaster node;
#define DE_PIN 4 // Pin para controlar DE/RE del módulo RS485

void preTransmission() {
  digitalWrite(DE_PIN, HIGH);  // Habilitar la transmisión
}

void postTransmission() {
  digitalWrite(DE_PIN, LOW);   // Habilitar la recepción
}

void setup() {
  pinMode(DE_PIN, OUTPUT);
  digitalWrite(DE_PIN, LOW);  // Empieza en modo recepción
  S.begin(9600); // Asegúrate de que la velocidad coincide con el dispositivo Modbus
  node.begin(1, S); // Dirección del dispositivo Modbus
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);
  Serial.begin(115200); // Velocidad para depuración
  Serial.println("Iniciando comunicación Modbus RTU...");
}

void readModbusRegisters(B4R::Object* o) {
  uint8_t result;
  uint16_t data[2];

  result = node.readHoldingRegisters(0x0300, 2);

  if (result == node.ku8MBSuccess) {
    data[0] = node.getResponseBuffer(0);
    data[1] = node.getResponseBuffer(1);
    uint32_t serialNumber = (data[0] << 16) | data[1];
    Serial.printf("Número de serie: %08X\n", serialNumber);
    b4r_main::_result = serialNumber;  // Asigna el resultado a la variable global de B4R
  } else {
    Serial.printf("Error en la comunicación Modbus: %d\n", result);
    b4r_main::_result = -1;  // Indica un error
  }
}
#End if



Can anyone tell if it is possible to use this code because I can't run it?
 
Last edited:
Top