Command Line Arduino Library

December 10, 2018 by
Command Line Arduino Library
Alejandro Jabalquinto


Introduction 

In this post it will be shown how to propperly work with the Command Line library. 

The library consists on adding a command line utility to the Arduino.

You can type customizable commands to the Arduino board through a Serial port to execute functions. For example, you can add a command “set-ip 192.168.1.10” to set the PLC IP address. Of course, you MUST implement the function which sets the IP address.


Requirements

Command Line library:        CmdLine library - Github Repository

Ethernet or 20 I/Os PLC:      Ethernet PLC             20 I/Os PLC     

Industrial Shields boards:   Industrial Shields Boards


Usage

When you open the Serial Monitor it appears a ‘>’ symbol which indicates that a command can be typed.

When you type ‘help’ (and press Enter), the printHelpCmd() function is executed and the list of available commands is printed.

When you type ‘setOutput HIGH’ or ‘setOutput LOW’, the setOutputCmd() function is executed. It uses the argument to set the output HIGH or LOW. If the argument is not ‘HIGH’ nor ‘LOW’, the setOutputCmd() function does nothing.

When you type ‘getInput’, the getInptuCmd() function is executed. It reads the I0.0 input and prints ‘I0.0 is HIGH’ or ‘I0.0 is LOW’ depending on the value of the digital input.


Example

You MUST define a set of commands with the associated functions to be executed: it is defined as an array of commands (cmd_t). In the example it is called ‘commands’. This variable MUST be used to initialize the CmdLine library, with CmdLine.begin(commands, sizeof(commands)).

The commands functions MUST accept a ‘const char *’ argument: a string representing the additional arguments passed to the command. You can use Arduino functions to treat these arguments, as IPAddress to get IP addresses, strcmp for comparing strings, atoi for converting strings to numbers, etc.

Here there is a simple example where we show this:

#include <CmdLine.h>
 
 // Create the command line and use the Serial port to introduce commands
 CmdLine cmdline(Serial);
 
 // Define the commands and associate them a function. The function is called when the
 // command is typed.
 // i.e. The "help" command calls the printHelpCmd function
 // IMPORTANT: functions MUST be declared before the commands definition, MUST accept a
 // 'const char *' argument and MUST return nothing (void)
 // The function argument is an optional argument typed after the command
 // i.e. > setOutput HIGH // 'arg' is "HIGH"
 void printHelpCmd(const char *arg);
 void setOutputCmd(const char *arg);
 void getInputCmd(const char *arg);
 
 const cmd_t commands[] = {
   {"help", printHelpCmd},
   {"setOutput", setOutputCmd},
   {"getInput", getInputCmd},
 };
 
 void setup() {
   // Start the Serial port to be used as a commandline
   Serial.begin(9600L);
   while (!Serial);
 
   // Start the cmdline to show the prompt and begin processing commands
   cmdline.begin(commands, sizeof(commands));
 }
 
 void loop() {
   // Update cmdline often to process commands written in the Serial port
   cmdline.update();
 }
 
 void printHelpCmd(const char *arg) {
   Serial.println("List of commands:");
   Serial.println("help                    print this help");
   Serial.println("setOutput HIGH|LOW      set Q0.0 to HIGH or LOW");
   Serial.println("getInput                get I0.0 digital value");
 }
 
 void setOutputCmd(const char *arg) {
   if (strcmp(arg, "HIGH") == 0) {
     digitalWrite(Q0_0, HIGH);
     Serial.println("Q0.0 set to HIGH");
   } else if (strcmp(arg, "LOW") == 0) {
     digitalWrite(Q0_0, LOW);
     Serial.println("Q0.0 set to LOW");
   }
 }
 
 void getInputCmd(const char *arg) {
   int value = digitalRead(I0_0);
   if (value == HIGH) {
     Serial.println("I0.0 is HIGH");
   } else {
     Serial.println("I0.0 is LOW");
   }
 }




​Search in our Blog

Command Line Arduino Library
Alejandro Jabalquinto December 10, 2018
Share this post

Looking for your ideal Programmable Logic Controller?

Take a look at this product comparison with other industrial controllers Arduino-based. 

We are comparing inputs, outputs, communications and other features with the ones of the relevant brands.


Industrial PLC comparison >>>