Помогите уменьшить размер скетча!
Я не знаю, что делать?
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 = "";
}
@Salvador Adrián León Chávez, 👍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 в качестве примера.
- Функция freeMemory() из библиотеки memoryfree не возвращает уменьшенное значение в arduino UNO
- Приемлемо ли новое без удаления?
- Библиотека MemoryFree, демонстрирующая нестандартное поведение..!
- Если код, используемый для ардуино, может быть встроен в постоянную вызываемую память, есть ли способ создать ОС для Arduino, которая запускается по вызову?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Получить доступ к EEPROM ATtiny с помощью кода Arduino?
- как быстро loop() работает в Arduino
- Глобальные переменные занимают много места в динамической памяти.
В чем проблема, у вас осталось много места?, @Sim Son
Я не знаю, что делать?
... я думаю, что ты единственный, кто знает ответ на этот вопрос, @jsotola