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

вам нужно немного набраться опыта программирования, а нейронки это от лукавого
const int hall_1Pin_analog = A0; // Пин датчика Холла 1 (вперед/назад)
const int hall_2Pin_analog = A1; // Пин датчика Холла 2 (поворот)
const int hall_3Pin_analog = A2; // Пин датчика Холла 3 (вращение)
const int valve_APin = 9; // Пин для управления электромагнитом A (вперед левая)
const int valve_BPin = 10; // Пин для управления электромагнитом B (вперед правая)
const int valve_CPin = 11; // Пин для управления электромагнитом C (назад левая)
const int valve_DPin = 12; // Пин для управления электромагнитом D (назад правая)
это оставляете
const int neutralPosition = 510; // Нейтральное положение датчиков Холла
const int forwardPosition = 390; // Крайнее положение вперед
const int backwardPosition = 630; // Крайнее положение назад
вот это для каждой оси, еще раз повторяю. У вас на каждой оси ручки свой датчик холлла со своими значениями! И не в коде прописывать, а реализовать алгоритм калибровки. Иначе при изменении конструкции, а с холлами это может быть банально смена проводки или места расположения относительно металлоконструкций, изменение температуры… Вам придется выяснять эти значения и прописывать в коде вручную, перепрошивать программу, если не реализуете калибровку.
В основном цикле у вас примерно следующее
// min_x, mid_x, max_x это из калибровки для оси X
// мертвая зона около центров ручек управления (слишком маленькие отклонения +/-10 считаются тепловым дрейфом и игнорятся)
const uint8_t dz = 10;
// эти значения одинаковы для всех осей
// к ним будут приводится показания датчиков холла
const int16_t MIN = -500, // минимум
MID = 0, // центр
MAX = 500; // максимум
void loop() {
uint16_t x = analogRead(hall_1Pin_analog);
int16_t X; // здесь будет значение датчика, приведенное к интервалу MIN...MAX
if (abs(x - mid_x) < dz) X = MID;
else X = x < mid_x ? map(x, min_x, mid_x - dz, MIN, MID) : map(x, mid_x + dz, max_x, MID, MAX);
}
И так для всех осей. Это только лишь мы получим X, Y, Z пропорционально подогнанные под интервалы -500..500, их еще использовать надо
Я бы подумал ограничиться двумя осями джойстика и микшированием. Но вам и так и так надо подумать, а шо будет, если оператор одновременно по ХУ отклонит, и при этом провращает ручку?
А еще надо продумать сглаживание управления, чтобы при резких движениях ручки машина так же резко не меняла усилиля на моторах.
Полность согласен. Учитывая что все программы которые я писал лет 30 назад были в Бейсик. Но Нат ничего не возможного. Главное разобраться н и что за что отвечает .
Я подумал об этом. Вращение будет работать только когда Х и У занимают нейтральное положение.
Хорошо. Но что-то для начала мне нужно прописать.
Вот после завтра вернусь домой. Начну калибровать.
1оставлю первые 8 страниц.
Дальше три раза написать следующие три страницы. И где-то нужно обозначить Х, У, Z
Ваш пример как записывать? Я так понимаю после // пишется комментарий. А сам код как написать? Можно мне как недоученному самоучки
Void setap ()
{
…
Чтобы начать калибровать.
И "unit8_t " это обозначает 8 выход или ещё под этим что то можно понимать?
это надо понимать как “почитай, наконец, спицальную литературу”
Пока твой вопрос звучит как, “Ребят, я иишницу жарю, яйцо разбивать надо, или так бросать на сковородку?”
У самурая не цели. Только путь, ага
Дурак ты, дядя, и таким останешься. “Не нужны” и “не помогут” - две принципиальных разницы в данном случае.
Я оставлю за скобками тот факт, что приступая к работе с новой для себя предметной областью вы проигнорировали изучение инструкции - ДШ на контроллер и справочника по языку, на котором вы его собрались програмировать. А сразу пошли по электричке “поможите на билет, а то поехать некуда”.
Но как этот подход сочетается с
Шизофрения какая то. Впрочем, для последней пятницы зимы сойдет
Я всех дэбилов всегда “внимательно слушаю”.
В текущей ситуации это очень правильный совет,
зря так отвечаете…
uint8_t это название типа данных, конкретно этот - unsigned integer 8 бит (беззнаковое целое)
Начните с Программирование Ардуино | Аппаратная платформа Arduino
Про типы данных тут Типы данных, переменные - AlexGyver Technologies есть табличка удобная
А вообще в “закрепе” песочницы просто уйма ссылок на информацию ПЕСОЧНИЦА. НОВИЧОК, ПРОЧТИ! | Аппаратная платформа Arduino
значит должно быть как минимум понимание, что есть типы данных, переменные и константы, операторы и операнды, а также функции.
Если не вдаваться в подробности, которые вам первое время не понадобятся, то программа для ардуины это прям обычная программа на C/C++. Основная “фишка” в наличии функций analogRead, digitalRead, analogWrite, digitalWrite, pinMode которые позволяют работать с выводами микроконтроллера: осуществлять “замеры уровня напряжения” так сказать, либо выставлять напряжение на выводе. То есть при вызове этих функций микроконтроллер узнает что-то о внешнем мире и влияет на него.
И еще в коде для ардуино присутствуют две функции:
void setup() {
// код здесь выполнится один раз при старте микроконтроллера
// здесь обычно устанавливают режимы работы входов-выходов (pinMode),
// читают сохраненные настройки из EEPROM (если таковые предусмотрены)
// и выполняют первоначальные вычисления
}
void loop() {
// выполнения кода, написанного здесь будет постоянно повторяться по кругу
// пока микроконтроллер запущен
// т.е. после выполнения последней команды в loop
// микроконтроллер начнет выполнять первую команду в loop
// нередко реализация процессов следующая:
// вначале loop прочитали данные с кнопок, датчиков и т.д. (analogRead, digitalRead)
// затем проанализировали полученные значения
// и в завершении loop установили новые состояния выводов (analogWrite, digitalWrite)
}
Но, повторюсь, в основном, это программа на Сях. Без изучения основ вы дальше двигаться, ровно как и понимать чужой код не сможете. Найти кого-то, кто напишет вам прошивку полностью едва ли получится. А собирать по крупицам готовые куски кода - вообще утопия. Тем более когда речь о крупной механической технике, по сути источнике повышенной опасности - вы просто ОБЯЗАНЫ знать от и до, как работает ваша прошивка
Всем всего хорошего.
Спасибо за ваши ценные советы.
Здесь сложилось такое мнение что я абсолютно ничего не знаю и.т.д.
Я много спрашиваю если что не понятно.
Но чтобы разъяснить ситуацию.
Я конечно первым делом почел все рекомендации в песочнице. Прочел книгу работа с Ардуино, но это была профессиональная работа со скречами.
В принципе понятно, когда я начал читать основы работы половина моих вопросов бы не возникла. В ней чуть чуть, но доступней.
Ну и да во всем нужна практика.
Поэтому если мои простые вопросы. Будем говорить раздражают читающих. Постараюсь отрабатывать их другими методами.
Ещё раз повторюсь что все ваши советы для меня бесценны.
чотаржу.
это не мнение, а предположение, основанное на некоторых вашх вопросах, и только касаемо вашего навыка программирования. Тем, кто вам помочь искренне хочет тоже не легко, когда совершенно неясен ваш уровень.
Я вот не совсем понял, как на этот вопрос ответить, например. Может попробуем от обратного: вы опишите, что точно поняли, а потом попробуем заполнить пробелы?
Хорошо так и поступим.
Я все сам составлю. Откалибрую и уже будем обсуждать вопросы по мере их поступления.
Первый на уровне программирования.
Как вы думаете на какое изменение приказаний джойстика нужно составить таблицу отклонений.
Если пока грубо берём нейтральное положение ;530-490 полное отклонение 390
Я посчитал 50 положений это означает изменения на выходе если рассматривать от 0 до 255 то по 5 бит. Наверное это слишком часто. И это только в одну сторону одного датчика холла. Просчитать предварительно труда не составляет. Просто кто как делает. Подскажите оптимальный вариант?
Показаний
Это зависит от стиля вождения, полученные показания замапить от 0 до 255 и последние в квадратичную зависимость преобразовать по мне самое то
не совсем понял эти тезисы и зачем таблица
Просто по 5.
“Бит” - это минимальная единица хранения информации в двоичной системе, а “5” это значение, в десятичной (в контексте обсуждения) системе исчисления. То есть шаг изменения значения равен 5. Без обид, я не душню.
Давайте подумаем для начала, как именно должен работать микроконтроллер, какие органы управления и воздействия к нему подключены, и какие у них есть характеристики.
Из того, что я понял:
- К устройству подключен джойстик и клапаны. Нужно получить показания джойстика и принять решение, на какой процент открыть клапаны. То есть надо одни значения преобразовать в другие по определенным правилам.
- В джойстике три датчика холла. Их показания линейные? То есть при отклонении показания меняются равномерно и пропорционально отклонению?
- Для управления клапанами вы собрали ШИМ-аналоговый преобразователь, на вход дается ШИМ, на выходе получается напряжение 5…24V. Какие требования к входному ШИМ сигналу? Частота/период/скважность? Минимальная и максимальная длина импульса?
- Чтобы клапан был полностью закрыт, нужно подавать ШИМ минимальной длины импульса, или не подавать вообще никакого сигнала?
Ответьте, пожалуйста на эти вопросы, тогда можно будет жизнеспособный алгоритм работы определить
- Забегая вперед, но это важно. Расскажите немного о гидромоторах. Насколько трактор с ними инертен? Что будет, если на 100% скорости клапан резко закроется? А если плюс к этому полностью откроется клапан на противоположное вращение? Что будет если, на нулевой скорости клапан на одном или на обоих моторах резко откроется на максимум? По какому вообще принципу телега тормозит?
Значит таблица-массив должна содержать 100 элементов. Индексы элементов связаны с данными отклонения джойстика, а сами значения элементов задают соответствующий желаемым ШИМ 0-255.
…делов то.
ты мой код смотрел, там как раз три канала и тележка?
пусть на вопросы сначала ответит, если окажется что холлы дают линейные показания, то зачем нужна таблица вообще, когда все вычисления спокойно налету производятся?
Показания берутся для 3-х осей управления, что, трехмерный массив на 100х100х100 элементов вручную заполнять?
Я вообще сомневаюсь, что реакция трактора будет пропорциональна углу отклонения стика-ручки джойстика
Слишком это просто.