Перейти к содержанию

Андрей Гараж

Members
  • Постов

    39
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Зеленоград

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    МК

Посетители профиля

920 просмотров профиля

Достижения Андрей Гараж

Новобранец

Новобранец (2/14)

  • 10 постов на форуме
  • Месяц на форуме
  • Преданный
  • Неделя на форуме

Последние значки

0

Репутация

  1. Спасибо за ответ. Оказалось так глубоко копать не надо. Внес изменения в библиотеку "micromenu-v2" как на скринах. Удалил все, что связано с PROGMEM, и связанными с ней командами ("pgm_read_blablabla"). После этого сделал двухуровневое меню за полчаса. Видимо для ESP32 это работает только так, несмотря на то, что она понимает команды PROGMEM. Может проблема в разрядности "word"? Для AVR и ESP32 они 1 и 4 байта соответственно. Правда #include "MicroMenu.h" в теле скетча не работает, ошибки: undefined reference to `Menu_SetGenericWriteCallback(void (*)(char const*))' Если сделать так, extern "C" { #include "MicroMenu.h" } то все норм. Я не знаю почему так, но надеюсь кому-то пригодится.
  2. Здравствуйте! Есть такой макет (на фото), есть библиотека "micromenu-v2": https://github.com/abcminiuser/micromenu-v2 есть другая версия этой же библиотеки с описанием на русском http://easyelectronics.ru/organizaciya-drevovidnogo-menyu.html есть мой код: https://github.com/Andrew-Garage/menu Одна задача опрашивает кнопки, другая работает с дисплеем. При нажатии кнопки посылается соответствующее сообщение в задачу управления экраном. Объясните мне как работает эта библиотека, чтобы я смог сделать меню по образцу как на фото. У меня проблема с пониманием дефайна, с помощью которого создаются все пункты меню ("micromenu-v2/MicroMenu.h" строки 21-29 и 41-46). строки 21-29: typedef const struct Menu_Item { const struct Menu_Item *Next; /**< Pointer to the next menu item of this menu item */ const struct Menu_Item *Previous; /**< Pointer to the previous menu item of this menu item */ const struct Menu_Item *Parent; /**< Pointer to the parent menu item of this menu item */ const struct Menu_Item *Child; /**< Pointer to the child menu item of this menu item */ void (*SelectCallback)(void); /**< Pointer to the optional menu-specific select callback of this menu item */ void (*EnterCallback)(void); /**< Pointer to the optional menu-specific enter callback of this menu item */ const char Text[]; /**< Menu item text to pass to the menu display callback function */ } Menu_Item_t; строки 41-46: #define MENU_ITEM(Name, Next, Previous, Parent, Child, SelectFunc, EnterFunc, Text) \ extern Menu_Item_t MENU_ITEM_STORAGE Next; \ extern Menu_Item_t MENU_ITEM_STORAGE Previous; \ extern Menu_Item_t MENU_ITEM_STORAGE Parent; \ extern Menu_Item_t MENU_ITEM_STORAGE Child; \ Menu_Item_t MENU_ITEM_STORAGE Name = {&Next, &Previous, &Parent, &Child, SelectFunc, EnterFunc, Text} Да, я не очень в программировании, только учусь, чур не бросаться учебником. А если можно переведите на "пальцы" что тут написано?) Про первый блок: 1) Это определен тип данных структура Menu_Item... из структур этой же структуры Menu_Item? 2) void (*SelectCallback) (void) а это как понять? 3) Menu_Item_t зачем нужен? Почему нельзя обращаться через .Next или .Parent? Про второй блок: 1) Почему нельзя обращаться через .Next или .Parent? 2) Как слово "Name" (последняя строка) может объединять все предыдущие определения? По ссылкам? 3) И что вообще за значения передаются в MENU_ITEM? Где я должен их определить? MENU_ITEM_STORAGE это задефайненый PROGMEM. extern означает, что переменная определена где-то еще (что бы это не значило).
  3. По теме: кривая осциллограмма датчика походу была из-за плохого контакта в проводе щупа осциллографа. пересобрал тестовую схемку заново, все перевоткнул и сигнал стал норм - красный и зеленый именно такой как я писал в самом начале. 3их левых пакетов не обнаружено. А вот с цифрой фигня, если снимать со светодиодного пина то, что считала ардуина, происходит вот что: Считывается не то, и к тому же часть данных теряется. А ложные срабатывания ушли, когда на вторую ногу компаратора кинул 3.3 В, что видимо стоило сделать сразу. Но я следовал схеме платы и собрал как на ней. Набрел на ардуиновскую либу https://alexgyver.ru/directadc/ На ней можно завести программное прерывание, без него видимо никак. Не знаю как ардуиновский freeRTOS будет работать с программными прерываниями (и будет ли), я хотел обойтись без них. Завтра буду пробовать что-нибудь.
  4. На такие вопросы тут отвечают те, кто их и задает. Разве это еще не понятно? Или вы не уловили? Меня терзают сомнения...
  5. Если синий соленоид поднят, то его шрифт как бы продолжает магнитное поле оранжево-зеленого контура и перехватывает поводок. Если опущен, то зелёный контур его подхватит снова, пару сантиметров машинка может проехать прямо. Иногда правда это не срабатывает) На фотке под трассой, где контура, его даже видно. Он прямо под светофором- серый цилиндр в круглом отверстии. Тоже ещё не влезал туда, да и смысл? Там все намертво врезано и залито термоклеем.
  6. не) они как бы на "бампере" вроде того. может быть он не столько магнитится, сколько держит свое магнитное поле по полю контура. тк другие металлические предметы к дороге не притягиваются
  7. Это как-то завязано на адрес, который в исходнике в самом начале закомментирован. Такой-то адрес - такой-то маршрут. Но у зрителя создается впечатление что машинки ездят рандомно. На передней оси машинки латунный поводок - направляющая, на нем магнитик, и он примагничивается к контуру под дорогой. Так поворачиваются колеса. На перекрестке что-то типо железнодорожной стрелки, только переводит магнитный поток по которому следует машинка. Я еще не дошел до этого момента) Так что это дорога перестраивается, а машинка тут просто как ведомый элемент. // номер - минСкор - махСкор - маршрут + Kstart = // // // СПб - 214 - 174 - 101 // 0047 - СПб - едит через мост - 174 адр // 0089 - СПб - НЕ едит через мост - 214 адр // // 0093 - автоб зеленый - 90-180-197(был) - стал 60-137-174 СПб // 1078 - Груз - 60-160-113 - Псков // 1022 - ПАЗ - 80-180-182 // 0002 - автоб-МСК - 95-180-101 - // 157 адрес // 0097 - автоб МСК - 75-180-197 - короткий - малый круг
  8. Я ж скинул исходник, и уже говорили что там частота задефайнена на 1МГц. исходников светофоров нет. Я хотел исходя из пакетов передаваемых светофором отследить логику программы машинок по их исходнику. Сигнал такой какой на последних фотках, и по нему не понятно с какой частотой но задается.
  9. частотой чего? как по этому сигналу понять хоть что-либо, кроме того что он существует?) Весьма польщен)
  10. Собрал такую схемку на ардуине нано. С таким кодом: digitalWrite(13, ACSR&0b00100000); if(ACSR&0b00100000) Serial.println("1"); else Serial.println("0"); Осциллограмма на 13пине вышла такая: Откуда-то берутся ложные срабатывания. Ок, подключился к самому датчику: Все вроде четко, никаких лишних сигналов. Увеличил:
  11. эта штука подает питание на мотор, на нее идет шим. по маркировке не бьется, подключение перепроверил, да все именно так и работает
  12. Ну в данном случае, почти ничего) Ее я тоже в самом начале попробовал сделать, отладка по светодиодам - наше всё)
  13. Не, моргалка не дает ничего. Пакеты шлются каждые 500 мс, сегодня осциллографом мерил. А сами сигналы не различишь, весь пакет 40-50 мсек это 21 бит (пока у меня так получается). Видно просто как один мырг)
×
×
  • Создать...