|
Professor Seleznov
|

Новая прошивка варика Полгода прошло с первой статьи https://habr.com/ru/articles/969230/ , вариометр летает и сигнализирует о наборе высоты и о потере высоты, пилоты довольны. Код сыроват конечно. EMA фильтр стоит, линейная архитектура стоит, записи высот в полете нет и экспорта нет. Как-то работает. Но можно качественнее сделать. А вот когда лень переписывать с нуля, знакомая херня? Но решился. Развернул Hermes Agent, закинул на аккаунт DeepSeek4 40 юаней, это 430 рублей, и начал диалог в терминал. Работал в диалоге с консолькой, ну просто магия. Без промптов. "Сделай FSM(конечные автоматы) вместо ифов, добавь зуммер в стиле Браунигер, компенсацию акселерометра по трём осям с учётом гравитации, а не по модулю, трек полёта на флешпамять кольцевым буфером с CRC, WiFi экспорт через вебморду."

Это теперь основной рабочий инструмент Агент сам зашел на старый репо - сделал себе форк на винт, скачал себе среду разработки, все проверил, все скомпилировал, и запушил форк в репозиторий на гитхаб. И вот началось: ИИ задавал вопросы и вопросы эти не про цвет кнопок. А я испытал экзистенциальный ужас общения со сверхинтелектом, помните чемпиона го с Альфаго когда реакция «это что за ход»? Вот тут то же самое.

Теперь написание программ выглядит так Какую задержку комплементарного фильтра ставить? Ноль целых пять сотых - это быстро и шумно. Восемь секунд гладко, но задержка. Компромисс? Три. CRC16 на запись или CRC32 на блок? На секторе или рекорде? Как посадку определять по скорости изменения высоты или с акселерометром? А если в турбулентности данные с акселерометра это шум? Ты подумай, акселерометр в болтанке выдаёт мусор. Шесть часов. Код не писался, принимались решения, а ИИ реализовывал. За ночь сделано то, что пилилось бы три недели. А агент сожрал через дипсика токенов на 300 рублей. Код вырос до почти 2000 строк. Фильтр стал комплементарным с гравитацией и барометром. Архитектура стала конечным автоматом. Появился звук по просьбам пилотов, трекер в кольцевой буфер с CRC16 на каждый маркер высоты, WiFi экспорт через точку доступа с HTTP сервером отдающим CSV. Чувствительность от нуля до девяти, ватчдог на два ядра, самопроверка. Я отдал втихаря код опытному инженеру на ревью. Со словами - просто посмотри. Вердикт -Senior Embedded Avionics рейтинг 8.75 из 10, немного до идеала не дотянул, есть что поправить, пусть еще недельку поковыряет. Не ардуинщик, а профи. Дисциплина кода, ноль статиков, constexpr. Защита WDT, CRC, self test, умный сон. Зоны роста есть, пять I2C без проверки, документация отстаёт, гонка при старте. Но сам факт - senior выдаёт 100-200 строк в день. Тут 2000 за 6 часов. А автор в роли архитектора проектов написал ноль строк. З0 юаней купили три недели жизни. Остаётся непонятно, как к этому относиться. С одной стороны крутой продукт за копейки. С другой экспертиза кодера уровня синьора теперь стоит 300 рублей и 6 часов. Экспертиза архитектора дорогая. Но надолго ли? Ответ очевиден, признавать никто не хочет. А это на скрине затраты на токены - прожорливый агент, однако, 300 млн токенов потратил. Можете прикинуть, что будет по деньгам в других моделях.

Токены новая валюта. Затраты токенов на написание кода Отличия от родительского проекта:
| Область |
VibroVario (оригинал) |
VibroVarioAuto v1.6 (форк) |
| Версия |
1.1 (EMA filter) |
1.6 (FSM + трекер + WiFi) |
| Строк кода |
~549 |
~2000 |
| Звук |
Только вибро |
Вибро + баззер Brauniger-style |
| Фильтр |
EMA (простое сглаживание высоты) |
Комплементарный: gravity-vector из акселерометра + барo |
| Архитектура |
Линейный код |
Конечный автомат (6 состояний: CLOCK, SETTINGS, CALIBRATING, RUNNING, STOPPED, WEB_EXPORT) |
| Диспетчер |
if (state == X) размазан по коду |
switch(fsm.state) — табличный, entry/exit actions |
| Скрытые состояния |
static переменные в loop() и varioTask |
Все состояния в struct VarioFsm — ноль static locals |
| Кнопки |
BACK/SELECT/RIGHT (GPIO 26/35/4) |
UP/OK/DOWN (GPIO 25/4/35) — любая будит |
| Пробуждение |
Только UP (GPIO 25) |
UP, OK, DOWN — любая кнопка |
| Настройки |
Нет |
Экран Settings: Buzzer ON/OFF, Vibro ON/OFF, время, высота места |
| Настройки через web |
Нет |
/settings — установка часов и высоты через браузер |
| Самодиагностика |
Нет |
SELF-TEST при пробуждении (кнопки, датчики, батарея) |
| Обнаружение отказа BMP |
Нет — тихо замирает |
SENSOR FAIL на экране полёта |
| Акселерометр |
Проверка магнитуды |
Chip ID верификация (0x11), fallback при отказе |
| Управление задачей |
vTaskDelete() в любой момент |
vfsm.running = false + задержка — безопасное завершение I2C |
| init дисплея |
Всегда полный |
Пропускается при RTC alarm wake (экономия 200 мс) |
| Сон |
Фиксированный (всегда 60 с или 24ч) |
Умный: счётчик motionTime, 15 мин без движения → 24ч |
| Сторожевой таймер |
Нет |
WDT 10 сек на обоих ядрах — защита от зависания I2C |
| Запись трека |
Нет |
Кольцевой буфер на flash 1.5MB: номер полёта, время, высота (1 Гц) |
| Экспорт трека |
Нет |
WiFi AP + HTTP-сервер: CSV всех/одного полёта, таймаут 15 мин |
| Конфиги |
#define |
constexpr (типобезопасно) |
| Комментарии |
Русские |
Английские (100%) |
| Чувствительность |
Фиксированная |
Настраиваемая 0-9 (комплементарный фильтр) |
| Трекер |
Нет |
Кольцевой буфер с датой/временем/высотой в каждой записи |
Новый форк проекта целиком сделан агентом, ни одной команды на срр не было введено, только наш православный и могучий, с редкими вставками англицизмов ссылка на работу агента: https://github.com/advogr2022-max/VibroVario P.S. Пост не реклама, все за свои кровные. По коду не увидел смысла разбивать монолит на большое число модулей, хотя агент предлагал. Проект позиционируется как хоббийный на 1 выходной день, и не должен требовать сложной настройки программной среды даже у школьников. А что у вас из ембедд проектов получилось полностью сбросить на агентов?-Источник
|