Уважаемые ГУРУ. Помогите пожалуйста с кодом новичку
- Войдите на сайт для отправки комментариев
Добрый вечер, Уважаемые ГУРУ.
Я новичок, зеленый. В программировании 0. Помогите пожалуйста убрать ошибки. И подправить нижнюю часть кода. Верхняя и середина вроде в порядке. Кажется…. Скетч не компилируется и выдает ошибку.
Я хочу сделать двух координатный столик из Китая (https://ru.aliexpress.com/item/32725814262.html?spm=a2g0v.search0604.3.1.25734c0fTykmgH&ws_ab_test=searchweb0_0%2Csearchweb201602_1_10065_10068_319_317_10696_453_10084_454_10083_10618_10307_10301_537_536_10059_10884_10887_321_322_10915_10103_10914_10911_10910%2Csearchweb201603_52%2CppcSwitch_0&algo_expid=7aa2c5fa-ed2f-470f-8a80-1754942a6c14-0&algo_pvid=7aa2c5fa-ed2f-470f-8a80-1754942a6c14) на шаговых двигателях. Драйверы думаю использовать DRV8825. Также заказал, посидев на форумах TMC2208 И TMC2100. Так же заказал плату расширения (2шт) (https://ru.aliexpress.com/item/32824769997.html?spm=a2g0s.9042311.0.0.681a33edt3F34B) Будет стоят два двигателя (NEMA 17, серии 17HS4401). Плата Ардуино будет такой (https://ru.aliexpress.com/item/32339945138.html?spm=a2g0s.9042311.0.0.681a33edt3F34B) Каждый будет с регулировкой вращения оборотов потенциометром и 3-х позиционной кнопкой для выбора направления вращения. Кнопки можно будет купить в ЧИП и ДИП Что-то вроде (https://www.chipdip.ru/product/mts-113-a-2). Потенциометр движковый ((https://ru.aliexpress.com/item/32828467805.html?spm=a2g0s.9042311.0.0.681a33edt3F34B)
Блок питания для э
Сдаюсь сразу - код не мой!! Он был взят за основу. Он изначально был сделан под управления драйвером на прямую, без плат расширения. Я его начал переделывать. И сопли висящее мне не нравится. По началу все было понятно. Когда пошел void loop() , поплыл. Про нижнюю часть, «в которой проверяется текущее состояние кнопки и потенциометра», я вообще молчу.
/*Управление двумя шаговыми двигателями с Arduino. Управление вращения каждого двигателя с помощью 2 3-х позиционных переключателей и 2 движковых потенциометров*/ /*Программа для вращения двумя шаговыми моторами NEMA 17, серии 17HS4401 + драйвер DRV8825. Возможна установка TMC2100 или TMC2208. В схему включены 2 кнопки с 3-мя положениями (I, II, среднее - выключено) и два потенциометра. Кнопка регулирует направление вращения мотора, а данные с потенциометра показывают с какой скоростью крутится мотор*/ //Включение библиотек #include <AccelStepper.h> #include <GyverButton.h> #include <Bounce2.h> //определение постоянных Arduino pin const int ledEnable = 13; //светодиод на борту покажет нам состояние активации двигателей const int pinEnable = 8; // контакты, которые управляют состоянием ENABLE драйверов DRV8825, соединены последовательно, поэтому достаточно одного контакта для управления обоими const int pinDirX = 7; //цифровой вывод, который дает направление вращения двигателя X const int pinStepX = 6; //цифровой вывод, который дает сигнал на вращение двигателя X const int pinDirY = 5; //цифровой вывод, который дает направление вращения двигателя Y const int pinStepY = 4; //цифровой вывод, который дает сигнал на вращение двигателя Y /*Контакты от двух положений кнопки X - цифровые*/ const int ButtonOnX1 = 11; const int ButtonOnX2 = 12; /*Контакты от двух положений кнопки Y - цифровые*/ const int ButtonOnY1 = 9; const int ButtonOnY2 = 10; /*Контакт регистрирующий значение потенциометра X - аналоговый*/ const int PotenciomDataX = 1; /*Контакт регистрирующий значение потенциометра Y - аналоговый*/ const int PotenciomDataY = 2; //временная задержка между шагами мотора X в мс const int move_delayX = 3; //временная задержка между шагами мотора Y в мс const int move_delayY = 3; /*целочисленная константа, показывающая временную задержку между считыванием состояния кнопки X и потенциометра X*/ const int CheckButtonDelayX = 15; /*целочисленная константа, показывающая временную задержку между считыванием состояния кнопки Y и потенциометраY*/ const int CheckButtonDelayY = 15; /*Целочисленная переменная показывающая, сколько прошло времени и не пора ли считывать состояние кнопки X*/ int CurrentButtonDelayX = 0; /*Целочисленная переменная показывающая, сколько прошло времени и не пора ли считывать состояние кнопки*/ int CurrentButtonDelayY = 0; //состояние кнопки X включено-выключено int ButtonStateX = 0; //состояние кнопки Y включено-выключено int ButtonStateY = 0; //направление вращения согласно кнопке X I - 1, II - 0 int ButtonDirectionX = 0; //направление вращения согласно кнопке Y I - 1, II - 0 int ButtonDirectionY = 0; void setup() { /*задаём контактам StepX и DirX режим вывода, то есть они выдают напряжение*/ pinMode(pinStepX, OUTPUT); pinMode(pinDirX, OUTPUT); /*задаём контактам StepY и DirY режим вывода, то есть они выдают напряжение*/ pinMode(pinStepY, OUTPUT); pinMode(pinDirY, OUTPUT); /*контакты от кнопки X и потенциометра X устанавливаем в режим входных*/ pinMode(ButtonOnX1, INPUT); pinMode(ButtonOnX2, INPUT); pinMode(PotenciomDataX, INPUT); /*контакты от кнопки Y и потенциометра Y устанавливаем в режим входных*/ pinMode(ButtonOnY1, INPUT); pinMode(ButtonOnY2, INPUT); pinMode(PotenciomDataY, INPUT); //устанавливаем начальный режим для драйвера X digitalWrite(pinStepX, LOW); digitalWrite(pinDirX, LOW); //устанавливаем начальный режим для драйвера Y digitalWrite(pinStepY, LOW); digitalWrite(pinDirX, LOW); } void loop() { if(CurrentButtonDelayX >= CheckButtonDelayX) { CheckButtonStateX(); CurrentButtonDelayX = 0; } if(ButtonStateX == 1) { MakeMotorStep(); } delay(move_delayX); CurrentButtonDelayX += move_delayX; } { if(CurrentButtonDelayY >= CheckButtonDelayY) { CheckButtonStateY(); CurrentButtonDelayY = 0; } if(ButtonStateY == 1) { MakeMotorStep(); } delay(move_delayY); CurrentButtonDelayY += move_delayY; } //функция, в которой совершается один шаг мотора X void MakeMotorStepX() { digitalWrite(pinStepX, HIGH); digitalWrite(pinStepX, LOW); } //функция, в которой совершается один шаг мотора Y void MakeMotorStepY() { digitalWrite(pinStepY, HIGH); digitalWrite(pinStepY, LOW); } /*функция, в которой проверяется текущее состояние кнопки X и потенциометра X*/ void CheckButtonState() { int CurrentButtonState = 0, CurrentButtonDirection = 0; bool readbuttonparam = digitalRead(ButtonOnX1); if(readbuttonparam) { CurrentButtonState = 1; CurrentButtonDirection = 1; } readbuttonparam = digitalRead(ButtonOnX2); if(readbuttonparam) { CurrentButtonState = 1; CurrentButtonDirection = 0; } if(ButtonStateX != CurrentButtonState) { ButtonStateX = CurrentButtonState; } if(ButtonDirectionX != CurrentButtonDirection) { ButtonDirectionX = CurrentButtonDirection; digitalWrite(pinDirX, ButtonDirectionX); } CurrentStepModeIndex = map(analogRead(PotenciomDataX), 0, 1023, 0, 255); } } } /*функция, в которой проверяется текущее состояние кнопки Y и потенциометраY*/ void CheckButtonState() { int CurrentButtonState = 0, CurrentButtonDirection = 0; bool readbuttonparam = digitalRead(ButtonOnY1); if(readbuttonparam) { CurrentButtonState = 1; CurrentButtonDirection = 1; } readbuttonparam = digitalRead(ButtonOnY2); if(readbuttonparam) { CurrentButtonState = 1; CurrentButtonDirection = 0; } if(ButtonStateY != CurrentButtonState) { ButtonStateY = CurrentButtonState; } if(ButtonDirectionY != CurrentButtonDirection) { ButtonDirectionY = CurrentButtonDirection; digitalWrite(pinDirY, ButtonDirectionY); } CurrentStepMode = map(analogRead(PotenciomDataY), 0, 1023, 0, 255); } } }
сверьте имена процедур, обьявленных в конце программы и имена процедур, к которым вы обращаетесь в loop(). У вас четыре процедуры названы неправильно - кое-где X или Y не хватает, кое-где, наоборот лишние.
И еще во всех процедурах сверьте число открывающих и закрывающих скобок - похоже оно не сходится. причем не в одном месте, а в нескольких
Вот на что надеюцца люди, нихрена не смыслящие в программировании, берясь сразу за сложный проект? Что с тобой на форумах няньчица будут, сопли подтирать?
Добрый вечер. Я тут немного посидел и подумал. Проверьте пожалуйста. И укажите на ошибки!!!
И кстати, я заказал БП (https://ru.aliexpress.com/item/33015883484.html?spm=a2g0s.9042311.0.0.780033edA4fobX)
DC12V 10A 120W + 110/220V±15%
Его хватит? Или я ошибся с мощностью?
Добрый вечер. Я тут немного посидел и подумал. Проверьте пожалуйста. И укажите на ошибки!!!
компилируется?
Да. Но меня интересует как он будет работать?? Ошибок при работе не будет??
Заодно посмотрите код, пожалуйста.
Да. Но меня интересует как он будет работать?? Ошибок при работе не будет??
попробуй, пусть даже будут, зато будет видно эти ошибки, там исправишь
П С Я в программировании ноль, пользуюсь чужими скетчами, но у меня и запросы очень простые, вопыт примерно 1,5 недели, только сейчас начинаю различать не сложные части кода, думаю у тебя все будет окей
И Вас не ругают за это? Меня DetSimen так отругал, что сразу умные мысли появились!!!!
http://arduino.ru/forum/obshchii/pesochnitsa-dlya-vsekh-novichkov#comment-406075
читать всё, но особенно пункт 5.
Спасибо. Я прочитал. Все правильно. Иначе на шею сядут.
Вот на что надеюцца люди, нихрена не смыслящие в программировании, берясь сразу за сложный проект? Что с тобой на форумах няньчица будут, сопли подтирать?
я тоже посматриваю на станок, только чтобы уже готовенький )))
Я тоже икал. Пришлось делать самому.
Вот готовый скетч, но он под джойтик.
https://www.youtube.com/watch?v=fA7FV6XqT2g&list=PLc7gWGm6X25C7LwvXsEO3T_pEkix3y9NL&index=134&t=148s
Мне он не подошел. Я хотел более плавной регулировки.
так выбросьте этот недоджойстик и поставьте нормальные от аппаратуры радиоуправления
У меня есть два таких
Остались от аппаратуры FlySky FS TH9X FS-TH9X 2,4G 9CH, я ее спалил. Неправильно подключил питание.
тем более если есть, вперёд и с песней
PS посмотрел скетч, на этом стике всё должно быть великолепно
Может быть я не прав, сказывается неопытность. Но мне кажется на лиейном потенциометре будет удобней. Нет пружин, рукоятка стоит на месте. Не падает. В данный момент джойстики у меня без пружин. Переставил на другой пульт. И стики падают при отклонинии.
Или я не прав?
Вот такой переключатель подойдет на управление напрвлением вращения?
то-есть ты их разломал, непонятно куда и зачем, регуляторы зажима есть на всех джойстиках, а пружина нужна для установки его в центральное положение, тебе же нужен 0
то-есть ты их разломал, непонятно куда и зачем, регуляторы зажима есть на всех джойстиках, а пружина нужна для установки его в центральное положение, тебе же нужен 0
Я же говорю, пульт спалил. Запчасти оставил. Коромысло которое цемлется к пружине, сделать не проблема. Уже делал их из люминия и пластика. Опыт есть.
Они, джойстики еще с проводами, подключены к своим платам. Целые.
У меня есть танк 1:16. Я для него все стики под пружинил.
ясно! два стика с выкинутыми пружинами и закрученными должным образом фиксаторами решат твою проблему как мне кажется
И что тут крутить?? И что фиксировать? У меня только два стика!! Боюсь сломать и остаться с одним. Который.....никуда в общем!!
смотрим здесь - https://youtu.be/MFvvDg5BntY - озвучивает - открутить трещётку, это оно и есть. винтом регулируется усилие зажатия стика, на втором стике её и не было, надо сделать точно такую
Похоже у тебя неправильные пчёлы и неправильный мёд ))) сочувствую...