Ви не увійшли.
570 баксів, за пристрій, який потрібен виключно щоб бісити оточуючих
не розумію
У деяких мавп вважається, хто голосніше реве, той і альфа. Був випадок, один омега знайшов пусті каністри дослідників, що спостерігали за цією стаєю. Став гримати одною об іншу і на деякий час став альфою. Але потім сородичі в нього ті каністри відібрали і надавали люлєй.
Такий варіант бачив, але не катить, потрібний саме клік звичайно миші.
Миша USB'шна? І важливо, щоб події переміщення курсора і події кліків емітувались одним і тим же пристроєм з точки зору підсистеми USB?
Бо якщо прошити такі ж самі VID:PID, Serial та інші атрибути USB, то хост ніяк не зможе відрізнити звичайну мишу від емульованої. Просто буде бачити дві однакові миші, підключені до різних портів.
Взагалі, якщо схема підключення кнопок в самій миші стандартна, без якихось вибриків, то можна сигнал з піна керуючого девайса і напряму подавати, без транзистора чи оптопари. Тільки щоб керуюча напруга з напругою живлення миші не дуже відрізнялись. І клікати самою механічною кнопкою тоді не можна, бо через кнопку буде КЗ. Але якщо між OUT і кнопкою поставити діод (катодом до кнопки, анодом до OUT), то можна.
Про керування 555 таймером теж бачив, але не знайшов готових рішень.
Якщо робити на 555, вам потрібен астабільний режим: NE555 datasheet стр.12, 6.3.2 Astable Operation.
Якщо точність періоду не критична, замість 555 можна і мультивібратор на двох транзисторах зібрати.
Яка умова початку/закінчення кліків? Подали живлення - клікаєм, відключили живлення - не клікаєм? Чи по якомусь зовнішньому сигналу?
Частота кліків фіксована чи має регулюватись?
але як це потім вірно підключити і використовувати зовсім інше питання
А це залежить, як кнопка в самій миші підключена. Якщо замикається на землю, то при використанні N-канального мосфета: затвор до виходу OUT, сток до контакту кнопки який НЕ на землі, виток в землю.
При використанні біполярного NPN транзистора: те ж саме, тільки з OUT в базу через резистор 1..100 кОм.
З оптопарою: з OUT через резистор 470-10 кОм (залежить від напруги керування) на вхід оптопари, вихід паралельно до кнопки відповідно полярності.
Таке ж саме підключення при керуванні з ардуіни чи іншого девайса.
Хотілось би це реалізувати без реле.
Підпаятись до кнопки і замикати транзистором? Або оптопарою, якщо потрібна гальванічна розвʼязка. Керувати можна і без ардуіни, 555 таймером чи будь-яким іншим генератором імпульсів.
Якщо софту пофіг, який саме девайс генерує кліки, то як уже зазначили вище, можна емулювати мишу будь-якии модулем з USB-інтерфейсом: ардуіно на Atmega32U (Pro Micro, Leonardo), RP2040 (Raspberry Pi Pico, RP2040-Zero) і т.д.
Або взагалі емулювати натискання програмно, без додаткового заліза. Програм-автоклікерів повно.
чисто цікаво якщо боротися то який треба?
FNIRSI-1014D Підійде чи треба дорожче?
Для вашої задачі може й FNIRSI-1C15 підійде. Або щось, що підключається до ПК по USB. Бувають і логічні аналізатори зі входами ±25В та можливістю захоплювати аналоговий сигнал.
В першу чергу дивіться на характеристики та заявлені функції. Читайте відгуки, бажано на тематичних форумах, не на торгівельних сайтах.
Судячи по SDK config.h , воно якось сконфігуроване.
Який саме config.h, той що include/sys/config.h в тулчейні?
Переконфігурувати під себе, звичайно, можна. Але було цікаво чи можна зробити це глобально.
Як розумію, якщо ви його модифікуєте, це вплине на ваш скомпільований код. Але ліби, прекомпільовані з цим конфігом, залишаться ті ж самі. Буде невідповідність ABI.
Збираєте проект з "pio run -v". Дивитеся, що воно компілює, з чим лінкує.
Спробував задіяти внутрішній термосенсор. Кров, кишки.. і це ще той код з сенсором навіть не запускався, падає з панікою зразу після bootloader а. Магія
Я би взагалі не звʼязувався з фреймворком arduino. Хіба що необхідно швидко запустити існуючий проект на новому залізі, або проект розробляється для зоопарку різних платформ.
якщо покрутити колесо звук ,чи нажати на кнопки,то міняеться DATA.
Тепер потрібно визначити, які біти в DATA яким кнопкам відповідають.
9- тобто в журналі передачі ми бачимо посилку инфо в кнопки с періодом от 50мс--до 2500мс
От ваш майбутній девайс-адаптер теж має формувати такі ж періодичні посилки в кнопки (LIN Header), отримувати відповідь (LIN Response), аналізувати DATA та видавати керуючі сигнали на входи SCCM.
10Навірно треба купитикупити -USB цифровой логический анализатор 8 каналов 24 MHz Saleae Logic -350грн
11-або може осцилограф але не знаю ним пользуватися:D
Якщо не знадобиться лізти у високовольтну (вище 5 вольт) частину або боротись із аналоговими завадами, то USB-шного аналізатора Saleae Logic має бути достатньо. У мене такий самий, часто допомагає.
Байти ви наче вже отримуєте стабільно, але я б перевірив, на якому точно бодрейті відповідає руль. Бо при розходженні бодрейтів при одних умовах може працювати нормально, при інших уже нестабільно.
А, здається, починаю розуміти. Ардуіну з цим скетчем, шматок якого на скріншоті, автор почепив до RX між LIN-UART адаптером та CP2102, та ініціює транзакції програмою-аналізатором з хоста. Тоді ардуіно бачить тільки відповіді.
Доречі, я не впевнений, що CP2102 вміє довільні бодрейти з достатньою гранулярністю. Див. першу сторінку тут:
https://www.freecalypso.org/pub/GSM/Pir … _an205.pdf.
В принципі, якщо досить тільки читати, то і пофіг на break.
Але ж автору потрібно реалізувати LIN master, то прийдеться видавати BREAK.
На картинці на початку теми точно такі байти. Справа вгорі.
Та наче схожі, але не зовсім такі. Поле "Принято" обрізане. Та й не зрозуміло, чи ті байти відносяться до того декодованого фрейма, чи ні. І в рядку статуса внизу пише 10400 bps.
А може воно тільки Response показує.
Щось не дуже ці байти схожі на LIN. Схожі на невідповідність бодрейтів передавача та приймача.
Дочері, рекомендую бодрейт спілкування з хостом поставити вище ніж бодрейт LIN. У вашому скетчі на кожний байт LIN відсилається три байти на хост. Звісно, в Serial є буфер, але він може переповнитись.
Має бути BREAK, потім байт Sync field: 0x55. Дивіться, наприклад, тут на сторінці 4:
https://ww1.microchip.com/downloads/en/ … 02059b.pdf
також тут:
https://web.archive.org/web/20201112034 … IN_WBT.pdf.
(Посилання зі статті на вікіпедії).
Наполегливо рекомендую роздобути логічний аналізатор або осцилограф.
Доречі, Serial в Arduino Core вміє BREAK? Здається ні, потрібно або вимикати UART і смикати GPIO, або емулювати посилкою байта з одиницями на меншому бодрейті, як це робиться в 1-Wire.
1-Нажав на lin кнопку плюс - пішов по проводу сигнал ID-10, DLS -1, DATA -55
Якщо нічого не плутаю, транзакція має ініціюватись LIN мастером, а LIN слейв тільки відповідати на запит.
але сам запуск кнопку роблю Лін трансмит.
Вибачте, цей набір слів не розпарсив.
Це конфігурація відноситься до плати, а не до проекту.
Наскільки бачу, FreeRTOS там прекомпільована, у вигляді статичної бібліотеки. Якщо хочеться свою конфігурацію - мабуть, збирати окремо, потім може якось можна вкрутити в platformio у вигляді ще одного SDK.
.platformio/packages/framework-espidf/tools/idf.py - не запускається.
Хм, а у мене немає там idf.py. Може в нас різні версії фреймворка, або у вас якісь файли залишились від попередніх версій.
У мене при збірці проекта з такою ж конфігурацією esp-шний скрипт запускається тільки в кінці, для генерації бінарика з ельфа:
"/usr/bin/python" "/home/dimich/.platformio/packages/tool-esptoolpy/esptool.py" --chip esp32c3 elf2image --flash_mode dio --flash_freq 80m --flash_size 4MB --elf-sha256-offset 0xb0 -o .pio/build/esp32-c3-devkitm-1/firmware.bin .pio/build/esp32-c3-devkitm-1/firmware.elf
А як цей esp-idf конфігурувати?
А що саме ви хочете сконфігурувати? Здається, сенс platform.io в тому, що всі борди вже преконфігуровані. Хочете кастомну - створюєте окремий профайл борди. Хоча напевне не буду стверджувати, бо грався з цією екосистемою зовсім трошки.
Деякі опції збірки можна кастомізувати за допомогою build_unflags / build_flags в platformio.ini.
.platformio/packages/framework-arduinoespressif32/tools/esp32-arduino-libs/esp32c3/qio_qspi/include/sdkconfig.h
А що у вас в platformio.ini? Бо спробував створити проект саме для esp32c3 з фреймворком arduinoespressif32, а воно каже - нема такої борди в цьому фреймворку. І директорії esp32-arduino-libs по цьому шляху теж нема. Але я поки що не дуже й старався розбиратись із цим, щоб відтворити таку ж конфігурацю проекту як у вас.
https://forum.arduino.ua/img/members/3526/mini_50528-0223.jpg
1-Ось так виглядае в реальності.
А, тоді дійсно, прибирати існуючий SCCM і городити замість нього щось кастомне не має сенсу.
Теоретично, ще один вузол CAN паралельно з існуючим SCCM може й запрацює. Але треба досліджувати та експериментувати.
4- 4 секціі лівого блоку кнопок і правого блока паралельні ,общий різні канали на фото так.
Ага, SCCM опитує блоки по черзі, в динаміці.
6-9 кнопок лівий блок ,9 кнопок правий блок=18кнопок
Я нарахував 11 кнопок в блоці.
7-Ну типа 18кнопок 18 транзисторів чи оптозборка,яка буде замикати просто на общий,при цьому не треба знати ні номінали резисторів і тд
Якщо підключати оптопари на існуючій старій платі паралельно до кнопок чи замість них, то не потрібно. Але якщо відтворювати схему на іншій платі, то як без знання номіналів?
З оптопарами здається найпростіше в плані керування, але є нюанс. У оптопари на виході біполярний транзистор, у якого є певна напруга насичення. З одними і тими ж резисторами при замиканні оптопарою напруга для SCCM буде трохі інша, ніж при замиканні механічно чи мосфетом. При максимум 6 кнопках в секції ще має попадати в діапазони, які очікує SCCM, але всяке може бути.
Тут так і просяться цифрові потенціометри
8-Напруга незнаю ну точно не 220вольт шутка,яка різниця чисто цікаво?
При певних умовах можна було би замикати безпосередньо пінами контролера, без зовнішніх ключів. Але напруга з SCCM не має перевищувати напругу живлення контролера, бо через захисні діоди на пінах струм пролазитиме в шину живлення.
Втім, з динамічним опитуванням все одно так не вийде.
9-Вновому рулі два фізично блока кожен мае свій LIN. лівий блок мае свій LIN ID-10 DLS- 8 сорость 10400 підсвітка реагуе на кнопки(кроме двох телефон вкл викл) ,правий блок кнопок свій LIN ID 22 DLS- 8 скорость 19200
У блоків з одного руля різний бодрейт? Це дивно.
не зрозумів який сигнал
Которий іде в SCCM.
адаптер лин в кан говорять даже простіше
Конструктивно простіше, тоді існуючий SCCM не потрібен. Є і контролери з інтегрованим CAN. Але не впевнений, що буде простіше програмно, якщо самому реалізовувати, а не взяти готове рішення.
https://forum.arduino.ua/img/members/3526/mini_OROA13_20250528-0223.jpg
це схема рідного форд
З цієї схеми і потрібно було починати Іншим кінцем SCCM підключений уже до CAN, так?
Глобальна ідея мені зрозуміла: замість Старого Руля з резистивними кнопками підключити Новий Руль з інтерфейсом LIN. Потрібен девайс - адаптер, який з одного боку буде LIN master і опитуватиме кнопки на Новому Рулі, з іншого буде емулювати замикання кнопок через резистори для бортової системи. Тобто є дві незалежні підзадачі: 1) отримання стану кнопок по LIN, 2) емуляція натискання резистивних кнопок.
Незрозуміло, з чим саме виникла проблема і в чому полягає питання. Також не дуже зрозумілі деталі.
Схема в сірому прямокутнику зверху - це ваш Старий Руль, так? Це його точна схема? Там чотири окремі секції кнопок, скоріш за все потрібно емулювати всі чотири. Номінали резисторів у кожній секції вже відомі? "18-кнопок" значить, що в першій секції не 5 кнопок і 6 резисторів, а 18 кнопок і 19 резисторів, чи як?
Як розумію, транзистор там намальований суто умовно, бо скоріш за все 5-й пін має підключатись до мінуса, але це не точно. Доречі, яка напруга там подається на ці кнопки з бортової системи?
Також бачу два блоки кнопок LIN - їх в новому рулі фізично два? І в кожному блоці LIN-трансивери (TJA1020), і в кожного окремий інтерфейс UART? Чи це ви тільки хочете поставити два LIN-трансивера і вивести два UART'а? Має бути достатньо одного, якщо тільки нема конфлікту ідентифікаторів.
На схемі є і старий руль, і новий, а де керуючий сигнал у бортову систему?
Якщо дуже коротко -Потрібно спіймати сигнал у LIN-шині та перетворити на натискання резистивних кнопок.
"Прошити" - це взяти вже існуючий файл прошивки і залити його в уже існуючий девайс. Цей процес зазвичай займає менше хвилини. У вас уже є файл з прошивкою і готовий девайс?
Чи вам потрібно розробити девайс та написати програмне забезпечення до нього? Це зовсім інша справа.
1-Я хочу підключити руль елемент керування по LIN, до аналового входу (резистивні кнопки)
Емулювати резистивні кнопки простіше за все комутацією резисторів такого ж номіналу як в аналоговому блоці, тільки замість механічних кнопок електронні ключі. Для цього як мінімум потрібно знати номінали резисторів. Їх можна виміряти на існуючому девайсі. Або знайти схему ваших кнопок. Також потрібно знати, до якого плеча дільника підключаються кнопки з резисторами на прийомній стороні. Зазвичай до нижнього, тобто резистори комутуються на землю, але хто зна як виробник вирішив випендритись.
Також замісь комутування набору фіксованих резисторів можна використати один цифровий потенціометр.
Є ще один збочений спосіб: видавати фіксовані напруги, які прийомна сторона очікує при натисканні тієї чи іншої кнопки. Але цей спосіб не рекомендую.
2-Без різниці ,на чому простіше, ардуіно чи STM.(плати есть )
Аналогова частина все одно потрібна. В найпростішому випадку вона складатиметься тільки з резисторів.
3-Я надам віддалений доступ до системи, куди підключений програматор і девайс, все вірно.
Також потрібно знати, якими повідомленнями відповідає руль при натисненні тієї чи іншої кнопки. Це потрібно зняти дамп з ваших кнопок.
Основне питання: ви хочете розібратись із цим, чи шукаєте виконавця за оплату?
Слова окремо - зрозуміло кожне. А коли всі разом - не зрозуміло нічого.
Ви хочете підключити елемент керування з інтерфейсом LIN до якогось аналогового входу? Чи навпаки?
Який девайс хочете прошити, і як це повʼязане з попередньою проблемою? Так ардуіно чи STM? Що ви маєте на увазі під "віддалено прошити"? Ви надасте віддалений доступ до системи, куди підключений програматор і девайс, чи як?
З оптимізацюєю по швидкодії (-O2) компілюються теж в однаковий код:
00000000 <_Z4mul8h>: 0: 90 e0 ldi r25, 0x00 ; 0 2: 88 0f add r24, r24 4: 99 1f adc r25, r25 6: 88 0f add r24, r24 8: 99 1f adc r25, r25 a: 88 0f add r24, r24 c: 99 1f adc r25, r25 e: 08 95 ret
Цікаво, що цей код виконується навіть довше ніж той, що з -Os Схоже, розробники gcc зовсім забили на -O2/O3 для AVR. Все одно всі компілять з -Os.
Спеціально перевірив, в які команди проца компілюється ця конструкція.
Така перевірка не має сенсу, бо по-перше, ви множите константу на константу, по-друге, компілювали, мабуть, без оптимізації. З увімкненою оптимізацією константи помножаться під час компіляції, і буде повертатись просто константа.
Ардуіно фреймворк компілює з -Os. Обидва варіанти:
int mul8(uint8_t n)
{
return n * 8;
}
int shl3(uint8_t n)
{
return n << 3;
}
з оптимізацією по розміру (-Os) компілюються в однаковий код, який використовує інструкцію mul:
00000000 <_Z4mul8h>:
0: 28 e0 ldi r18, 0x08 ; 8
2: 82 9f mul r24, r18
4: c0 01 movw r24, r0
6: 11 24 eor r1, r1
8: 08 95 ret
0000000a <_Z4shl3h>:
a: 28 e0 ldi r18, 0x08 ; 8
c: 82 9f mul r24, r18
e: c0 01 movw r24, r0
10: 11 24 eor r1, r1
12: 08 95 ret
З оптимізацюєю по швидкодії (-O2) компілюються теж в однаковий код:
00000000 <_Z4mul8h>:
0: 90 e0 ldi r25, 0x00 ; 0
2: 88 0f add r24, r24
4: 99 1f adc r25, r25
6: 88 0f add r24, r24
8: 99 1f adc r25, r25
a: 88 0f add r24, r24
c: 99 1f adc r25, r25
e: 08 95 ret
00000010 <_Z4shl3h>:
10: 90 e0 ldi r25, 0x00 ; 0
12: 88 0f add r24, r24
14: 99 1f adc r25, r25
16: 88 0f add r24, r24
18: 99 1f adc r25, r25
1a: 88 0f add r24, r24
1c: 99 1f adc r25, r25
1e: 08 95 ret
Але вважаючи, що фреймворк також використовує оптимізацію на етапі лінковки (-flto), кінцевий код може бути зовсім іншим.
ІЧСХ, такий запис множення тільки збиває з пантелику, смислу в ньому немає.
Саме так. Гувер думав, що він розумніший за компілятор, але компілятор виявився розумніший. Компілятор знає, що у AVR нема інструкцій зсуву окрім як на один біт, зате є апаратний мультиплікатор.
Хоча загалом у gcc теж достатньо проблем з генерацією оптимального коду для AVR.
Така "оптимізація" мала би сенс років 30 тому, і то тільки для процесорів, у яких або взагалі нема інструкцій множення, або якщо вони виконуються набагато довше ніж зсуви (як у 8086, наприклад).
Але тут курсор встановлюється на піксель.
Що у вас є `pointer` в `void printPointer(uint8_t pointer)`? Номер рядка? Так помножте номер рядка на висоту рядка в пікселях, отримаєте координату в пікселях:
void printPointer(uint8_t pointer) {
if (flag) {
display.setCursor(0, pointer * 8);
display.print(">");
} else {
display.setCursor(116, pointer * 8);
display.print("<");
}
}
А краще спочатку обчисліть координату в пікселях, потім передавайте її в setCursor():
void printPointer(uint8_t pointer) {
int y = pointer * 8;
if (flag) {
display.setCursor(0, y);
display.print(">");
} else {
display.setCursor(116, y);
display.print("<");
}
}
У гувері є дві можливості встановлення на піксель та на рядок: oled.setCursorXY и oled.setCursor
У гувері робиться те ж саме: GyverOLED.h:361:
void setCursor(int x, int y) { setCursorXY(x, y << 3); }
`<< 3` - це те ж саме множення на 8.
Як зробити переміщення курсору рядками
Помножити номер рядка на висоту рядка в пікселях:
oled.setCursor(0, pointer * 8);
Той хто нічого крім С++25 нічого не бачить - в нього теж буде хибне уявлення
Так і немає сенсу вивчати "C++25" заради самої "C++25". Ну хіба що членам робочої групи ISO/IEC JTC 1/SC 22/WG 21
Мова програмування - це інструмент для вирішення задач. Окрім знання самого інструменту потрібно знати, навіть в більшій мірі, предметну область, в якій його застосовувати.
імхо програмування - це в першу чергу абстракції і алгоритми.
Так отож. А ардуінівська C++ не дає розуміння ні абстракцій та алгоритмів з одного боку, ні мікроконтролерів та апаратної частини з іншого. Алгоритми можна (і вважаю, що потрібно) вивчати не на мікроконтролерах, а на ПК.
мені треба esp8266 проект перенести на WiFi Bluetooth модуль BW16 RTL8720DN
Існуючий esp8266 проект в чому написаний, в Arduino IDE?
Тут: https://www.amebaiot.com/en/amebad-bw16-arduino-getting-started детально розписано з чого почати, з картинками.
Ну, недо python теж так собі альтернатива
Синтаксис простіший, діагностичні повідомлення зрозуміліші, автоматичне керування памʼяттю, динамічна типізація. "Повному початківцю" набагато складніше "вистрілити собі в ногу".
А що з С не так?
Будь ласка, не плутайте С та C++. Це різні мови вже років тридцять.
Не бачу ніяких відмінностей ... Що за невірні уявлення можуть бути?
Нема ні STL, без якої сучасна C++ практично не має сенсу, ні exceptions. Щоб правильно застосовувати базові парадигми потрібне хороше розуміння архітектури.
Звісно, можна і на C++ писати в C-стилі, залежить від кінцевої мети. Але людина, що вивчала C++ по ардуіно, тільки для ардуіно і зможе на ній писати. Щоб використовувати C++ в подальшому, прийдеться перевчатись.