Помогите разобраться со скетчем
- Войдите на сайт для отправки комментариев
Сб, 07/03/2015 - 19:55
Доброго времени суток, нашел я на просторах данный скетч, но что то не могу разобраться что к чему.
/* Motor Test - with AccelStepper Run the BigEasy motor driver board */ #include <AccelStepper.h> //Pins int ms1 = 12; int st = 5; int dr = 4; // Define a stepper and the pins it will use AccelStepper stepper(AccelStepper::DRIVER, st, dr); void setup() { // all interface pins to output pinMode(ms1, OUTPUT); // set options -- // half stepping digitalWrite(ms1, HIGH); // set up stepper stepper.setMaxSpeed(3000); stepper.setAcceleration(1000); stepper.setMinPulseWidth(200); Serial.begin(115200); } void loop() { char chr, args, step_hi, step_lo, time_hi, time_lo, i; word accel; static short steps = 0; if(Serial.available() > 0) { chr = Serial.read(); if (chr == 'G') { stepper.move(steps); // should be able to interleave running the motor and receiving // commands in the future while(stepper.distanceToGo() != 0) { stepper.run(); } Serial.write(0x55); } else if (chr == 'Y' || chr == 'y') { while(Serial.available()==0); args = Serial.read(); while(Serial.available()==0); step_hi = Serial.read(); while(Serial.available()==0); step_lo = Serial.read(); steps = (((unsigned char) step_hi) << 8) | ((unsigned char) step_lo); if(chr == 'y') { steps = -steps; } } else if (chr == 'T') { while(Serial.available()==0); args = Serial.read(); while(Serial.available()==0); time_hi = Serial.read(); while(Serial.available()==0); time_lo = Serial.read(); accel = (((unsigned char) time_hi) << 8) | ((unsigned char) time_lo); stepper.setAcceleration(accel); } else { while(Serial.available()==0); args = Serial.read(); for (i=0;i<args;++i) { while(Serial.available()==0); chr = Serial.read(); } } } }
таже проблема))
Это пример из библиотеки для Изидрайвера. Фишка конкретно этой библиотеки - возможность задавать ускорение для шаговика.
Ок, можно по конкретнее?)и такой вот еще вопрос, что нужно отправить в сом порт, что б проверить скечт, я уже что только не слал.
Ок, можно по конкретнее?)и такой вот еще вопрос, что нужно отправить в сом порт, что б проверить скечт, я уже что только не слал.
Смущает меня ваша аватарка. Ну да ладно...
Берете Ардуино, шаговый мотор, изидрайвер, отдельный блок питания. Все это подключаете и загружаете в Ардуино скетч.
Через порт вы будете управлять мотором. Конкретно "G", "Y", "T"
Спасибо)
Смущает меня ваша аватарка. Ну да ладно...
миня тоже смутило ........... отсутствие повязки :)
скорее всего не он побил Наполеона :) , а вот демократизатор в руке - прикольно :) ( ещё и левша )
посложнее - чем G, Y, y, T
судя по коду
G -запуск, без параметров
Y или y - будет ждать ввода ( последовательного ) args, step_hi, step_lo
T - будет ждать ввода ( последовательного ) args, step_hi, step_lo
_ - ввод args
что значат args, step_hi, step_lo, а также time_hi, time_lo - как в тумане :(
kisoft - правильнее подскажет, чё нано вводить в COM
Не, мне не интересно, разбираться со скетчем, про который даже написали, для чего он.
Написал бы, скетч для управления шаговым двигателем, может быть и посмотрел, а так, не интересно.
моя вас хотел спросить про - чё делает код в плане приёма по сериалу ? мине сам ВЕСЬ код - тоже не интересен :)
см. #8 - где моя не прав ? чё не досмотрел ?
спасибо :)
типа :
"пива нет"
и
"ПИВА НЕТУУУУ и НЕ БУДЕТ !!!!!!!!!!!!!!!!!"
:)
Распил скетча следующий. Какашек хватает.
0. Библиотеку AccelStepper взял отсюда. Скетч компилируется (выбрал плату Леонардо). Не проверял, неохота подключать драйвер и искать шаговый движок.
1. Переменные в loop объявлены как char, реально некоторые конвертируются в ходе действий в unsigned char, замечательно. Хотите глюков, продолжайте в том же духе.
2. Объявлены переменные ms1, st, dr как int. Хотя достаточно uint8_t. Плюс это константы, можно так сразу и описать const uint8_t msi и т.п. С т.з. программы без разницы, а с тз понимания = более читабельно.
3. Предполагаю, что в setup лучше поменять местами команды pinMode(ms1, OUTPUT); и digitalWrite(ms1, HIGH);, а то как сейчас, скорей всего будет короткая иголка на этом пине, а если наоборот, то выход не будет дергаться туда-сюда. Сам не пробовал, при случае гляну осциллом.
4. Вот это, как я уже говорил, мрак: char chr, args, step_hi, step_lo, time_hi, time_lo, i; Скорей всего нужно объявить с типом uint8_t для всех этих переменных.
5. loop выполняет следующее:
Y & y - устанавливают количество шагов.
спасибо :)
kisoft, Спасибо большое)
посложнее - чем G, Y, y, T
"y" - для эстетов