I have tried all sorts of things to get this to work. I have tried cutting and pasting the Turtles example, scrutinizing the writing, and structure of the sketch, and I always get an error "unknown command" when I try to send an int variable using the button onclicksend.
What gives?
Here is the code:
/* **********************************************************************************************
this sketch is to monitor and send signals when ceetain parameters are met
* ********************************************************************************************** */
#include "MegunoLink.h"
#include "CommandHandler.h" // The serial command handler is defined in here.
CommandHandler<> SerialCommandHandler;
InterfacePanel Airflowpanel;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Uncomment if you would like to use plotting channels
// TimePlot MyPlot("Waveforms"); //"Waveforms" = the taget plotting channel (remember to select this in megunolink)
TimePlot MyPlot; //no channel selected
const int meterpin = A0;// pin that the airflow meter is connected to
const int LEDPin = 13; // Pin the LED is attached to
const int CFrun = 3; //the pin the AKTA input is for
const int Fail1 = 12; // this sends the message of test fail/pass to the AKTA
int metervoltage = 0; // the sensor value
int doublemetervoltage = 0;
int testtime = 0;
float digitalcoeff = 0;
float flowrate = 0;
float Ccmvar = 0;
float setpoint = 0;
long starttime = 0;
long runtime = 0;
long trun = 10000;
bool george;
bool paramselect;
String Start = Start;
void Cmd_SetBoolean(CommandParameter &Parameters)
{
Serial.print("Got new boolean:");
paramselect = Parameters.NextParameterAsInteger();
Serial.println(paramselect);
}
void Cmd_Settesttime(CommandParameter &Parameters)
{
testtime = Parameters.NextParameterAsInteger();
}
void setup()
{
pinMode(LEDPin, OUTPUT);
//pinMode (CFrun,INPUT);
pinMode (Fail1, OUTPUT);
Serial.begin(9600);
SerialCommandHandler.AddCommand(F("SetBoolean"), Cmd_SetBoolean);
SerialCommandHandler.AddCommand(F("Time"), Cmd_Settesttime);
MyPlot.SetTitle("Airflow in Cubic Centimeters per minute (Ccm/min)");
MyPlot.SetXlabel("Time");
MyPlot.SetYlabel("Ccm/min");
MyPlot.SetSeriesProperties("flowrate", Plot::Blue, Plot::Solid, 2, Plot::NoMarker);
lcd.begin(16, 2); //Activates and defines the LCD
lcd.clear();
}
void loop()
{
trun=(testtime*60000);
SerialCommandHandler.Process();
//if (CFrun ==HIGH)
if (trun > 0)
{
starttime = millis();
Airflowpanel.SetText("teststatus", "Testing");
digitalWrite (LEDPin, LOW);
digitalWrite (Fail1, LOW);
//digitalRead(CFrun);
if (paramselect)
{
Airflowpanel.DisableControl("sixCcm");
setpoint = 3.00;
Airflowpanel.SetText("alarmsetpoint", setpoint);
SerialCommandHandler.Process();
}
if (!paramselect)
{
setpoint = 6.00;
Airflowpanel.DisableControl("threeCcm");
Airflowpanel.SetText("alarmsetpoint", setpoint);
SerialCommandHandler.Process();
}
if (george)
{
while (runtime < trun)
{
Airflowpanel.SetText("teststatus", "Testing");
//while (CFrun==HIGH)*/
metervoltage = analogRead(meterpin); //read the sensor
doublemetervoltage = 2 * metervoltage;
digitalcoeff = (5 / 1023);
flowrate = 0.00488759 * doublemetervoltage; //(0.00488759=digitalcoeff);
lcd.setCursor(4, 0);
lcd.print(flowrate);
lcd.print(" ccm");
//Send Data To MegunoLink Pro
MyPlot.SendData(F("flowrate"), flowrate); // "flowrate" is series name, flowrate is the actual data value being ploted
Airflowpanel.SetText("flowrate", flowrate);
Airflowpanel.SetText("MeterVoltage", metervoltage);
Airflowpanel.SetText("doublemetervoltage", doublemetervoltage);
digitalWrite (LEDPin, LOW);
if (flowrate <= setpoint)
{
Airflowpanel.SetText("teststatus", "Testing");
}
if (flowrate >= setpoint)
{
digitalWrite(Fail1, HIGH);
digitalWrite(LEDPin, HIGH);
Airflowpanel.SetText("teststatus", "Test Failed");
Airflowpanel.EnableControl("threeCcm");
Airflowpanel.EnableControl("sixCcm");
george = !george;
}
if (runtime >= trun)
{
Airflowpanel.SetText("teststatus", "Test PASSED");
Airflowpanel.EnableControl("threeCcm");
Airflowpanel.EnableControl("sixCcm");
george = !george;
Serial.print("runtime");
Serial.println(runtime);
}
runtime = millis() - starttime;
Serial.print("runtime");
Serial.println(runtime);
delay(1000);
}
}
}
}
Getting "unknown command" with button onclicksend
Hi Griiker, program looks good to me and seems to work for me. When i send
"!SetBoolean 1\r" it prints out the message
And when I send
"!Time 10\r" it seems to start sending a bunch of messages.
Did you make sure you put the "!" and "\r"? The command handler needs these to find the start and end of a message respectively.
Cheers
Phil
"!SetBoolean 1\r" it prints out the message
And when I send
"!Time 10\r" it seems to start sending a bunch of messages.
Did you make sure you put the "!" and "\r"? The command handler needs these to find the start and end of a message respectively.
Cheers
Phil
This is the message I get in the Monitor:
!Settime 1Unknown command
!Settime 1Unknown command
This is the command that is sent: !Settime [Time.Value]\r
and the function:
void Cmd_Settime(CommandParameter &Parameters)
{
testtime = Parameters.NextParameterAsInteger();
Serial.print("testing time " );
Serial.println(testtime);
}
and in the void setup:
SerialCommandHandler.AddCommand(F("Time"), Cmd_Settime);
what am i doing wrong here?
!Settime 1Unknown command
!Settime 1Unknown command
This is the command that is sent: !Settime [Time.Value]\r
and the function:
void Cmd_Settime(CommandParameter &Parameters)
{
testtime = Parameters.NextParameterAsInteger();
Serial.print("testing time " );
Serial.println(testtime);
}
and in the void setup:
SerialCommandHandler.AddCommand(F("Time"), Cmd_Settime);
what am i doing wrong here?
In the example you gave you have this
SerialCommandHandler.AddCommand(F("Time"), Cmd_Settime);
But it should be
SerialCommandHandler.AddCommand(F("Settime"), Cmd_Settime);
to work. The string (bit in the " ") is the command.
In your example you send the command "Settime" but the command handler is looking for "Time".
Cheers
Phil
SerialCommandHandler.AddCommand(F("Time"), Cmd_Settime);
But it should be
SerialCommandHandler.AddCommand(F("Settime"), Cmd_Settime);
to work. The string (bit in the " ") is the command.
In your example you send the command "Settime" but the command handler is looking for "Time".
Cheers
Phil
unfortunately, as I was expecting, fixing the unalike lines did nothing. The discrepancy is likely the result of me trying various combinations of verbiage trying to get the thing to work. I carefully matched the verbiage of the two lines, and still getting the same "unknown command" message.
I do get a response when I press a button that sends "!Settesttime[testtime.Value]\r" I have a number box "testtime" which I put different number in, so it looks like the communication between the interface panel and arduino is working. so what could it be? what command is it referring to by "unknown command"?
!Settesttime1
Unknown command
!Settesttime1
Unknown command
!Settesttime2
Unknown command
!Settesttime3
Unknown command
void Cmd_SetBoolean(CommandParameter &Parameters)
{
paramselect = Parameters.NextParameterAsInteger();
if (!paramselect)
{
setpoint = 6.00;
Airflowpanel.DisableControl("threeCcm");
Airflowpanel.SetText("alarmsetpoint", setpoint);
george = true;
}
if (paramselect)
{
setpoint = 3.00;
Airflowpanel.DisableControl("sixCcm");
Airflowpanel.SetText("alarmsetpoint", setpoint);
Airflowpanel.SetText("teststatus", "Testing");
george = true;
}
}
void Cmd_Settesttime(CommandParameter &Parameters)
{
testtime = Parameters.NextParameterAsInteger();
Serial.print("testing time " );
Serial.println(testtime);
george = true;
}
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode (CFrun, INPUT);
pinMode (Fail1, OUTPUT);
Serial.begin(9600);
SerialCommandHandler.AddCommand(F("SetBoolean"), Cmd_SetBoolean);
SerialCommandHandler.AddCommand(F("Settesttime"), Cmd_Settesttime);
I do get a response when I press a button that sends "!Settesttime[testtime.Value]\r" I have a number box "testtime" which I put different number in, so it looks like the communication between the interface panel and arduino is working. so what could it be? what command is it referring to by "unknown command"?
!Settesttime1
Unknown command
!Settesttime1
Unknown command
!Settesttime2
Unknown command
!Settesttime3
Unknown command
void Cmd_SetBoolean(CommandParameter &Parameters)
{
paramselect = Parameters.NextParameterAsInteger();
if (!paramselect)
{
setpoint = 6.00;
Airflowpanel.DisableControl("threeCcm");
Airflowpanel.SetText("alarmsetpoint", setpoint);
george = true;
}
if (paramselect)
{
setpoint = 3.00;
Airflowpanel.DisableControl("sixCcm");
Airflowpanel.SetText("alarmsetpoint", setpoint);
Airflowpanel.SetText("teststatus", "Testing");
george = true;
}
}
void Cmd_Settesttime(CommandParameter &Parameters)
{
testtime = Parameters.NextParameterAsInteger();
Serial.print("testing time " );
Serial.println(testtime);
george = true;
}
void setup()
{
pinMode(LEDPin, OUTPUT);
pinMode (CFrun, INPUT);
pinMode (Fail1, OUTPUT);
Serial.begin(9600);
SerialCommandHandler.AddCommand(F("SetBoolean"), Cmd_SetBoolean);
SerialCommandHandler.AddCommand(F("Settesttime"), Cmd_Settesttime);