При работе со многими новыми проектами наступает момент, когда возникает определенная неразбериха и останавливает вас как вкопанный. Вы, вероятно, знакомы с этим типом — одна из тех проблем, которые угрожают эго, посягают на комфорт и даже на психическое благополучие. Да, все это выглядит довольно драматично, но в определенных контекстах вполне согласуется с реальностью. Прежде чем мы продолжим, я хотел бы отметить, что, ссылаясь на эти типы проблем, которые заметно сложны и раздражают, было бы более правильно использовать проблемные моменты, потому что такие типичные моменты являются обычными. в создании вещей часто оказываются тривиальными, но проблема также может быть сложной по своей сути.

Часто при работе с нуля практических знаний, специфичных для конкретной технологии (например, nodejs; johnny-five), обучение часто происходит с помощью онлайн-ресурсов и часто в виде примеров. Хотя этот тип обучения направлен на приобретение большого набора навыков, которые относительно специфичны для интересующей технологии, я хотел бы напомнить мастерам и разработчикам, что примеры могут быть именно тем ресурсом, который они ищут, чтобы ответить на это стигийское разногласие, которое не «быстро» преодолевая конкретную проблему.

Чтобы подтвердить мое несколько недоработанное утверждение, я приведу пример:

Выше приведена функция, которую я написал для обработки входных данных, полученных от аналогового джойстика подключенного контроллера Dualshock (которая выводит два отдельных значения в одном и том же ограниченном диапазоне — 0–255 для обеих осей x и y, где «мертвая точка» является медианой). этого диапазона для обоих значений) и сопоставление диапазона этого ввода с диапазоном, установленным программистом, т. е. диапазоном углов, на которые сервоприводы могут быть установлены с помощью servo_X.to('specifiedAngle`) на основе ввода пользователя/контроллера в реальном времени. . Выяснение того, как масштабировать данные аналогового стика с контроллера DS, изначально не считалось большой проблемой — я знал, что могу выполнить console.log данных с контроллера, чтобы определить диапазон значений, с которыми мне придется работать, и из предыдущего опыта использования Arduino и Pi в моих прошлых проектах (спросите меня о моем пульте дистанционного управления телевизора Sony DIY), я был знаком с сервоприводами и знал, что мне придется преобразовать входное значение в диапазон, который будет правильно представлять угол сервопривода (с).

Моя первая попытка добиться этого отображения значения аналогового джойстика включала относительно сложные математические процедуры для аппроксимации необходимого значения угла сервопривода. Хотя этот метод работал, результаты были несколько недостаточными из-за неаккуратного ощущения элементов управления (это, должно быть, было связано с моими математическими расчетами и необходимостью аппроксимации). К счастью, я был настойчив, решив, что есть способ лучше, я стал искать свою проблему разными способами с помощью поисковика. Но ничего… Либо моя способность задать вопрос была крайне неумелой, либо просто не было задокументированного примера этой проблемы на первых нескольких страницах результатов Google. За этим кратким, но интенсивным онлайн-поиском сразу же последовало то, что я зашел на веб-страницу Johnny-Five и яростно просмотрел страницу с примерами в поисках примера, который мог бы даже подсказать что-то, что привело бы к решению моей проблемы.

На сайте Johnny-Five есть много примеров, поэтому я сразу же перешел к разделу примеров Servo, уделив время изучению каждого примера в этом разделе. Наконец, я наткнулся на новую подсказку... один из примеров включал управление двумя сервоприводами для создания кинетического движения с помощью ногообразного придатка с некоторым сглаживанием и калибровкой с помощью объекта API с именем Fn.

Объект Fn оказался именно тем, что я искал, и даже больше. Я бы нашел его в разделе API вверху, с одноименной меткой боковой панели Fn, просто отдыхающим, готовым к моему употреблению. Начав откровенную церемонию осознания следующего щелчка, я обнаружил множество полезных утилит для создания гаджетов с J5, включая рассматриваемую утилиту: map

Map выглядел знакомым. Ага. Конечно, есть метод Arduino с именем map , который, очевидно, является вызываемым методом. Прочитав документацию для map на официальном веб-сайте Arduino, я понял, что мой первоначальный многословный математический беспорядок функции был не так уж далек от реальной математики, происходящей с методом карты Arduino. Очень круто, математика это›››

Наконец, у меня были знания, необходимые для завершения значительной части моего проекта, и с большим успехом. Мои усилия закончились тем, что вышеупомянутый код (первый блок сверху) заменил первоначальную попытку деления, усреднения и округления входных данных и, в конечном счете, привел к лучшему пониманию как платформы Johnny-Five, так и Javascript, главным образом с точки зрения прослушивателей событий и обработчиков событий.

Код дает прекрасные результаты, и сейчас я занимаюсь полировкой всего и настройкой графического пользовательского интерфейса (GUI — как для командной строки, так и для причудливых оконных представлений).

С конкретными проблемами вы можете попытаться обобщить предполагаемое поведение в виде некоторого знания, которое, возможно, можно найти в проекте/примере, не имеющем ничего общего с вашим собственным проектом или проблемой. Потратьте время, чтобы просмотреть их и просто посмотреть, что вы можете найти. Вы, вероятно, чему-то научитесь в любом случае, и если вы заинтересованы в этой технологии (а вы, вероятно, заинтересованы, учитывая…), то изучите столько, сколько сможете.

すごいです!<Спасибо, что прочитали мой первый пост в блоге> ありがと御座います