Сделал небольшой скетч и решил проверить в ИИ
Этот код типичен для визуальных сред программирования (вроде FLProg). Основные проблемы: использование ресурсозатратного класса String, лишние вызовы map и analogRead, а также неэффективная очистка экрана, вызывающая мерцание.
В браузере гугла, в режиме ИИ попросил "оптимизироваь код" и ввел сам код.
Показать
Код: Выделить всё
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x27, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
int _disp1oldLength = 0;
void setup()
{
Wire.begin();
delay(10);
_lcd1.init();
_lcd1.backlight();
}
void loop()
{
if (_isNeedClearDisp1)
{
_lcd1.clear();
_isNeedClearDisp1= 0;
}
//Плата:1
if (!(0))
{
_dispTempLength1 = (((String((map(((analogRead (0))), (0), (100), (0), (1023))), DEC)))).length();
if (_disp1oldLength > _dispTempLength1)
{
_isNeedClearDisp1 = 1;
}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print(((String((map(((analogRead (0))), (0), (100), (0), (1023))), DEC))));
}
else
{
if (_disp1oldLength > 0)
{
_isNeedClearDisp1 = 1;
_disp1oldLength = 0;
}
}
}
Думал какую-то шляпу выдаст, но он справился. Оптимизировал, да еще и с комментариями.
Показать
Код: Выделить всё
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int lastValue = -1; // Для отслеживания изменений
void setup() {
lcd.init();
lcd.backlight();
}
void loop() {
// Читаем значение один раз за итерацию
int rawValue = analogRead(A0);
// Аналог вашей логики: map(val, 0, 100, 0, 1023) -> это просто умножение на 10.23
int mappedValue = map(rawValue, 0, 100, 0, 1023);
// Обновляем экран только если значение изменилось
if (mappedValue != lastValue) {
updateDisplay(mappedValue);
lastValue = mappedValue;
}
delay(50); // Небольшая задержка для стабильности
}
void updateDisplay(int value) {
// Вычисляем длину числа без использования String
int length = (value >= 1000) ? 4 : (value >= 100) ? 3 : (value >= 10) ? 2 : 1;
int pos = (16 - length) / 2;
// Вместо полной очистки lcd.clear() (которая медленная),
// затираем старые символы пробелами
lcd.setCursor(0, 0);
for (int i = 0; i < pos; i++) lcd.print(" "); // Пробелы до числа
lcd.print(value);
for (int i = 0; i < (16 - pos - length); i++) lcd.print(" "); // Пробелы после
}
После компиляции 14% и 9%. разница ощутимая для маленького кода.
Проверил в tinkercad, работает одинаково, причем после ИИ стабильнее. Первый код иногда прибавляет лишний разряд.
Вот вам и "Иллюзия Интелекта".
Но я. к сожалению, далек от программирования. Поэтому хочется комментариев от знающих людей. Как будет с большими проектами?