I made a program for fun, using the serial monitor to send data to the arduino that will respond text and will do simple additions.
I was at about 70% of dynamic memory usage when i added some useless line of code that printed more text, when i recompiled it the dynamic memory suddently became 3% and everything would still work except the addition.
what i added was about the maxi variable.
heres my code:
int no1 = 10;
int no2 = 5;
int result;
int reset = 0;
int wait = 500;
int fromuser = 0;
bool calculate = true;
int gen = 0;
int maxi = 100;
String incomingByte = String(15);
bool readytogetwaitset = false;
bool readytogetmaxset = false;
//bool readytogetwaitset = false;
//menu
bool isinsetmenu = false;
bool isindelaysetmenu = false;
bool isinmaxsetmenu = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.print("0 ");
delay(wait);
}
void loop() {
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.readString();
incomingByte.trim();
Serial.flush();
// say what you got:
Serial.println(" ");
Serial.print("I received: ");
Serial.println(incomingByte);
(calculate = false);
//basic fonctions
if (incomingByte == "restart") {
goto restart;
}
if (incomingByte == "location") {
Serial.print("is in set menu -> ");
Serial.println(isinsetmenu);
Serial.print("is in delay set menu -> ");
Serial.println(isindelaysetmenu);
Serial.print("is in max set menu -> ");
Serial.println(isinmaxsetmenu);
goto bailout;
}
if (incomingByte == "stop") {
(calculate = false);
Serial.println("stopped");
goto bailout;
}
if (incomingByte == "info") {
Serial.println("made by Emil, v0.1");
Serial.println("to get command info, type com-info");
Serial.println("to get system info, type sys-info");
goto bailout;
}
if (incomingByte == "gen") {
Serial.print("current gen: ");
Serial.println(gen);
goto bailout;
}
if (incomingByte == "exit" || incomingByte == "menu") {
Serial.println("exited to menu");
(isinsetmenu = false);
(isindelaysetmenu = false);
(isinmaxsetmenu = false);
goto bailout;
}
if (incomingByte == "sys-info") {
(incomingByte = "");
Serial.println("various system information");
Serial.println(" ");
Serial.println("location");
Serial.print("is in set menu -> ");
Serial.println(isinsetmenu);
Serial.print("is in delay set menu -> ");
Serial.println(isindelaysetmenu);
Serial.print("is in max set menu -> ");
Serial.println(isinmaxsetmenu);
Serial.println("");
Serial.println("Variables");
Serial.println(" ");
Serial.print("Last calculus result -> ");
Serial.println(result);
Serial.print("current wait time -> ");
Serial.println(wait);
Serial.print("can calculate -> ");
Serial.println(calculate);
Serial.print("ready to get new wait set -> ");
Serial.println(readytogetwaitset);
Serial.print("current incomingByte -> ");
Serial.println(incomingByte);
Serial.print("current generation -> ");
Serial.println(gen);
Serial.print("current maximum -> ");
Serial.println(maxi);
// result wait calculate readytogetwaitset incomingByte gen maxi
goto bailout;
}
if (incomingByte == "com-info") {
Serial.println("restart restart counting prosses");
Serial.println("location tells user curent location");
Serial.println("stop stops counting prosses");
Serial.println("info basic informaation about the arduino program");
Serial.println("com-info this pannel, information about various commands");
Serial.println("sys-info important system information");
Serial.println("set enter the setting menu");
Serial.println("gen current calculus generation");
Serial.println("menu or exit comes back to the main menu, exiting all other menu");
goto bailout;
}
//set menu
//enter the set menu
if (incomingByte == "set") {
Serial.println("setting (1.) wait time between calculations");
Serial.println(" (2.) maximum number for the result of the calculation");
Serial.println(" (3.) empty");
(isinsetmenu = true);
goto bailout;
} else if ((incomingByte != "set") && (isinsetmenu == false) && (isindelaysetmenu == false) && (isinmaxsetmenu == false)) {
Serial.println("error_no associated keyword");
goto bailout;
}
//sets the wait delay
if ((incomingByte.toInt() > 0) && (incomingByte.toInt() < 6552) && (isindelaysetmenu == true)) {
(readytogetwaitset = false);
(isindelaysetmenu = false);
(wait = incomingByte.toInt());
Serial.print(" delay set as ");
Serial.print(wait);
Serial.println(" ms");
goto bailout;
} else if ((incomingByte.toInt() <= 0) && (isinmaxsetmenu == true) || (incomingByte.toInt() >= 6552) && (isinmaxsetmenu == true)) {
Serial.print("error_out of bond ");
Serial.println(incomingByte);
Serial.println("should be within 1 and 6551 ms");
Serial.println("you are still in delay set menu, enter proper value");
goto bailout;
}
//set max ammount for calculation
if ((incomingByte.toInt() > 0) && (incomingByte.toInt() < 10000) && (isinmaxsetmenu == true)) {
(readytogetmaxset = false);
(isinmaxsetmenu = false);
(maxi = incomingByte.toInt());
Serial.print(" maximum set as ");
Serial.print(maxi);
Serial.println(" ");
goto bailout;
} else if ((incomingByte.toInt() <= 0) && (isinmaxsetmenu == true) || (incomingByte.toInt() >= 10000) && (isinmaxsetmenu == true)) {
Serial.print("error_out of bond ");
Serial.println(incomingByte);
Serial.println("should be within 1 and 32000 unit");
Serial.println("you are still in max set menu, enter proper value");
goto bailout;
}
//choose which menu to go into
if ((incomingByte == "1.") && (isinsetmenu == true) && (isindelaysetmenu == false)) {
Serial.println("set to what amount?(wait)");
(readytogetwaitset = true);
(isinsetmenu = false);
(isindelaysetmenu = true);
goto bailout;
} else if ((incomingByte == "2.") && (isinsetmenu == true) && (isindelaysetmenu == false)) {
Serial.println("set to what amount?(max)");
(readytogetmaxset = true);
(isinsetmenu = false);
(isinmaxsetmenu = true);
goto bailout;
} else if ((incomingByte == "3.") && (isinsetmenu == true) && (isindelaysetmenu == false)) {
Serial.println("set to what amount?(empty)");
//(readytogetwaitset = true);
(isinsetmenu = false);
//(isindelaysetmenu = true);
Serial.println("empty menu, exit");
goto bailout;
} else if ((incomingByte != "1.") && (incomingByte != "2.") && (incomingByte != "3.") && (isinsetmenu == true) && (isindelaysetmenu == false)) {
Serial.println("error_no associated keyword setmenu");
goto bailout;
} else if ((incomingByte != "1.") && (incomingByte != "2.") && (incomingByte != "3.") && (isinsetmenu == false) && (isindelaysetmenu == false)) {
Serial.println("error_wrong keyword");
goto bailout;
}
}
bailout:
(incomingByte = "");
if (calculate == true && result >= (maxi)) {
result = result + no2;
Serial.print(result);
Serial.print(" ");
delay(wait);
}
if (result >= (maxi)) {
Serial.print("finished");
(gen = gen + 1);
restart:
(isinsetmenu = false);
(isindelaysetmenu = false);
(isinmaxsetmenu = false);
Serial.println(" restart ");
(result = reset);
(calculate = true);
digitalWrite(13, HIGH);
delay(wait * 5);
digitalWrite(13, LOW);
Serial.print(result);
Serial.print(" ");
}
}