Ищу исполнителя скетча для управл. оборотами ШД кнопками и вывод на LCD
- Войдите на сайт для отправки комментариев
Втр, 13/08/2013 - 17:54
Прошу Вас написать скетч за вознагрождение оринтировочно такого плана
http://www.lucadentella.it/en/2013/05/30/allegro-a4988-e-arduino-3/2/
управление через вот это
http://www.goodluckbuy.com/single-axis-cnc-stepper-driver-for-cnc-millin...
Не поверите, но скетч будет такой же самый. Что в вашем, что по ссылке управление через Step/Dir.
P.S. куда деньги пошлете ? :)
На какую сумму Вы оцениваете работу?
Николай, какие деньги. По вашей же ссылке уже готовый код: https://github.com/lucadentella/A4988-and-Arduino
#include <LiquidCrystal.h> #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 #define PIN_STEP 2 #define PIN_DIR 3 #define FORWARD HIGH #define BACKWARD LOW LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int actual_direction; int step_count; void setup() { lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("Step controller"); pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); actual_direction = FORWARD; digitalWrite(PIN_DIR, actual_direction); step_count = 0; update_lcd(); } void loop() { int button = read_buttons(); if(button == btnLEFT || button == btnRIGHT) { if((actual_direction == FORWARD && button == btnLEFT) || (actual_direction == BACKWARD && button == btnRIGHT)) change_direction(); make_step(); update_lcd(); delay(200); } } void update_lcd() { lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(7, 1); lcd.print("--"); if(actual_direction == FORWARD) { for(int i = 0; i < step_count; i++) lcd.print("-"); lcd.print(">"); } else { for(int i = 0; i < step_count; i++) { lcd.setCursor(6 - i, 1); lcd.print("-"); } lcd.setCursor(7 - step_count - 1, 1); lcd.print("<"); } } void make_step() { digitalWrite(PIN_STEP, HIGH); digitalWrite(PIN_STEP, LOW); step_count++; if(step_count == 7) step_count = 0; } void change_direction() { if(actual_direction == FORWARD) actual_direction = BACKWARD; else actual_direction = FORWARD; digitalWrite(PIN_DIR, actual_direction); step_count = -1; } int read_buttons() { int adc_key_in = analogRead(0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 195) return btnUP; if (adc_key_in < 380) return btnDOWN; if (adc_key_in < 555) return btnLEFT; if (adc_key_in < 790) return btnSELECT; }Спасибо большое пробовал работает, но совсем не так как на Demo http://www.lucadentella.it/en/2013/05/30/allegro-a4988-e-arduino-3/2/
У Вас скетч крутит ШД пока держишь кнопку, крутится с постоянной скоростью и не добавляется скорость, только бегут стрелочки на индикаторе влево или вправо в зависимости на какую кнопку нажать.
Не показывает обороты, мне надо от 1 оборота (а вообще минимально четверть оборота) и макс. до 200 оборотов.
Я понял Вы из друго примера мне скинулу скетч вто это
http://www.lucadentella.it/2013/05/25/allegro-a4988-e-arduino-2/2/
Да, я вам скинул скетч, который попроще. Попробуйте второй: https://github.com/lucadentella/A4988-and-Arduino/blob/master/cntrSpeedDir.ino
#include <LiquidCrystal.h> #include <TimerOne.h> // buttons code #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // directions #define FORWARD HIGH #define BACKWARD LOW // debounce time (milliseconds) #define DEBOUNCE_TIME 200 // PINs for Pololu controller #define PIN_STEP 2 #define PIN_DIR 3 // lookup table speed - ticks (interrupts) const int speed_ticks[] = {-1, 600, 300, 200, 150, 120, 100, 86, 75, 67, 60, 55, 50, 46, 43}; // global variables LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int actual_speed; int actual_direction; int ticks; int tick_count; int button; boolean debounce; int previous_time; // custom LCD square symbol for progress bar byte square_symbol[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; // string constants char forward_arrow[] = "-->"; char backward_arrow[] = "<--"; void setup() { // init the timer1, interrupt every 0.1ms Timer1.initialize(100); Timer1.attachInterrupt(timerIsr); // init LCD and custom symbol lcd.begin(16, 2); lcd.setCursor(0,0); lcd.createChar(0, square_symbol); // pins direction pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); // initial values actual_speed = 0; actual_direction = FORWARD; tick_count = 0; ticks = -1; debounce = false; digitalWrite(PIN_DIR, actual_direction); updateLCD(); } void loop() { // check if debounce active if(debounce) { button = btnNONE; if(millis() > previous_time + DEBOUNCE_TIME) debounce = false; } else button = read_buttons(); // if a button is pressed, start debounce time if(button != btnNONE) { previous_time = millis(); debounce = true; } // check which button was pressed switch(button) { case btnUP: increase_speed(); break; case btnDOWN: decrease_speed(); break; case btnLEFT: change_direction(BACKWARD); break; case btnRIGHT: change_direction(FORWARD); break; case btnSELECT: emergency_stop(); break; } // finally update the LCD updateLCD(); } // increase speed if it's below the max (70) void increase_speed() { if(actual_speed < 70) { actual_speed += 5; tick_count = 0; ticks = speed_ticks[actual_speed / 5]; } } // decrease speed if it's above the min (0) void decrease_speed() { if(actual_speed > 0) { actual_speed -= 5; tick_count = 0; ticks = speed_ticks[actual_speed / 5]; } } // change direction if needed void change_direction(int new_direction) { if(actual_direction != new_direction) { actual_direction = new_direction; digitalWrite(PIN_DIR, actual_direction); } } // emergency stop: speed 0 void emergency_stop() { actual_speed = 0; tick_count = 0; ticks = speed_ticks[actual_speed / 5]; } // update LCD void updateLCD() { // print first line: // Speed: xxxRPM --> (or <--) lcd.setCursor(0,0); lcd.print("Speed: "); lcd.print(actual_speed); lcd.print("RPM "); lcd.setCursor(13,0); if(actual_direction == FORWARD) lcd.print(forward_arrow); else lcd.print(backward_arrow); // print second line: // progress bar [##### ] // 15 speed steps: 0 - 5 - 10 - ... - 70 lcd.setCursor(0,1); lcd.print("["); for(int i = 1; i <= 14; i++) { if(actual_speed > (5 * i) - 1) lcd.write(byte(0)); else lcd.print(" "); } lcd.print("]"); } // timer1 interrupt function void timerIsr() { if(actual_speed == 0) return; tick_count++; if(tick_count == ticks) { // make a step digitalWrite(PIN_STEP, HIGH); digitalWrite(PIN_STEP, LOW); tick_count = 0; } } // read buttons connected to a single analog pin int read_buttons() { int adc_key_in = analogRead(0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 195) return btnUP; if (adc_key_in < 380) return btnDOWN; if (adc_key_in < 555) return btnLEFT; if (adc_key_in < 790) return btnSELECT; }строка 058 ошибка Timer1.attachInterrupt(timerIsr) ;
sketch_aug14a.ino: In function 'void setup()':
sketch_aug14a:58: error: invalid conversion from 'void (*)()' to 'void (*)(bool)'
sketch_aug14a:58: error: initializing argument 1 of 'void TimerOne::attachInterrupt(void (*)(bool), long int)'
sketch_aug14a:58: error: void value not ignored as it ought to be
Есть еще один скетч но он к кнопкам LCD не привязан
Вот ссылка http://pastebin.com/jRG3gi2F
Исходное:
- ШД Pl57H56-2.6-4
- драйвер управления http://www.goodluckbuy.com/single-axis-cnc-stepper-driver-for-cnc-milling-machine-diy-max-50v-dc-4-5a.html
- LCD 1602 Shield with keypad http://www.ebay.com/itm/LCD-1602-Keypad-Shield-Module-for-Chinduino-atmega328-2560-/170832425898
- Arduino UNO ATmega328P
Как должно работать:
-кнопка включить выключить двигатель
-кнопка реверс
- скорость (больше)
- скорость (меньше)
- направление
- при нажатии включается максимальная скорость оборотов скажем 200 об при отпускании возвращается в исходное состояние, иметь возможность в скетче задать максимальную и минимальную скорость.
- возможность установки кнопками скорость в трех разрядах , например 3 разряда 000 об/мин выбираем 1 первый разряд ставим 1 выбираем второй ставим 8 выбираем третий ставим 7 получилась 187, кнопка включить скорость должна 187 об
Вот что надо если что то по мелочи не забыл .
Вот ниже мне дали скетч можно его за основу взять (или второй как Вам удобней) у него только кнопки не используют аналоговые входы, ниже второй скетч там используют кнопки LCD 1602 Shield with keypad
Скетчи как варианты http://pastebin.com/jRG3gi2F
https://github.com/lucadentella/A4988-and-Arduino/blob/master/cntrSpeedDir.ino
Кто возьмется сделать?
https://github.com/lucadentella/A4988-and-Arduino/blob/master/cntrSpeedDir.ino
Вроде все работает но почему он зависает, но двигатель продолжает крутится, приходится ресет делать, подскажите пожалуйста
Добавте в setup(){}
Serial.begin(9600); Serial.println("Started");В начало loop()
Добавте
static unsigned long lastRep=0; if(millis()-lastRep>1000){ Serial.print("heartbeat:"); Serial.println(millis()); lastRep=millis(); }Откройте сериал монитор, и смотрите, если в момент зависания (а не только в самом начале) у вас выскакивают слова "Stated" - значит происходит ребут контроллера.
Если перестали появлятся надписи heartbeat:КАКОЙ-ТО число - значит действительно loop, по какой-то причине перестал "крутится".
Вообщем вначале нужно убедится что "зависания" имеют место быть.
К тому же... было бы неплохо указать в какой ситуации возникает это "зависание" (через какой-то вермя, после 100 нажатий) и в чем оно проявлятся (Исчезают надписи с экрана, не реагирует на кнопки и т.п.)
Спасибо за помощь. Сделал как Вы написали , продолжает зависать.
Зависание происходят в разные моменты, пробовал какую то закономерность найти всегда по разному.
Загружаю скетч идет Stated далее
heartbeat:1008
heartbeat:2012 и т.д
Нажимаю кнопки DOWN ,UP трудно уловить перестает управлять кнопками где то
heartbeat:32114
heartbeat:33238 вроде в этом месте когда переходит на 33...
heartbeat:34248
heartbeat:35260
heartbeat:36271
heartbeat: продолжается , потом делаю ресет работают кнопки идет Stated
Я правильно понял, что
1. Перестает реагировать на кнопки, при этом
2. heartbeat - продолжает идти в сторону увеличения. сброса на "малые цифры" - не происходит. Верно?
Кстати, функция
intread_buttons()что она вренет, если скажем с analogRead() прочитается значение 800? Ответ - а фиг его знает. Чтоу годно.
ПОэтому, я бы убрал
и в конце read_buttons() сделал просто
int read_buttons(){ ..... return btnNONE; }Что-бы "что-нибудь" возвращалось всегда. btnNone - если не смогли опознать ни одну кнопку.
Кстати, если бы вы btnNone сделаете нулевой (поменяете ее код с btnRIGHT к примеру), то
То проверку "нажата ли кнопка", можно делать не только как сейчас
if(button != btnNONE) {но и более кратким вариантом
if(button ) {После зависания heartbeat - продолжает идти в сторону увеличения.
После сброса преходит на "малые цифры" - всегда начинает heartbeat:1008
После зависания heartbeat - продолжает идти в сторону увеличения.
Значит никаких "зависаний" - нет (вы избежали "проверте питание, поставте конденсаторы, попробуйте другую плату и т.п."). Проблема - в коде.
Смотрите сообщение #16 - обязательно, #17 - по вкусу
Может я не так вставил Ваш код. Я только учусь.
Вроде раньше для форума я копировал скетч было нормально а сейчас делаю просмотр он тянет HTML код цвета и т.д или если сохранить будет нормально?
Питиние отдельно от ИП 10 вольт подключал на отдельный разьем от arduino , менял плату пробовал Megs 2560 не чего не меняется, пульсаций проде нет смотрел осцилографом.
не получается
По хорошему, нужно еще добавить, перед
Что-то такое
Serial.print("A0="); Serial.println(analogRead(A0));Что-бы увидить какие, на самом деле, у вас приходят значения для кнопок. Бо, практически уверен, что вы взяли цифры в read_buttons() взяли "откуда-то из инета". А у вас могут быть чуток другое соотношение резисторов (погрешность, температура в комнате), чуток другое напряжение питания и т.п.
Вообщем понажимаете кнопки, посмотрите какие цифры появляется после A0= и поправте, если нужно "пороги" в read_buttons()
Может я не так вставил Ваш код. Я только учусь.
Вроде раньше для форума я копировал скетч было нормально а сейчас делаю просмотр он тянет HTML код цвета и т.д или если сохранить будет нормально?
Читайте:
Вставка программного кода в тему/комментарий
В сообщении #2 я описывал не только "как вставлять" на форум, но и "как забирать себе"
P.S. Хотя что там в #16 нужно вставлять? Одну строчку выбросить, одну дописать. Можно и руками.
Питиние отдельно от ИП 10 вольт подключал на отдельный разьем от arduino , менял плату пробовал Megs 2560 не чего не меняется, пульсаций проде нет смотрел осцилографом.
Да это и не нужно было делать. Я же сказал "мы этого избежали". То что heartbeat продолжает увеличиватся уже нам сказало что "контроллер работает нормально, без ребутов и зависов".
не получается
Пока вы не скажете "что именно у вас не получается". Что именно вы делаете - вам никто помоч не сможет. Я же на стою у вас за спиной.
void setup() { // init the timer1, interrupt every 0.1ms Timer1.initialize(100); Timer1.attachInterrupt(timerIsr); // init LCD and custom symbol lcd.begin(16, 2); lcd.setCursor(0,0); lcd.createChar(0, square_symbol); // pins direction pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); // initial values actual_speed = 0; actual_direction = FORWARD; tick_count = 0; ticks = -1; debounce = false; digitalWrite(PIN_DIR, actual_direction); updateLCD(); Serial.begin(9600); Serial.println("Started"); } void loop() { // check if debounce active static unsigned long lastRep=0; if(millis()-lastRep>1000){ Serial.print("heartbeat:"); Serial.println(millis()); lastRep=millis(); } if(debounce) { button = btnNONE; if(millis() > previous_time + DEBOUNCE_TIME) debounce = false; } else button = read_buttons();Обрезалось. Не видно скетч целиком. Вы перед тем как постить, можете нажать кнопку "Предпросмотр", что-бы увидеть "как оно будет выглядить". Она чуть правее кнопки "сохранить"
Извините, вот кусок скетча и Ваш код посмотрите правльно я сделал.
#include <LiquidCrystal.h> #include <TimerOne.h> // buttons code #define btnRIGHT 0 #define btnUP 1 #define btnDOWN 2 #define btnLEFT 3 #define btnSELECT 4 #define btnNONE 5 // directions #define FORWARD HIGH #define BACKWARD LOW // debounce time (milliseconds) #define DEBOUNCE_TIME 200 // PINs for Pololu controller #define PIN_STEP 2 #define PIN_DIR 3 // lookup table speed - ticks (interrupts) const int speed_ticks[] = {-1, 600, 300, 200, 150, 120, 100, 86, 75, 67, 60, 55, 50, 46, 43}; // global variables LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int actual_speed; int actual_direction; int ticks; int tick_count; int button; boolean debounce; int previous_time; // custom LCD square symbol for progress bar byte square_symbol[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; // string constants char forward_arrow[] = "-->"; char backward_arrow[] = "<--"; void setup() { // init the timer1, interrupt every 0.1ms Timer1.initialize(100); Timer1.attachInterrupt(timerIsr); // init LCD and custom symbol lcd.begin(16, 2); lcd.setCursor(0,0); lcd.createChar(0, square_symbol); // pins direction pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); // initial values actual_speed = 0; actual_direction = FORWARD; tick_count = 0; ticks = -1; debounce = false; digitalWrite(PIN_DIR, actual_direction); updateLCD(); Serial.begin(9600); Serial.println("Started"); } void loop() { // check if debounce active static unsigned long lastRep=0; if(millis()-lastRep>1000){ Serial.print("heartbeat:"); Serial.println(millis()); lastRep=millis(); } if(debounce) { button = btnNONE; if(millis() > previous_time + DEBOUNCE_TIME) debounce = false; } else button = read_buttons(); // if a button is pressed, start debounce time if(button != btnNONE) { previous_time = millis(); debounce = true; } // check which button was pressed switch(button) { case btnUP: increase_speed(); break; case btnDOWN: decrease_speed(); break; case btnLEFT: change_direction(BACKWARD); break; case btnRIGHT: change_direction(FORWARD); break; case btnSELECT: emergency_stop(); break; } // finally update the LCD updateLCD(); } // increase speed if it's below the max (70) void increase_speed() { if(actual_speed < 70) { actual_speed += 5; tick_count = 0; ticks = speed_ticks[actual_speed / 5]; } } // decrease speed if it's above the min (0) void decrease_speed() { if(actual_speed > 0) { actual_speed -= 5; tick_count = 0; ticks = speed_ticks[actual_speed / 5]; } } // change direction if needed void change_direction(int new_direction) { if(actual_direction != new_direction) { actual_direction = new_direction; digitalWrite(PIN_DIR, actual_direction); } } // emergency stop: speed 0 void emergency_stop() { actual_speed = 0; tick_count = 0; ticks = speed_ticks[actual_speed / 5]; } // update LCD void updateLCD() { // print first line: // Speed: xxxRPM --> (or <--) lcd.setCursor(0,0); lcd.print("Speed: "); lcd.print(actual_speed); lcd.print("RPM "); lcd.setCursor(13,0); if(actual_direction == FORWARD) lcd.print(forward_arrow); else lcd.print(backward_arrow); // print second line: // progress bar [##### ] // 15 speed steps: 0 - 5 - 10 - ... - 70 lcd.setCursor(0,1); lcd.print("["); for(int i = 1; i <= 14; i++) { if(actual_speed > (5 * i) - 1) lcd.write(byte(0)); else lcd.print(" "); } lcd.print("]"); } // timer1 interrupt function void timerIsr() { if(actual_speed == 0) return; tick_count++; if(tick_count == ticks) { // make a step digitalWrite(PIN_STEP, HIGH); digitalWrite(PIN_STEP, LOW); tick_count = 0; } } // read buttons connected to a single analog pin int read_buttons() { int adc_key_in = analogRead(0); if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 195) return btnUP; if (adc_key_in < 380) return btnDOWN; if (adc_key_in < 555) return btnLEFT; if (adc_key_in < 790) return btnSELECT; }Если рестарт сделать когда он уходить за 32.... если нажимать на кнопки начинает скорость перепрыгивать и соответственно отображать на LCD потом зависает.
вот сейчас например насчитало heartbeat:337169
если нажать на кнопку Up двигатель закрутился и все зависло, двигатель продолжает крутится
Я вообще не вижу что-бы вы что-то сделали. Единственную разницу между изначальным кодом в сообщение #6 и кодом из собщения #30 - то что добавли вывод "hearbeat".
Но это не "исправление", а "вывод дополнительной отладочной информации". Что-бы понять - что происходит. Она позволила нам понять что "с питанием и самой ардуиной - проблем нет". И то что вывод отладочной работает "как нужно" - мы выяснили еще в сообщении #19
Так что я не вижу "что же тут проверять"? Логика скетча - нигде не менялась. Попыток применить исправление описанное в сообщении #16 - я не вижу. Как и попыток вывести еще дополнительной инфы (описанно в #23). Что-бы увидеть что же на самом деле читается с аналогового входа.
Плату я выбираю Arduino Uno на плате написано Model Uno r3
Плату я выбираю Arduino Uno на плате написано Model Uno r3
Вы вообще мои сообщения читаете? Или через одно?
Я уже три раза сказал что "мы вяснили что с платой и питанием все в порядке". Три раза сказал что "сделайте поправку описанную в сообщении #16" (это явно проблемное место, даже если не оно "причина глюка" - так оставлять его нельзя).
Если не поможет - применяйте то что описанно в #23. На основании этой инфы - будем думать куда копать дальше (вносить поправки, еще натыкивать Serial.print что-бы получать еще больше инфы... пока не поймем в чем проблема).
сделал 16 все тоже самое
// read buttons connected to a single analog pin int read_buttons() { int adc_key_in = analogRead(0); //if (adc_key_in > 1000) return btnNONE; if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 195) return btnUP; if (adc_key_in < 380) return btnDOWN; if (adc_key_in < 555) return btnLEFT; if (adc_key_in < 790) return btnSELECT; return btnNONE; }сделал 23 зависло на где то сдесь
heartbeat:32161
A0=1023
heartbeat:33170
A0=1023
>сделал 16 все тоже самое
OK. Это в любом случае нужно было сделать. Функция во ситуациях должна какой-нибудь return делать. В C# к примеру - изначальное вообще бы не скомпилировалось.
Что делать дальше, вы уже знаете:
"Если не поможет - применяйте то что описанно в #23. На основании этой инфы - будем думать куда копать дальше "
Нажимайте кнопки по очереди. Смотрите в каком диапазоне, для каждой кнопки, выводятся значения A0
Меняются ли эти "диапазоны" когда "перестало реагировать на кнопки"?
сделал 23 зависло на где то сдесь
heartbeat:32161
A0=1023
heartbeat:33170
A0=1023
Что A0 показывает при нажатой кнопке, скажем RIGHT? "До зависа" и "после"?
такие и ставить то что получаю?
UP 134-135
DOWN 310
RIGHT 0
LEFT 484
SELECT 724
если не нажимать всегда A0=1023 если нажимать то соотвествует то что я писал не зависимо зависло или нет.
>Если рестарт сделать когда он уходить за 32....
Что-то подозрительное число... больно на максимальный размер int похоже.
Проверте верно ли утверждение "проблемы начинаются в районе 32-секунды". Что-то типа "на 25-той всегда все нормально", а на "40-вой уже точно не работает. всегда".
такие и ставить то что получаю?
UP 134-135
DOWN 310
RIGHT 0
LEFT 484
SELECT 724
Нет. "Точное совпадение" - делать не нужно. Пока все нормально. Если мысленно подставить эти значения в read_buttons() - коды клавиш распознаются нормально. Так что - пока не трогаем, по этому поводу read_buttons(). Просто "проверили - убедились что и тут все правильно". Ищем дальше.
Как по поводу моей догадки про проблемность 32-секунды (когда в hearbated выводится что-то больше 32000)?
на 25 нормально только на 32, а если не нажимать на кнопки после ресета двигатель стоит и нажать на любой после 32 включится на индикаторе показывает 5 оборот двигатель крутится и все кнопки не реагируют
А блин... вынудили таки... пустил у себя. Да... есть проблема в районе 32-секунды.
Ну значит где-то искать ошибычной int....
Ну и вот он
Меняем на
И будет вам счастье :)
Правда проблемы опять могут возникнуть. Примерно на 49-тый день непрерывной работы без перезагрузки.
Что-бы этого избежать, нужно
Заменить на
Ну Вы колдун , спасибо большое! это что Итальянцы ошибку сделали?
Вы извините за наглость там шаг 5 а мне надо сделать 1 и скорость где то 200 поставить если не получится 100-150, скажите где это можно сделать?
Если не ответите и на этом огромное спасибо.
Вам огромное спасибо от ученых биологов. От нашей бедности и нет возможности купить новый "насос перистальтический" для подачи физ раствора, вот и занимаемся модернизацией совдеповских насосов меняем двигатель все на коленках.
Еще раз большое Вам спасибо.
Ну Вы колдун , спасибо большое! это что Итальянцы ошибку сделали?
А что, они не люди? Писать без ошибок - еще никто не научился. Разве что вот этит ребята Они пишут правильную вещь | Kh_Oleg . Но... какой ценой эта безошибочность обходится :) И даже тут - не нулевая. Хотя эти показатели - выглядят как "что-то совершенно не реальное".
Вы извините за наглость там шаг 5 а мне надо сделать 1 и скорость где то 200 поставить если не получится 100-150, скажите где это можно сделать?
Если не ответите и на этом огромное спасибо.
Не, тут уже одной строчкой - не отделатся. Смотрите на массив speed_ticks[]
Что про них, вот мы на работаем, если Вы знали такую машину Электронику 60 Воронежского производства ЦП 1 Мгц Озу 32 Кб венчестер 20 мб, до сих пор у нас в экспериментальной установки работает.