Добрый день, хочу создать очень простую координатную рисовалку на ардуино уно и мото шилде двух ШД и эл. актуатора. Алгоритм следующий поступает команда типа А 10, 10 исполнение ШД1 (пусть будетX) перемешяет в точку 10 ед, ШД2 в точку 10 ед (пусть будет Y). Команда А 5, 8 исполнение ШД1 в точку 5 ед, ШД2 в точку 8 ед. Команда B1 – подает питание на пин (включ эл магнит актуатора) B2 – отключает его. Команды по очередно поступают из сериал порта. (как они туда поступают это отдельная тема вне обсуждения). Изучив #include <AFMotor.h> вроде все понятно, как управлять ШД вперед, назад на какое кол-во шагов. А вот как сделать переменную, которая бы из команды (допустим Х) вытаскивалась и в motor.step внедрялась…? И как motor.step поймет, что ,допустим, последовательность координат 0-10-8, что двигателю надо сначало вперед на 10 а потом назад на 2 (10-8=2). Код (C++): #include <AFMotor.h> //Подключаем заголовочный файл библиотеки //Создаем объект для двигателя на 2 канале (M3 и M4) AF_Stepper motor(2048, 2); void setup() { motor.setSpeed(10); // 10 оборотов в минуту } void loop() { motor.step(2048, FORWARD, SINGLE); //1 оборот motor.step(2048, BACKWARD, DOUBLE); //1 оборот //в режиме INTERLEAVE скорость в 2 раза ниже, а шаги в //2 раза меньше. То же число полушагов даст 0.5 оборота motor.step(2048, FORWARD, INTERLEAVE); //0.5 оборота motor.step(1024, BACKWARD, MICROSTEP); //0.5 оборота motor.release(); delay(1000); }
С приложения которое SVG файл раскладывает на такие команды (на аналогичные). Мне ребята сейчас дописывают. Она может быть, такой G1X10,Y10 может такой C1,10,10...это детали уже...Помогите с кодом скетча
команды построчно поступают в порт... Ну вот как сейчас у меня организовано - Ардуино УНО с модулем ВТ 05НС. Через БТ терминал (в данном случае с андройд) пишу команду (к примеру) А10,8. Должно переместиться по икс на 10 по игрик на 8... Я понимаю что наверное должно каким то протоколом течь команды.. но пока хочу начать с этого Допустим команда одна.
Начну с разработки команды на один двигатель. Допустим команда будет состоять из одного числа - на эту координату и сработает ШД чтение с порта (назначил переменну. X) Код (C++): int val = '0'; int X = val ; //назначил переменную ИКС void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { val = Serial.read();}//прочитал значение с порта Код (C++): #include <AFMotor.h> //Подключаем заголовочный файл библиотеки //Создаем объект для двигателя на 2 канале (M3 и M4) AF_Stepper motor(2048, 2); //с учетом редуктора на ШД void setup() { motor.setSpeed(100); // 100 оборотов в минуту } void loop() { motor.step(X, FORWARD, SINGLE); //поворот на значение X К примеру придет значение 10... А потом 8... Как задать логику что б сначала FORWARD, а потом BACKWARD. Ознакомился с sscanf - понял что функция позволяет разбить строчку на составляющие! Но если пока на одно значение, как логику задать? А вот и про буфер с sscanf нашел Вроде на примере более понятно Код (C++): //загоняем прочитанное в буфер while( Serial.available() && i< 99) { buffer[i++] = Serial.read(); } //закрываем массив buffer[i++]='\0'; } //если буфер наполнен if(i>0){ //разбераем его на части отделенные запятой sscanf(buffer, "%[^','],%[^','],%s", &unitID_in, &command_in, &data_in); } Т.Е. команду типа А,10,8 можно разбить вот так? Я так понимаю это переменные - &unitID_in, &command_in, &data_in и у меня это будут X и Y