Управление двигателем джойстиком с поправкой на потенциометр.
- Войдите на сайт для отправки комментариев
Пнд, 09/10/2017 - 18:01
Всем добрый день!
Двигатель управляется джойстиком через драйвер двигателей. Схема банальная, простая и объяснять смысла нет. Она прекрасно работает. Но есть необходимость дополнительным потенциометром подключенным к ардуине ограничивать скорость вращения двигателя. Что бы она была не выше порога установленным потенциометром. Всю голову сломал, но не придумал как это сделать в программе. Может кто нибудь подскажет как это реализовать?
Вот, что у меня:
void Motor1() { int SPD_PTN = map(analogRead(SpeedPTN), 0, 1023, 0, 120); // ограничивающий потенциометр xValue = map(analogRead(xPin), 0, 1023, 0, 255); // одна ось джойстика if (xValue > 118) //назад { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ENA, ((xValue-127)-SPD_PTN)); } if (xValue < 131) //вперёд { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ENA, ((127-xValue)-SPD_PTN)); } if (xValue > 118 && xValue <= 131) //стоп { digitalWrite(ENA, LOW); digitalWrite(in1, LOW); digitalWrite(in2, LOW); } Serial.print(SPD_PTN);
В этом случае скорость можно абы как ограничивать, но при начальном изменении положения джойстика и отпускании происходит рывок. Что собственно логично. Значения в этот момент изменяются не плавно. И вот как сделать сообразить не могу.
Кто-то сильно гулял на уроках алгебры. Или преподаватель или вы. А может произошла реформа образования и алгебру объединили с физкульткрой.
Блин, так Вы делайте в два шага
1. просто маппируйте показания джойстика по потенциометру (чтобы из показаний джойстика сделать число от 0 до показаний потенциометра).
2. потом уж то, что получилось смаппируйте в 0-255.
И всё. Чего огород-то городить? Я понятно описал?
Кто-то сильно гулял на уроках алгебры.
Правльна делал! Как говорил Андрей Александрович Фурсенко, математика убивает креативность :)
Правльна делал! Как говорил Андрей Александрович Фурсенко, математика убивает креативность :)
Фусенко видно тоже гулял по черному. Математика это сплошная креативность.
Как?!?!
Вы не согласны с целым председателем попечительского совета Российского научного фонда, . действительным государственным советником Российской Федерации 1 класса, помощником президента?
Вы не согласны с человеком, отлившим в граните бессмертную формулу: "недостатком советской системы образования была попытка формировать человека-творца, а сейчас задача заключается в том, чтобы взрастить квалифицированного потребителя, способного квалифицированно пользоваться результатами творчества других".
Да, Вы, батенька прямо оппозиционер и пятая колонна!
И вообще, креативность, это член на мосту нарисовать, яйца к брусчатке прибить, куриц в вагины засовывать, а вы тут со своими синусами лезете :)
Евгений, спасибо за совет! qwone, у Вас дефицит общения? Постебаться и я неплохо могу.
Вот нетренированому человеку , тяжело поднять тяжелый груз. Но если человек регуляроно тренируется, то ему не сложно. Уроки Алгебры именно натаскивают на решение этих задач, развивают математические мускулы. Этим и сильна была советская образовательная школа. И вот с тренироваными мозгами уже легко решать задачи. Вот ваша задача из этой серии . Если вам тяжело решать в уме эту задачу, решайте на листочке. Так нагляднее. Сделайте координатную сетку ХY. По X значение от 0- до 1023. А по Y значение которые вы хотите получить. Вот так у вас получится ломаная линия. Которую вы запрограммируете. Нарисуйте 2-3 линии с разным значением потенциометра и все станет ясно.
ПС: Да и тренируйте ваши мозги, это главный инстумент человека. От сюда и мой стеб.
С алгеброй у меня всё в порядке, не переживайте. Так же как и со схемотехникой. А то, что я начал пытаться программировать на незнакомом мне языке пару месяцев назад и попросил помощи у опытных людей, моих знаний не умоляет. И мозг, и память натренированы программированием в ассемблере (если вам вообще это знакомо). Я вам не мальчик заставший ЕГЭ и с мозгами у меня всё в порядке.
qwone, Ваши ответы обсолютно неинформативны и бессмысленны. Про ЕГЭ и политику разговаривают на других форумах. Да и флудят в других местах. Если можете только «погнуть» пальцы показывая какой Вы спец., а новички заслуживают только насмешек, то не стоит тратить время. Не можете или не собираетесь помочь, пожалейте своё время и клавиатуру. Я таких как Вы за свою жизнь навидался...
...А то, что я начал пытаться программировать на незнакомом мне языке пару месяцев назад ..... И мозг, и память натренированы программированием в ассемблере (если вам вообще это знакомо)
Алгоритму все равно на каком языке его реализуют.
Вот только я не знаю как его реализовать на этом языке.
Вот только я не знаю как его реализовать на этом языке.
1.поскольку программисту безразличен язык.На знакомом просто удобнее, вывод - вы не программист.
2.Вопрос ваш был не по языку а по простому линейному преобразованию, не имеющему отношения ни к какому языку, а только к школьной успеваемости.
3. Понтов, в ответ на дружеский подкол, вы развели ведро.
4. Вывод - недалекий неуч с амбициями. Трудно вам будет. Спрашивающий должен вести себя тихо и вежливо, ибо УЖЕ унижается, самим фактом вопроса. Унижающийся с понтами - смешон.
Где я сказал, что я программист? Решили, что я когдато на ассемблере программировал? И вопрос был как это сделать на языке arduino. Научитесь читать вопрос.
... как это сделать на языке arduino...
Уточните для заднего ряда - на каком-каком языкке?
А то мы тут пропустили момент создания нового языка программирования. Интересно же!
Где я сказал, что я программист? Решили, что я когдато на ассемблере программировал? И вопрос был как это сделать на языке arduino. Научитесь читать вопрос.
Могу посоветовать следующий подход:
1. Записываете алгоритм на том языке, который Вам знаком в достаточной степени (например, на русском).
2. Когда алгоритм готов, переводите его на тот язык, который нужно (в данном случае Си или Си++).
Если последний Вам абсолютно незнаком, воспользуйтесь справочником по языку (хотя бы Керниган и Ритчи).
Практика показывает, что если тщательно выполнен пункт 1, то с пунктом 2 проблем не возникает.
Без всякого стёба и глупых нравоучений. Возможно кому нибудь пригодится.
Похоже ТС живет по правилу: "Алгебра не бойся, я тебя не трону".
Ну так покажите свой класс. Или Вы только болтать и стебаться умеете?
Ну так покажите свой класс. Или Вы только болтать и стебаться умеете?
Я вот попытался составить скетч аналог и потом заметил, что я пишу на Си++ ,то есть с классами, так что вы врят ли поймете. А проще не получается :(
Ну так покажите свой класс. Или Вы только болтать и стебаться умеете?
Я вот попытался составить скетч аналог и потом заметил, что я пишу на Си++ ,то есть с классами, так что вы врят ли поймете. А проще не получается :(
Вот это нормальный ответ.
Конечно же я не пойму. Но можно было бы и сразу это сказать. Ведь я не профессиональный программист поэтому и попросил помощи. Хотя задачу я всётаки решил. Всё идеально работает. Даже лучше чем со старой электроникой от этого крана.
Вот вам так принцип
ПС: про это вам ЕвгенийП говорил.