sending values to Gauge

Support forum for MegunoLink
Post Reply
ElectricRay1981
Posts: 6
Joined: Thu Jan 26, 2023 5:27 pm

Sun Jan 29, 2023 12:01 pm

When I try to send data to the Gauge I keep having the message AddCommand: full. When I directly send a number in the Arduino sketch it works fine but when I attach a variable it doesn't work. Does anybody knows what I am doing wrong?

Code: Select all

void loop() {
  SerialCmds.Process();                                             //Monitor serial commands
  if (timeOut(250)) {  // 4 Hz update frequency
    cli(); //stop interrupts
    prevPulseUsCopy = prevPulseUs;
    pulseUsCopy = pulseUs;
    sei(); //allow interrupts
    pulsePeriod = pulseUsCopy - prevPulseUsCopy;
    if (pulsePeriod) rpm = 20 + slotUs / pulsePeriod ;
    Serial.println(rpm);
    
    SerialCmds.AddCommand(F("GetSpeed"),Cmd_SendSpeedRightMotor);
  }

}

void Cmd_SendSpeedRightMotor(CommandParameter& p)
{
    InterfacePanel MyPanel;
          
  // Set control value
  MyPanel.SetNumber(F("IPGauge2"), rpm);
}
Above the part of my code that should send the value rpm to Megunolink. rpm is a integer. I hope someone knows what I am doing wrong.
philr
Posts: 446
Joined: Mon May 26, 2014 10:58 am

Wed Feb 01, 2023 8:11 am

Hi, can you post the rest of your program?

You should only add the command handler once in the setup part of your program. Not in the loop part.
ElectricRay1981
Posts: 6
Joined: Thu Jan 26, 2023 5:27 pm

Sun Feb 05, 2023 2:47 pm

Sorry for the late reply I did not receive a notification (I found the checkbox now). I was able to make it work over serial connection but when creating a WiFi connection I'm unable to send data to the gauge wireless.

Code: Select all

/* ******************************************************************

#include <TCPCommandHandler.h>
#include <CommandHandler.h>
#include "CommandProcessor.h"
#include <MegunoLink.h>
#include <WiFi.h>
 

const char *SSID = "My SSID";
const char *WiFiPassword = "My PSWD";

 
const char *Host = "Desktop IP";
const unsigned Port = 11000;
 
WiFiClient Client;

InterfacePanel MyPanel; 
CommandHandler<> SerialCmds;


 
void ConnectToWiFi()
{
 
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID, WiFiPassword);
  Serial.print("Connecting to "); Serial.println(SSID);
 
  uint8_t i = 0;
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print('.');
    delay(500);
 
    if ((++i % 16) == 0)
    {
      Serial.println(F(" still trying to connect"));
    }
  }
 
  Serial.print(F("Connected. My IP address is: "));
  Serial.println(WiFi.localIP());
}
 
WiFiClient *GetClient()
{
  if (!Client.connected() && Client.connect(Host, Port))
  {
    return &Client;
  }
 
  return Client.connected() ? &Client : NULL;
}
 
void SendMeasurement(unsigned Value)
{
  WiFiClient *pClient = GetClient();
 
  if (pClient != NULL)
  {
      MyPanel.SetNumber(F("RightSpeedGauge"), 1);
  }
  else
  {
    Serial.println("TCP Connection failed");
  }
}
 
void setup() 
{
  Serial.begin(9600);
 
  ConnectToWiFi();
}
 
void loop() 
{
  SerialCmds.Process(); 
  unsigned Measurement = 10;
  SendMeasurement(Measurement);
 
  delay(1000);
}
As you can see I tried to use the example from the documention but appearently I use it the wrong way. Not sure what to do, I was hoping that the command

Code: Select all

MyPanel.SetNumber(F("RightSpeedGauge"), 1);
would send a value of 1 to the gauge over WiFi connection.
When I ping the ESP32 I get a response so it is connected to the network. How should I fix this?

Thanks in advance
Post Reply