Command Line Arduino library

Command Line Arduino library

Requirements

Arduino IDE: http://www.arduino.cc  (v 1.8.0 or above)

CmdLine library: https://github.com/IndustrialShields/arduino-CmdLine

 

Installation

https://www.arduino.cc/en/Guide/Libraries#toc4

 

Description

Add 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.

 

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");
   }
 }

 

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.

Los comentarios están cerrados