I have a string:
string s="digitalWrite(8,LOW);"
Is there any way to run it as a code?
-
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– chrisl2020年03月14日 10:30:37 +00:00Commented Mar 14, 2020 at 10:30
-
To run commands that will be saved in external eepromrktech– rktech2020年03月14日 10:38:24 +00:00Commented 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– chrisl2020年03月14日 10:52:30 +00:00Commented Mar 14, 2020 at 10:52
-
@chrisl thank you, I forgot that I can do it like thisrktech– rktech2020年03月14日 11:34:53 +00:00Commented Mar 14, 2020 at 11:34
1 Answer 1
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.