1

I have a string:

string s="digitalWrite(8,LOW);"

Is there any way to run it as a code?

4
  • Not an easy way, since you basically would need to write a C/C++ interpreter library for this. I don't know of such a library. Why do you need to do this? What are you trying to achieve?
    – chrisl
    Commented Mar 14, 2020 at 10:30
  • To run commands that will be saved in external eeprom
    – rktech
    Commented Mar 14, 2020 at 10:38
  • Do you really have such complex programs to save there, that you need C syntax text there? Instead you could build your own command structure, which can be way easier to interpret. What commands do you need to save in the EEPROM?
    – chrisl
    Commented Mar 14, 2020 at 10:52
  • @chrisl thank you, I forgot that I can do it like this
    – rktech
    Commented Mar 14, 2020 at 11:34

1 Answer 1

2

This is actually pretty simple:

if (s == "digitalWrite(8,LOW);") {
    digitalWrite(8,LOW);
}

Obviously, it will not work is s contains any other string... If you want something more general, that is able to interpret a wide range of possible commands, you will have to define a language, and write an interpreter for that language. From the example you give, it seems you would like your language to look like C++. This is most likely a bad design choice. If you want an interpreter that understands the whole C++ language: forget it. You will never fit something this big into an Arduino Uno.

Here is, for inspiration, a very simple interpreter I wrote that understand the following commands:

mode <pin> <mode>: pinMode()
read <pin>: digitalRead()
aread <pin>: analogRead()
write <pin> <value>: digitalWrite()
awrite <pin> <value>: analogWrite()
echo <value>: set echo off (0) or on (1)

You can use it a basis for writing your custom interpreter. Otherwise you can do a Web search for “Arduino interpreter”: you should be able to find interpreters implementing a wide variety of languages, including compact binary languages (Firmata), Forth (another one), Lisp, Basic, and even a C-like language.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.