Помогите уменьшить размер скетча!

Я не знаю, что делать?

Sketch использует 3712 байт (12%) места для хранения программ. Максимальный размер – 30 720 байт.

Глобальные переменные используют 210 байт (10%) динамической памяти, оставляя 1838 байт для локальных переменных. Максимальный размер – 2048 байт.

Программа:

String texto;
int flag;
void setup() {
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(7, OUTPUT);//луз стоп
pinMode(8, OUTPUT);//фарос
}
void loop() {
while (Serial.available())//
{
delay (10);
if (Serial.available() > 0) //проверить, доступен ли последовательный порт и проверить, есть ли он
caracter
{
char c = Serial.read(); // сохраняем любые символы, пришедшие через последовательный порт
texto += c; //мы объединяем
}
} ///Управляющие операторы///
if (texto == "1") // сравниваем содержимое переменной "text" с числом 1
{
digitalWrite(7,LOW); //Выключаем стоп-сигнал
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
}
if (texto == "3") // сравниваем содержимое переменной "text" с числом 3
{
digitalWrite(7,LOW); //Выключаем стоп-сигнал
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
}
if (texto == "2") // сравниваем содержимое переменной "text" с числом 2
{
digitalWrite(7,LOW); //Выключаем стоп-сигнал
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
}
if (texto == "4") // сравниваем содержимое переменной "text" с числом 4
{
digitalWrite(7,LOW); //Выключаем стоп-сигнал
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
}
if (texto == "5") // Сравните содержимое переменной "text" с числом 5
{
digitalWrite(7,HIGH); //включаем стоп-сигнал
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
}
if (texto == "6") // Сравните содержимое переменной "text" с числом 6
{
if (flag==1)
{digitalWrite(8, LOW);
flag=0;
}
else if (flag==0)
{digitalWrite(8, HIGH);
flag=1;
}
}
texto = "";
}

, 👍1

Обсуждение

В чем проблема, у вас осталось много места?, @Sim Son

Я не знаю, что делать? ... я думаю, что ты единственный, кто знает ответ на этот вопрос, @jsotola


1 ответ


1

В следующий раз выберите код и нажмите ctrl-K... Также выровняйте код (сделав отступ).

Однако на самом деле вам не нужна помощь, так как у вас достаточно памяти. Как написано:

  • Вы используете только 12 % пространства для хранения программ. Может показаться, что это слишком много для такого маленького скетча, но в основном это связано с использованием библиотеки/фреймворка (например, с вызовами digitalWrite).
  • 210 байт динамической памяти тоже не о чем беспокоиться. Кстати, это связано не с размером скетча, а с использованием вами (глобальных и других) переменных.

Поэтому, если вы не знаете заранее, что ваш скетч будет намного больше, не изменяйте его по этой причине (слишком мало места).

Однако есть и другая причина, чтобы сократить скетч, и это из-за дублированного кода. Как видите, во всем скетче много повторений (или почти повторений), как в:

if (texto == "5") //Сравниваем контенидо переменной "texto" с числом 5
{
  digitalWrite(7,HIGH); //Enciende la luz stop
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(10, LOW);
  digitalWrite(9, LOW);
}

Что вы можете сделать, чтобы улучшить его:

  • Либо используйте оператор switch вместо операторов if/else
  • Или создайте функцию, включающую это условие вместе со следующим элементом. Это решение в вашем случае самое понятное.

Вы создаете новую функцию:

void setPins(bool condition, int pin7, int pin11, int pin12, int pin10, int pin9)
{
  if (condition)
  {
    digitalWrite(7, pin7);
    digitalWrite(11, pin11);
    digitalWrite(12, pin12);
    digitalWrite(10, pin10);
    digitalWrite(9, pin9);
  }
}

И вы вызываете свою функцию с помощью:

setPins(texto == "5", HIGH, LOW, LOW, LOW, LOW);

И то же самое для всех остальных условий. Я использовал только 5 в качестве примера.

,