My code dosent work nor use any dynamic memory

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

What is your question?

Just an info - your code uses 89% of dynamic memory of the Uno board

Modify all your statements that print text to use the F() macro.

BTW goto is not encouraged as it disrupts program flow and can create bugs that can’t be debugged easily. It is unnecessary with standard state machines, function calls, switch case options which allow normal flow of code


well it dosent at least on my install

Hi, @emil1326
Welcome to the forum.

This will show you how to post your code.

Thanks.. Tom... :smiley: :+1: :coffee: :australia:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.